diff --git a/.gitignore b/.gitignore
index e5dbf01..63e2a1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
-tests/test1
+tests/bin/
testresults/
nimcache/
diff --git a/README.md b/README.md
index 3224f65..e292556 100644
--- a/README.md
+++ b/README.md
@@ -3,12 +3,20 @@ Nim bindings to the FFTW3 library, to compute Fourier transforms of various kind
# Installation
Use nimble `nimble install fftw3` to install the latest released version
+To generate the documentation locally use ``nimble doc --project src/fftw3.nim``
# Usage
-I advise to read the fftw documentation :
+Read the documentation here with the complete API and examples : https://clonkk.github.io/nimfftw3/
-You can find the documentation here with the complete API and examples : https://clonkk.github.io/nimfftw3/
+If you don't know how to use FFTW, read the official FFTW's documentation : http://www.fftw.org/fftw3_doc/
+
+# Contributing and evolution
+
+Any help and contribution is welcomed !
+
+As much as possible, breaking change in API should be avoided.
+Improving documentation and providing better high-level API are the focus for now.
# History
diff --git a/fftw3.nimble b/fftw3.nimble
index 7449b6e..4fc9a6e 100644
--- a/fftw3.nimble
+++ b/fftw3.nimble
@@ -1,6 +1,6 @@
# Package
-version = "0.2.9"
+version = "0.3.0"
author = "rcaillaud"
description = "Nim FFTW bindings"
license = "LGPL-2.1"
@@ -11,3 +11,4 @@ srcDir = "src"
requires "nim >= 1.2.0"
requires "arraymancer >= 0.6.1"
+
diff --git a/src/fftw3.nim b/src/fftw3.nim
index f4d03d7..a91667b 100644
--- a/src/fftw3.nim
+++ b/src/fftw3.nim
@@ -13,25 +13,21 @@
### Examples
-## C-Binding low-level example
+#### C-Binding low-level example
## .. code-block:: nim
-## const N = 3
-## var input : array[1..N, cdouble] = [0.0, 2.0, 6.0]
-## var output : array[1..N, cdouble]
-##
-## let plan = fftw_plan_r2r_1d(N, addr(input[low(input)]), addr(output[low(output)]),
-## FFTW_REDFT00, FFTW_ESTIMATE)
-##
-## input = [0.0, 2.0, 6.0]
-## fftw_execute(plan)
-##
-## let expectedResult : array[1..N, cdouble] = [10.0, -6.0, 2.0]
-## for i in low(output)..high(output):
-## assert abs(output[i] - expectedResult[i]) < 1.0e-14
-
-
-## Arraymancer API example
+## const N = 3
+## var input: array[1..N, cdouble] = [0.0, 2.0, 6.0]
+## var output: array[1..N, cdouble]
+## let plan = fftw_plan_r2r_1d(N, addr(input[low(input)]),
+## addr(output[low(output)]), FFTW_REDFT00, FFTW_ESTIMATE)
+## input = [0.0, 2.0, 6.0]
+## fftw_execute(plan)
+## let expectedResult: array[1..N, cdouble] = [10.0, -6.0, 2.0]
+## for i in low(output)..high(output):
+## assert abs(output[i] - expectedResult[i]) < 1.0e-14
+
+#### Arraymancer API example
## .. code-block:: nim
## var input : Tensor[Complex64] = # Insert data in your input Tensor...
@@ -42,64 +38,63 @@
## # Execute plan in-place
## fftw_execute(plan)
-## Arraymancer non-official API for ease of use
+### Planner flags
+
+## Planner are const integer that specify how the DFT plan should be computed.
+## More information about `planner flags `_
import arraymancer
import sequtils
import complex
import arraymancer/tensor/private/p_accessors
-
-
-when defined(windows):
- const LibraryName = "fftw3.dll"
-elif defined(macosx):
- const LibraryName = "libfftw3(|.0).dylib"
-else:
- const LibraryName = "libfftw3.so"
-
-type
- fftw_r2r_kind* = enum
- FFTW_R2HC = 0, FFTW_HC2R = 1, FFTW_DHT = 2, FFTW_REDFT00 = 3,
- FFTW_REDFT01 = 4, FFTW_REDFT10 = 5, FFTW_REDFT11 = 6, FFTW_RODFT00 = 7,
- FFTW_RODFT01 = 8, FFTW_RODFT10 = 9, FFTW_RODFT11 = 10
+import fftw3/libutils
+# Import mostly for documentation links
+{.push warning[UnusedImport]: off.}
+import fftw3/guru, fftw3/wisdom
+{.pop.}
+# export used types
+export fftw_plan
+export fftw_r2r_kind
const
- FFTW_MEASURE* = 0
- FFTW_DESTROY_INPUT* = 1
- FFTW_UNALIGNED* = 1 shl 1
+ FFTW_MEASURE* = 0 ## ``fftw_plan`` planner flag.
+ ##
+ ## Find an optimized plan by computing several FFTs and measuring their execution time. Default planning option.
+ FFTW_ESTIMATE* = 1 shl 6 ## ``fftw_plan`` planner flag.
+ ##
+ ## Instead of time measurements, a simple heuristic is used to pick a plan quickly. The input/output arrays are not overwritten during planning.
+ FFTW_PATIENT* = 1 shl 5 ## ``fftw_plan`` planner flag.
+ ##
+ ## Like FFTW_MEASURE, but considers a wider range of algorithms.
+ FFTW_EXHAUSTIVE* = 1 shl 3 ## ``fftw_plan`` planner flag.
+ ##
+ ## Like FFTW_PATIENT, but considers an even wider range of algorithms.
+ FFTW_WISDOM_ONLY* = 1 shl 21 ## ``fftw_plan`` planner flag.
+ ##
+ ## Special planning mode in which the plan is created only if wisdow is available.
+
+ FFTW_DESTROY_INPUT* = 1 ## ``fftw_plan`` planner flag.
+ ##
+ ## An out-of-place transform is allowed to overwrite its input array with arbitrary data. Default value for complex-to-real transform.
+ FFTW_PRESERVE_INPUT* = 1 shl 4 ## ``fftw_plan`` planner flag.
+ ##
+ ## An out-of-place transform must not change its input array. Default value except for complex-to-real (c2r and hc2r).
+ FFTW_UNALIGNED* = 1 shl 1 ## ``fftw_plan`` planner flag.
+ ##
+ ## The algorithm may not impose any unusual alignment requirements on the input/output arrays.(i.e. no SIMD may be used).
FFTW_CONSERVE_MEMORY* = 1 shl 2
- FFTW_EXHAUSTIVE* = 1 shl 3
- FFTW_PRESERVE_INPUT* = 1 shl 4
- FFTW_PATIENT* = 1 shl 5
- FFTW_ESTIMATE* = 1 shl 6
- FFTW_WISDOM_ONLY* = 1 shl 21
const
- FFTW_FORWARD* = -1
- FFTW_BACKWARD* = 1
-
-
-type
- fftw_iodim* {. pure .} = object
- n*: cint
- `is`*: cint
- os*: cint
-
- ptrdiff_t* = clong
- wchar_t* = cint
- fftw_iodim64* {. pure .} = object
- n*: ptrdiff_t
- `is`*: ptrdiff_t
- os*: ptrdiff_t
-
- fftw_write_char_func* = proc (c: char; a3: pointer) {.cdecl.}
- fftw_read_char_func* = proc (a2: pointer): cint {.cdecl.}
- fftw_complex* = Complex64
- fftw_plan* = pointer
-
-## FFT Shift
-## Because FFT-Shift is used in many FFT based Algorithm
-proc circshift_impl[T](t: Tensor[T], xshift: int, yshift: int, zshift: int): Tensor[T]=
+ FFTW_FORWARD* = -1 ## ``fftw_plan`` sign flag.
+ ##
+ ## Compute a DFT transform.
+ FFTW_BACKWARD* = 1 ## ``fftw_plan`` sign flag.
+ ##
+ ## Compute an inverse DFT transform.
+
+
+# FFT Shift
+proc circshift_impl[T](t: Tensor[T], xshift: int, yshift: int, zshift: int): Tensor[T] =
assert(t.rank == 3)
var X = t.shape[0]
var Y = t.shape[1]
@@ -114,7 +109,7 @@ proc circshift_impl[T](t: Tensor[T], xshift: int, yshift: int, zshift: int): Ten
var kk = (k + zshift) mod Z
result[ii, jj, kk] = t[i, j, k]
-proc circshift_impl[T](t: Tensor[T], xshift: int, yshift: int): Tensor[T]=
+proc circshift_impl[T](t: Tensor[T], xshift: int, yshift: int): Tensor[T] =
assert(t.rank == 2)
var X = t.shape[0]
var Y = t.shape[1]
@@ -126,7 +121,7 @@ proc circshift_impl[T](t: Tensor[T], xshift: int, yshift: int): Tensor[T]=
var jj = (j + yshift) mod Y
result[ii, jj] = t[i, j]
-proc circshift_impl[T](t: Tensor[T], xshift: int): Tensor[T]=
+proc circshift_impl[T](t: Tensor[T], xshift: int): Tensor[T] =
assert(t.rank == 1)
var X = t.shape[0]
@@ -136,16 +131,16 @@ proc circshift_impl[T](t: Tensor[T], xshift: int): Tensor[T]=
result[ii] = t[i]
# TODO : Generic implementation in parallel
-proc circshift_impl[T](t: Tensor[T], shift: seq[int]): Tensor[T]=
+proc circshift_impl[T](t: Tensor[T], shift: seq[int]): Tensor[T] =
let shape = t.shape.toSeq
result = newTensor[T](t.shape.toSeq)
for coord, values in t:
- var newcoord : seq[int] = newSeq[int](t.rank)
+ var newcoord: seq[int] = newSeq[int](t.rank)
for i in 0.. Use complex
+ fftw_complex = Complex64
+ fftw_plan* = pointer
+
+
+proc fftw_fprint_plan*(p: fftw_plan, output_file: ptr FILE) {.cdecl, importc: "fftw_fprint_plan", dynlib: Fftw3Lib.}
+
+proc fftw_print_plan*(p: fftw_plan) {.cdecl, importc: "fftw_print_plan", dynlib: Fftw3Lib.}
+
+proc fftw_sprint_plan*(p: fftw_plan): cstring {.cdecl, importc: "fftw_sprint_plan", dynlib: Fftw3Lib.}
+
+proc fftw_malloc*(n: csize_t): pointer {.cdecl, importc: "fftw_malloc", dynlib: Fftw3Lib.}
+
+proc fftw_alloc_real*(n: csize_t): ptr cdouble {.cdecl, importc: "fftw_alloc_real", dynlib: Fftw3Lib.}
+
+proc fftw_alloc_complex*(n: csize_t): ptr fftw_complex {.cdecl, importc: "fftw_alloc_complex", dynlib: Fftw3Lib.}
+
+proc fftw_free*(p: pointer) {.cdecl, importc: "fftw_free", dynlib: Fftw3Lib.}
+
+proc fftw_flops*(p: fftw_plan, add: ptr cdouble, mul: ptr cdouble, fmas: ptr cdouble) {.cdecl, importc: "fftw_flops",
+ dynlib: Fftw3Lib.}
+
+proc fftw_estimate_cost*(p: fftw_plan): cdouble {.cdecl, importc: "fftw_estimate_cost", dynlib: Fftw3Lib.}
+
+proc fftw_cost*(p: fftw_plan): cdouble {.cdecl, importc: "fftw_cost", dynlib: Fftw3Lib.}
+
+proc fftw_alignment_of*(p: ptr cdouble): cint {.cdecl, importc: "fftw_alignment_of", dynlib: Fftw3Lib.}
+
+let fftw_version* {.importc: "fftw_version", dynlib: Fftw3Lib.}: cstring
+
+var fftw_cc* {.importc: "fftw_cc", dynlib: Fftw3Lib.}: cstring
+
+var fftw_codelet_optim* {.importc: "fftw_codelet_optim", dynlib: Fftw3Lib.}: cstring
+
diff --git a/src/fftw3/wisdom.nim b/src/fftw3/wisdom.nim
new file mode 100644
index 0000000..f4044a0
--- /dev/null
+++ b/src/fftw3/wisdom.nim
@@ -0,0 +1,23 @@
+import libutils
+
+## FFTW Wisdom API for saving and restoring ``fftw_plan`` from disk.
+## See `Wisdom documentation `_ for more information.
+
+proc fftw_forget_wisdom*() {.cdecl, importc: "fftw_forget_wisdom", dynlib: Fftw3Lib.}
+proc fftw_export_wisdom_to_filename*(filename: cstring): cint {.cdecl, importc: "fftw_export_wisdom_to_filename",
+ dynlib: Fftw3Lib.}
+proc fftw_export_wisdom_to_file*(output_file: ptr FILE) {.cdecl, importc: "fftw_export_wisdom_to_file",
+ dynlib: Fftw3Lib.}
+proc fftw_export_wisdom_to_string*(): cstring {.cdecl, importc: "fftw_export_wisdom_to_string", dynlib: Fftw3Lib.}
+proc fftw_export_wisdom*(write_char: fftw_write_char_func, data: pointer) {.cdecl, importc: "fftw_export_wisdom",
+ dynlib: Fftw3Lib.}
+proc fftw_import_system_wisdom*(): cint {.cdecl, importc: "fftw_import_system_wisdom", dynlib: Fftw3Lib.}
+proc fftw_import_wisdom_from_filename*(filename: cstring): cint {.cdecl, importc: "fftw_import_wisdom_from_filename",
+ dynlib: Fftw3Lib.}
+proc fftw_import_wisdom_from_file*(input_file: ptr FILE): cint {.cdecl, importc: "fftw_import_wisdom_from_file",
+ dynlib: Fftw3Lib.}
+proc fftw_import_wisdom_from_string*(input_string: cstring): cint {.cdecl,
+ importc: "fftw_import_wisdom_from_string", dynlib: Fftw3Lib.}
+proc fftw_import_wisdom*(read_char: fftw_read_char_func, data: pointer): cint {.cdecl, importc: "fftw_import_wisdom",
+ dynlib: Fftw3Lib.}
+
diff --git a/src/htmldocs/dochack.js b/src/htmldocs/dochack.js
new file mode 100644
index 0000000..528f311
--- /dev/null
+++ b/src/htmldocs/dochack.js
@@ -0,0 +1,2007 @@
+/* Generated by the Nim Compiler v1.4.0 */
+var framePtr = null;
+var excHandler = 0;
+var lastJSError = null;
+if (typeof Int8Array === 'undefined') Int8Array = Array;
+if (typeof Int16Array === 'undefined') Int16Array = Array;
+if (typeof Int32Array === 'undefined') Int32Array = Array;
+if (typeof Uint8Array === 'undefined') Uint8Array = Array;
+if (typeof Uint16Array === 'undefined') Uint16Array = Array;
+if (typeof Uint32Array === 'undefined') Uint32Array = Array;
+if (typeof Float32Array === 'undefined') Float32Array = Array;
+if (typeof Float64Array === 'undefined') Float64Array = Array;
+var NTI10416058 = {size: 0, kind: 18, base: null, node: null, finalizer: null};
+var NTI1194653 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI10575580 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852476 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852472 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852468 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852464 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852460 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852456 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852452 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852448 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852444 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852440 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852436 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852432 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852428 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852424 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852420 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852416 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852412 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852408 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852404 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852400 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852396 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852392 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852388 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1852205 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852293 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852291 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1853626 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1853617 = {size: 0,kind: 25,base: null,node: null,finalizer: null};
+var NTI1853616 = {size: 0, kind: 18, base: null, node: null, finalizer: null};
+var NTI1852385 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1853624 = {size: 0, kind: 18, base: null, node: null, finalizer: null};
+var NTI1852387 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852269 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852267 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852659 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852273 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852271 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852657 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852655 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852289 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852287 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852653 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852651 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852277 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852275 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852649 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852673 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852281 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852279 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852671 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1188044 = {size: 0,kind: 31,base: null,node: null,finalizer: null};
+var NTI1852765 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852285 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852283 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1188064 = {size: 0,kind: 1,base: null,node: null,finalizer: null};
+var NTI1852231 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852229 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852245 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852243 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852241 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852239 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1852233 = {size: 0, kind: 14, base: null, node: null, finalizer: null};
+var NTI1852613 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852611 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852609 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1852237 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1852235 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1880505 = {size: 0,kind: 24,base: null,node: null,finalizer: null};
+var NTI1194641 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1194649 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1194408 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1194728 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1188013 = {size: 0,kind: 28,base: null,node: null,finalizer: null};
+var NTI1188015 = {size: 0,kind: 29,base: null,node: null,finalizer: null};
+var NTI1194723 = {size: 0,kind: 22,base: null,node: null,finalizer: null};
+var NTI1194617 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1194619 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1194633 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NTI1194637 = {size: 0, kind: 17, base: null, node: null, finalizer: null};
+var NNI1194637 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []};
+NTI1194637.node = NNI1194637;
+var NNI1194633 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []};
+NTI1194633.node = NNI1194633;
+var NNI1194619 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []};
+NTI1194619.node = NNI1194619;
+NTI1194723.base = NTI1194617;
+NTI1194728.base = NTI1194617;
+var NNI1194617 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "parent", len: 0, typ: NTI1194723, name: "parent", sons: null},
+{kind: 1, offset: "name", len: 0, typ: NTI1188015, name: "name", sons: null},
+{kind: 1, offset: "message", len: 0, typ: NTI1188013, name: "msg", sons: null},
+{kind: 1, offset: "trace", len: 0, typ: NTI1188013, name: "trace", sons: null},
+{kind: 1, offset: "up", len: 0, typ: NTI1194728, name: "up", sons: null}]};
+NTI1194617.node = NNI1194617;
+var NNI1194408 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []};
+NTI1194408.node = NNI1194408;
+NTI1194617.base = NTI1194408;
+NTI1194619.base = NTI1194617;
+NTI1194633.base = NTI1194619;
+NTI1194637.base = NTI1194633;
+var NNI1194649 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []};
+NTI1194649.node = NNI1194649;
+NTI1194649.base = NTI1194619;
+var NNI1194641 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []};
+NTI1194641.node = NNI1194641;
+NTI1194641.base = NTI1194619;
+NTI1852609.base = NTI1852235;
+NTI1852611.base = NTI1852235;
+NTI1852613.base = NTI1852235;
+var NNI1852233 = {kind: 2, offset: 0, typ: null, name: null, len: 12, sons: {"1": {kind: 1, offset: 1, typ: NTI1852233, name: "ElementNode", len: 0, sons: null},
+"2": {kind: 1, offset: 2, typ: NTI1852233, name: "AttributeNode", len: 0, sons: null},
+"3": {kind: 1, offset: 3, typ: NTI1852233, name: "TextNode", len: 0, sons: null},
+"4": {kind: 1, offset: 4, typ: NTI1852233, name: "CDATANode", len: 0, sons: null},
+"5": {kind: 1, offset: 5, typ: NTI1852233, name: "EntityRefNode", len: 0, sons: null},
+"6": {kind: 1, offset: 6, typ: NTI1852233, name: "EntityNode", len: 0, sons: null},
+"7": {kind: 1, offset: 7, typ: NTI1852233, name: "ProcessingInstructionNode", len: 0, sons: null},
+"8": {kind: 1, offset: 8, typ: NTI1852233, name: "CommentNode", len: 0, sons: null},
+"9": {kind: 1, offset: 9, typ: NTI1852233, name: "DocumentNode", len: 0, sons: null},
+"10": {kind: 1, offset: 10, typ: NTI1852233, name: "DocumentTypeNode", len: 0, sons: null},
+"11": {kind: 1, offset: 11, typ: NTI1852233, name: "DocumentFragmentNode", len: 0, sons: null},
+"12": {kind: 1, offset: 12, typ: NTI1852233, name: "NotationNode", len: 0, sons: null}}};
+NTI1852233.node = NNI1852233;
+var NNI1852231 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []};
+NTI1852231.node = NNI1852231;
+NTI1852231.base = NTI1194408;
+NTI1852229.base = NTI1852231;
+NTI1852765.base = NTI1852243;
+var NNI1852285 = {kind: 2, len: 10, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "acceptCharset", len: 0, typ: NTI1188015, name: "acceptCharset", sons: null},
+{kind: 1, offset: "action", len: 0, typ: NTI1188015, name: "action", sons: null},
+{kind: 1, offset: "autocomplete", len: 0, typ: NTI1188015, name: "autocomplete", sons: null},
+{kind: 1, offset: "elements", len: 0, typ: NTI1852765, name: "elements", sons: null},
+{kind: 1, offset: "encoding", len: 0, typ: NTI1188015, name: "encoding", sons: null},
+{kind: 1, offset: "enctype", len: 0, typ: NTI1188015, name: "enctype", sons: null},
+{kind: 1, offset: "length", len: 0, typ: NTI1188044, name: "length", sons: null},
+{kind: 1, offset: "method", len: 0, typ: NTI1188015, name: "method", sons: null},
+{kind: 1, offset: "noValidate", len: 0, typ: NTI1188064, name: "noValidate", sons: null},
+{kind: 1, offset: "target", len: 0, typ: NTI1188015, name: "target", sons: null}]};
+NTI1852285.node = NNI1852285;
+NTI1852285.base = NTI1852245;
+NTI1852283.base = NTI1852285;
+var NNI1852281 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "defaultSelected", len: 0, typ: NTI1188064, name: "defaultSelected", sons: null},
+{kind: 1, offset: "selected", len: 0, typ: NTI1188064, name: "selected", sons: null},
+{kind: 1, offset: "selectedIndex", len: 0, typ: NTI1188044, name: "selectedIndex", sons: null},
+{kind: 1, offset: "text", len: 0, typ: NTI1188015, name: "text", sons: null},
+{kind: 1, offset: "value", len: 0, typ: NTI1188015, name: "value", sons: null}]};
+NTI1852281.node = NNI1852281;
+NTI1852281.base = NTI1852245;
+NTI1852279.base = NTI1852281;
+NTI1852671.base = NTI1852279;
+NTI1852673.base = NTI1852279;
+var NNI1852245 = {kind: 2, len: 20, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "className", len: 0, typ: NTI1188015, name: "className", sons: null},
+{kind: 1, offset: "classList", len: 0, typ: NTI1852229, name: "classList", sons: null},
+{kind: 1, offset: "checked", len: 0, typ: NTI1188064, name: "checked", sons: null},
+{kind: 1, offset: "defaultChecked", len: 0, typ: NTI1188064, name: "defaultChecked", sons: null},
+{kind: 1, offset: "defaultValue", len: 0, typ: NTI1188015, name: "defaultValue", sons: null},
+{kind: 1, offset: "disabled", len: 0, typ: NTI1188064, name: "disabled", sons: null},
+{kind: 1, offset: "form", len: 0, typ: NTI1852283, name: "form", sons: null},
+{kind: 1, offset: "name", len: 0, typ: NTI1188015, name: "name", sons: null},
+{kind: 1, offset: "readOnly", len: 0, typ: NTI1188064, name: "readOnly", sons: null},
+{kind: 1, offset: "options", len: 0, typ: NTI1852671, name: "options", sons: null},
+{kind: 1, offset: "selectedOptions", len: 0, typ: NTI1852673, name: "selectedOptions", sons: null},
+{kind: 1, offset: "clientWidth", len: 0, typ: NTI1188044, name: "clientWidth", sons: null},
+{kind: 1, offset: "clientHeight", len: 0, typ: NTI1188044, name: "clientHeight", sons: null},
+{kind: 1, offset: "contentEditable", len: 0, typ: NTI1188015, name: "contentEditable", sons: null},
+{kind: 1, offset: "isContentEditable", len: 0, typ: NTI1188064, name: "isContentEditable", sons: null},
+{kind: 1, offset: "dir", len: 0, typ: NTI1188015, name: "dir", sons: null},
+{kind: 1, offset: "offsetHeight", len: 0, typ: NTI1188044, name: "offsetHeight", sons: null},
+{kind: 1, offset: "offsetWidth", len: 0, typ: NTI1188044, name: "offsetWidth", sons: null},
+{kind: 1, offset: "offsetLeft", len: 0, typ: NTI1188044, name: "offsetLeft", sons: null},
+{kind: 1, offset: "offsetTop", len: 0, typ: NTI1188044, name: "offsetTop", sons: null}]};
+NTI1852245.node = NNI1852245;
+NTI1852245.base = NTI1852237;
+NTI1852243.base = NTI1852245;
+var NNI1852277 = {kind: 2, len: 3, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "text", len: 0, typ: NTI1188015, name: "text", sons: null},
+{kind: 1, offset: "x", len: 0, typ: NTI1188044, name: "x", sons: null},
+{kind: 1, offset: "y", len: 0, typ: NTI1188044, name: "y", sons: null}]};
+NTI1852277.node = NNI1852277;
+NTI1852277.base = NTI1852245;
+NTI1852275.base = NTI1852277;
+NTI1852649.base = NTI1852275;
+NTI1852651.base = NTI1852283;
+var NNI1852289 = {kind: 2, len: 8, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "border", len: 0, typ: NTI1188044, name: "border", sons: null},
+{kind: 1, offset: "complete", len: 0, typ: NTI1188064, name: "complete", sons: null},
+{kind: 1, offset: "height", len: 0, typ: NTI1188044, name: "height", sons: null},
+{kind: 1, offset: "hspace", len: 0, typ: NTI1188044, name: "hspace", sons: null},
+{kind: 1, offset: "lowsrc", len: 0, typ: NTI1188015, name: "lowsrc", sons: null},
+{kind: 1, offset: "src", len: 0, typ: NTI1188015, name: "src", sons: null},
+{kind: 1, offset: "vspace", len: 0, typ: NTI1188044, name: "vspace", sons: null},
+{kind: 1, offset: "width", len: 0, typ: NTI1188044, name: "width", sons: null}]};
+NTI1852289.node = NNI1852289;
+NTI1852289.base = NTI1852245;
+NTI1852287.base = NTI1852289;
+NTI1852653.base = NTI1852287;
+NTI1852655.base = NTI1852243;
+var NNI1852273 = {kind: 2, len: 6, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "height", len: 0, typ: NTI1188044, name: "height", sons: null},
+{kind: 1, offset: "hspace", len: 0, typ: NTI1188044, name: "hspace", sons: null},
+{kind: 1, offset: "src", len: 0, typ: NTI1188015, name: "src", sons: null},
+{kind: 1, offset: "width", len: 0, typ: NTI1188044, name: "width", sons: null},
+{kind: 1, offset: "type", len: 0, typ: NTI1188015, name: "type", sons: null},
+{kind: 1, offset: "vspace", len: 0, typ: NTI1188044, name: "vspace", sons: null}]};
+NTI1852273.node = NNI1852273;
+NTI1852273.base = NTI1852245;
+NTI1852271.base = NTI1852273;
+NTI1852657.base = NTI1852271;
+var NNI1852269 = {kind: 2, len: 4, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "target", len: 0, typ: NTI1188015, name: "target", sons: null},
+{kind: 1, offset: "text", len: 0, typ: NTI1188015, name: "text", sons: null},
+{kind: 1, offset: "x", len: 0, typ: NTI1188044, name: "x", sons: null},
+{kind: 1, offset: "y", len: 0, typ: NTI1188044, name: "y", sons: null}]};
+NTI1852269.node = NNI1852269;
+NTI1852269.base = NTI1852245;
+NTI1852267.base = NTI1852269;
+NTI1852659.base = NTI1852267;
+var NNI1853616 = {kind: 1, offset: "then", len: 0, typ: NTI1853617, name: "then", sons: null};
+NTI1853616.node = NNI1853616;
+NTI1852385.base = NTI1853616;
+var NNI1853624 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "ready", len: 0, typ: NTI1852385, name: "ready", sons: null},
+{kind: 1, offset: "onloadingdone", len: 0, typ: NTI1853626, name: "onloadingdone", sons: null}]};
+NTI1853624.node = NNI1853624;
+NTI1852387.base = NTI1853624;
+var NNI1852241 = {kind: 2, len: 22, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "activeElement", len: 0, typ: NTI1852243, name: "activeElement", sons: null},
+{kind: 1, offset: "alinkColor", len: 0, typ: NTI1188015, name: "alinkColor", sons: null},
+{kind: 1, offset: "bgColor", len: 0, typ: NTI1188015, name: "bgColor", sons: null},
+{kind: 1, offset: "body", len: 0, typ: NTI1852243, name: "body", sons: null},
+{kind: 1, offset: "charset", len: 0, typ: NTI1188015, name: "charset", sons: null},
+{kind: 1, offset: "cookie", len: 0, typ: NTI1188015, name: "cookie", sons: null},
+{kind: 1, offset: "defaultCharset", len: 0, typ: NTI1188015, name: "defaultCharset", sons: null},
+{kind: 1, offset: "fgColor", len: 0, typ: NTI1188015, name: "fgColor", sons: null},
+{kind: 1, offset: "head", len: 0, typ: NTI1852243, name: "head", sons: null},
+{kind: 1, offset: "lastModified", len: 0, typ: NTI1188015, name: "lastModified", sons: null},
+{kind: 1, offset: "linkColor", len: 0, typ: NTI1188015, name: "linkColor", sons: null},
+{kind: 1, offset: "referrer", len: 0, typ: NTI1188015, name: "referrer", sons: null},
+{kind: 1, offset: "title", len: 0, typ: NTI1188015, name: "title", sons: null},
+{kind: 1, offset: "URL", len: 0, typ: NTI1188015, name: "URL", sons: null},
+{kind: 1, offset: "vlinkColor", len: 0, typ: NTI1188015, name: "vlinkColor", sons: null},
+{kind: 1, offset: "anchors", len: 0, typ: NTI1852649, name: "anchors", sons: null},
+{kind: 1, offset: "forms", len: 0, typ: NTI1852651, name: "forms", sons: null},
+{kind: 1, offset: "images", len: 0, typ: NTI1852653, name: "images", sons: null},
+{kind: 1, offset: "applets", len: 0, typ: NTI1852655, name: "applets", sons: null},
+{kind: 1, offset: "embeds", len: 0, typ: NTI1852657, name: "embeds", sons: null},
+{kind: 1, offset: "links", len: 0, typ: NTI1852659, name: "links", sons: null},
+{kind: 1, offset: "fonts", len: 0, typ: NTI1852387, name: "fonts", sons: null}]};
+NTI1852241.node = NNI1852241;
+NTI1852241.base = NTI1852237;
+NTI1852239.base = NTI1852241;
+var NNI1852293 = {kind: 2, len: 368, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "alignContent", len: 0, typ: NTI1188015, name: "alignContent", sons: null},
+{kind: 1, offset: "alignItems", len: 0, typ: NTI1188015, name: "alignItems", sons: null},
+{kind: 1, offset: "alignSelf", len: 0, typ: NTI1188015, name: "alignSelf", sons: null},
+{kind: 1, offset: "all", len: 0, typ: NTI1188015, name: "all", sons: null},
+{kind: 1, offset: "animation", len: 0, typ: NTI1188015, name: "animation", sons: null},
+{kind: 1, offset: "animationDelay", len: 0, typ: NTI1188015, name: "animationDelay", sons: null},
+{kind: 1, offset: "animationDirection", len: 0, typ: NTI1188015, name: "animationDirection", sons: null},
+{kind: 1, offset: "animationDuration", len: 0, typ: NTI1188015, name: "animationDuration", sons: null},
+{kind: 1, offset: "animationFillMode", len: 0, typ: NTI1188015, name: "animationFillMode", sons: null},
+{kind: 1, offset: "animationIterationCount", len: 0, typ: NTI1188015, name: "animationIterationCount", sons: null},
+{kind: 1, offset: "animationName", len: 0, typ: NTI1188015, name: "animationName", sons: null},
+{kind: 1, offset: "animationPlayState", len: 0, typ: NTI1188015, name: "animationPlayState", sons: null},
+{kind: 1, offset: "animationTimingFunction", len: 0, typ: NTI1188015, name: "animationTimingFunction", sons: null},
+{kind: 1, offset: "backdropFilter", len: 0, typ: NTI1188015, name: "backdropFilter", sons: null},
+{kind: 1, offset: "backfaceVisibility", len: 0, typ: NTI1188015, name: "backfaceVisibility", sons: null},
+{kind: 1, offset: "background", len: 0, typ: NTI1188015, name: "background", sons: null},
+{kind: 1, offset: "backgroundAttachment", len: 0, typ: NTI1188015, name: "backgroundAttachment", sons: null},
+{kind: 1, offset: "backgroundBlendMode", len: 0, typ: NTI1188015, name: "backgroundBlendMode", sons: null},
+{kind: 1, offset: "backgroundClip", len: 0, typ: NTI1188015, name: "backgroundClip", sons: null},
+{kind: 1, offset: "backgroundColor", len: 0, typ: NTI1188015, name: "backgroundColor", sons: null},
+{kind: 1, offset: "backgroundImage", len: 0, typ: NTI1188015, name: "backgroundImage", sons: null},
+{kind: 1, offset: "backgroundOrigin", len: 0, typ: NTI1188015, name: "backgroundOrigin", sons: null},
+{kind: 1, offset: "backgroundPosition", len: 0, typ: NTI1188015, name: "backgroundPosition", sons: null},
+{kind: 1, offset: "backgroundRepeat", len: 0, typ: NTI1188015, name: "backgroundRepeat", sons: null},
+{kind: 1, offset: "backgroundSize", len: 0, typ: NTI1188015, name: "backgroundSize", sons: null},
+{kind: 1, offset: "blockSize", len: 0, typ: NTI1188015, name: "blockSize", sons: null},
+{kind: 1, offset: "border", len: 0, typ: NTI1188015, name: "border", sons: null},
+{kind: 1, offset: "borderBlock", len: 0, typ: NTI1188015, name: "borderBlock", sons: null},
+{kind: 1, offset: "borderBlockColor", len: 0, typ: NTI1188015, name: "borderBlockColor", sons: null},
+{kind: 1, offset: "borderBlockEnd", len: 0, typ: NTI1188015, name: "borderBlockEnd", sons: null},
+{kind: 1, offset: "borderBlockEndColor", len: 0, typ: NTI1188015, name: "borderBlockEndColor", sons: null},
+{kind: 1, offset: "borderBlockEndStyle", len: 0, typ: NTI1188015, name: "borderBlockEndStyle", sons: null},
+{kind: 1, offset: "borderBlockEndWidth", len: 0, typ: NTI1188015, name: "borderBlockEndWidth", sons: null},
+{kind: 1, offset: "borderBlockStart", len: 0, typ: NTI1188015, name: "borderBlockStart", sons: null},
+{kind: 1, offset: "borderBlockStartColor", len: 0, typ: NTI1188015, name: "borderBlockStartColor", sons: null},
+{kind: 1, offset: "borderBlockStartStyle", len: 0, typ: NTI1188015, name: "borderBlockStartStyle", sons: null},
+{kind: 1, offset: "borderBlockStartWidth", len: 0, typ: NTI1188015, name: "borderBlockStartWidth", sons: null},
+{kind: 1, offset: "borderBlockStyle", len: 0, typ: NTI1188015, name: "borderBlockStyle", sons: null},
+{kind: 1, offset: "borderBlockWidth", len: 0, typ: NTI1188015, name: "borderBlockWidth", sons: null},
+{kind: 1, offset: "borderBottom", len: 0, typ: NTI1188015, name: "borderBottom", sons: null},
+{kind: 1, offset: "borderBottomColor", len: 0, typ: NTI1188015, name: "borderBottomColor", sons: null},
+{kind: 1, offset: "borderBottomLeftRadius", len: 0, typ: NTI1188015, name: "borderBottomLeftRadius", sons: null},
+{kind: 1, offset: "borderBottomRightRadius", len: 0, typ: NTI1188015, name: "borderBottomRightRadius", sons: null},
+{kind: 1, offset: "borderBottomStyle", len: 0, typ: NTI1188015, name: "borderBottomStyle", sons: null},
+{kind: 1, offset: "borderBottomWidth", len: 0, typ: NTI1188015, name: "borderBottomWidth", sons: null},
+{kind: 1, offset: "borderCollapse", len: 0, typ: NTI1188015, name: "borderCollapse", sons: null},
+{kind: 1, offset: "borderColor", len: 0, typ: NTI1188015, name: "borderColor", sons: null},
+{kind: 1, offset: "borderEndEndRadius", len: 0, typ: NTI1188015, name: "borderEndEndRadius", sons: null},
+{kind: 1, offset: "borderEndStartRadius", len: 0, typ: NTI1188015, name: "borderEndStartRadius", sons: null},
+{kind: 1, offset: "borderImage", len: 0, typ: NTI1188015, name: "borderImage", sons: null},
+{kind: 1, offset: "borderImageOutset", len: 0, typ: NTI1188015, name: "borderImageOutset", sons: null},
+{kind: 1, offset: "borderImageRepeat", len: 0, typ: NTI1188015, name: "borderImageRepeat", sons: null},
+{kind: 1, offset: "borderImageSlice", len: 0, typ: NTI1188015, name: "borderImageSlice", sons: null},
+{kind: 1, offset: "borderImageSource", len: 0, typ: NTI1188015, name: "borderImageSource", sons: null},
+{kind: 1, offset: "borderImageWidth", len: 0, typ: NTI1188015, name: "borderImageWidth", sons: null},
+{kind: 1, offset: "borderInline", len: 0, typ: NTI1188015, name: "borderInline", sons: null},
+{kind: 1, offset: "borderInlineColor", len: 0, typ: NTI1188015, name: "borderInlineColor", sons: null},
+{kind: 1, offset: "borderInlineEnd", len: 0, typ: NTI1188015, name: "borderInlineEnd", sons: null},
+{kind: 1, offset: "borderInlineEndColor", len: 0, typ: NTI1188015, name: "borderInlineEndColor", sons: null},
+{kind: 1, offset: "borderInlineEndStyle", len: 0, typ: NTI1188015, name: "borderInlineEndStyle", sons: null},
+{kind: 1, offset: "borderInlineEndWidth", len: 0, typ: NTI1188015, name: "borderInlineEndWidth", sons: null},
+{kind: 1, offset: "borderInlineStart", len: 0, typ: NTI1188015, name: "borderInlineStart", sons: null},
+{kind: 1, offset: "borderInlineStartColor", len: 0, typ: NTI1188015, name: "borderInlineStartColor", sons: null},
+{kind: 1, offset: "borderInlineStartStyle", len: 0, typ: NTI1188015, name: "borderInlineStartStyle", sons: null},
+{kind: 1, offset: "borderInlineStartWidth", len: 0, typ: NTI1188015, name: "borderInlineStartWidth", sons: null},
+{kind: 1, offset: "borderInlineStyle", len: 0, typ: NTI1188015, name: "borderInlineStyle", sons: null},
+{kind: 1, offset: "borderInlineWidth", len: 0, typ: NTI1188015, name: "borderInlineWidth", sons: null},
+{kind: 1, offset: "borderLeft", len: 0, typ: NTI1188015, name: "borderLeft", sons: null},
+{kind: 1, offset: "borderLeftColor", len: 0, typ: NTI1188015, name: "borderLeftColor", sons: null},
+{kind: 1, offset: "borderLeftStyle", len: 0, typ: NTI1188015, name: "borderLeftStyle", sons: null},
+{kind: 1, offset: "borderLeftWidth", len: 0, typ: NTI1188015, name: "borderLeftWidth", sons: null},
+{kind: 1, offset: "borderRadius", len: 0, typ: NTI1188015, name: "borderRadius", sons: null},
+{kind: 1, offset: "borderRight", len: 0, typ: NTI1188015, name: "borderRight", sons: null},
+{kind: 1, offset: "borderRightColor", len: 0, typ: NTI1188015, name: "borderRightColor", sons: null},
+{kind: 1, offset: "borderRightStyle", len: 0, typ: NTI1188015, name: "borderRightStyle", sons: null},
+{kind: 1, offset: "borderRightWidth", len: 0, typ: NTI1188015, name: "borderRightWidth", sons: null},
+{kind: 1, offset: "borderSpacing", len: 0, typ: NTI1188015, name: "borderSpacing", sons: null},
+{kind: 1, offset: "borderStartEndRadius", len: 0, typ: NTI1188015, name: "borderStartEndRadius", sons: null},
+{kind: 1, offset: "borderStartStartRadius", len: 0, typ: NTI1188015, name: "borderStartStartRadius", sons: null},
+{kind: 1, offset: "borderStyle", len: 0, typ: NTI1188015, name: "borderStyle", sons: null},
+{kind: 1, offset: "borderTop", len: 0, typ: NTI1188015, name: "borderTop", sons: null},
+{kind: 1, offset: "borderTopColor", len: 0, typ: NTI1188015, name: "borderTopColor", sons: null},
+{kind: 1, offset: "borderTopLeftRadius", len: 0, typ: NTI1188015, name: "borderTopLeftRadius", sons: null},
+{kind: 1, offset: "borderTopRightRadius", len: 0, typ: NTI1188015, name: "borderTopRightRadius", sons: null},
+{kind: 1, offset: "borderTopStyle", len: 0, typ: NTI1188015, name: "borderTopStyle", sons: null},
+{kind: 1, offset: "borderTopWidth", len: 0, typ: NTI1188015, name: "borderTopWidth", sons: null},
+{kind: 1, offset: "borderWidth", len: 0, typ: NTI1188015, name: "borderWidth", sons: null},
+{kind: 1, offset: "bottom", len: 0, typ: NTI1188015, name: "bottom", sons: null},
+{kind: 1, offset: "boxDecorationBreak", len: 0, typ: NTI1188015, name: "boxDecorationBreak", sons: null},
+{kind: 1, offset: "boxShadow", len: 0, typ: NTI1188015, name: "boxShadow", sons: null},
+{kind: 1, offset: "boxSizing", len: 0, typ: NTI1188015, name: "boxSizing", sons: null},
+{kind: 1, offset: "breakAfter", len: 0, typ: NTI1188015, name: "breakAfter", sons: null},
+{kind: 1, offset: "breakBefore", len: 0, typ: NTI1188015, name: "breakBefore", sons: null},
+{kind: 1, offset: "breakInside", len: 0, typ: NTI1188015, name: "breakInside", sons: null},
+{kind: 1, offset: "captionSide", len: 0, typ: NTI1188015, name: "captionSide", sons: null},
+{kind: 1, offset: "caretColor", len: 0, typ: NTI1188015, name: "caretColor", sons: null},
+{kind: 1, offset: "clear", len: 0, typ: NTI1188015, name: "clear", sons: null},
+{kind: 1, offset: "clip", len: 0, typ: NTI1188015, name: "clip", sons: null},
+{kind: 1, offset: "clipPath", len: 0, typ: NTI1188015, name: "clipPath", sons: null},
+{kind: 1, offset: "color", len: 0, typ: NTI1188015, name: "color", sons: null},
+{kind: 1, offset: "colorAdjust", len: 0, typ: NTI1188015, name: "colorAdjust", sons: null},
+{kind: 1, offset: "columnCount", len: 0, typ: NTI1188015, name: "columnCount", sons: null},
+{kind: 1, offset: "columnFill", len: 0, typ: NTI1188015, name: "columnFill", sons: null},
+{kind: 1, offset: "columnGap", len: 0, typ: NTI1188015, name: "columnGap", sons: null},
+{kind: 1, offset: "columnRule", len: 0, typ: NTI1188015, name: "columnRule", sons: null},
+{kind: 1, offset: "columnRuleColor", len: 0, typ: NTI1188015, name: "columnRuleColor", sons: null},
+{kind: 1, offset: "columnRuleStyle", len: 0, typ: NTI1188015, name: "columnRuleStyle", sons: null},
+{kind: 1, offset: "columnRuleWidth", len: 0, typ: NTI1188015, name: "columnRuleWidth", sons: null},
+{kind: 1, offset: "columnSpan", len: 0, typ: NTI1188015, name: "columnSpan", sons: null},
+{kind: 1, offset: "columnWidth", len: 0, typ: NTI1188015, name: "columnWidth", sons: null},
+{kind: 1, offset: "columns", len: 0, typ: NTI1188015, name: "columns", sons: null},
+{kind: 1, offset: "contain", len: 0, typ: NTI1188015, name: "contain", sons: null},
+{kind: 1, offset: "content", len: 0, typ: NTI1188015, name: "content", sons: null},
+{kind: 1, offset: "counterIncrement", len: 0, typ: NTI1188015, name: "counterIncrement", sons: null},
+{kind: 1, offset: "counterReset", len: 0, typ: NTI1188015, name: "counterReset", sons: null},
+{kind: 1, offset: "counterSet", len: 0, typ: NTI1188015, name: "counterSet", sons: null},
+{kind: 1, offset: "cursor", len: 0, typ: NTI1188015, name: "cursor", sons: null},
+{kind: 1, offset: "direction", len: 0, typ: NTI1188015, name: "direction", sons: null},
+{kind: 1, offset: "display", len: 0, typ: NTI1188015, name: "display", sons: null},
+{kind: 1, offset: "emptyCells", len: 0, typ: NTI1188015, name: "emptyCells", sons: null},
+{kind: 1, offset: "filter", len: 0, typ: NTI1188015, name: "filter", sons: null},
+{kind: 1, offset: "flex", len: 0, typ: NTI1188015, name: "flex", sons: null},
+{kind: 1, offset: "flexBasis", len: 0, typ: NTI1188015, name: "flexBasis", sons: null},
+{kind: 1, offset: "flexDirection", len: 0, typ: NTI1188015, name: "flexDirection", sons: null},
+{kind: 1, offset: "flexFlow", len: 0, typ: NTI1188015, name: "flexFlow", sons: null},
+{kind: 1, offset: "flexGrow", len: 0, typ: NTI1188015, name: "flexGrow", sons: null},
+{kind: 1, offset: "flexShrink", len: 0, typ: NTI1188015, name: "flexShrink", sons: null},
+{kind: 1, offset: "flexWrap", len: 0, typ: NTI1188015, name: "flexWrap", sons: null},
+{kind: 1, offset: "cssFloat", len: 0, typ: NTI1188015, name: "cssFloat", sons: null},
+{kind: 1, offset: "font", len: 0, typ: NTI1188015, name: "font", sons: null},
+{kind: 1, offset: "fontFamily", len: 0, typ: NTI1188015, name: "fontFamily", sons: null},
+{kind: 1, offset: "fontFeatureSettings", len: 0, typ: NTI1188015, name: "fontFeatureSettings", sons: null},
+{kind: 1, offset: "fontKerning", len: 0, typ: NTI1188015, name: "fontKerning", sons: null},
+{kind: 1, offset: "fontLanguageOverride", len: 0, typ: NTI1188015, name: "fontLanguageOverride", sons: null},
+{kind: 1, offset: "fontOpticalSizing", len: 0, typ: NTI1188015, name: "fontOpticalSizing", sons: null},
+{kind: 1, offset: "fontSize", len: 0, typ: NTI1188015, name: "fontSize", sons: null},
+{kind: 1, offset: "fontSizeAdjust", len: 0, typ: NTI1188015, name: "fontSizeAdjust", sons: null},
+{kind: 1, offset: "fontStretch", len: 0, typ: NTI1188015, name: "fontStretch", sons: null},
+{kind: 1, offset: "fontStyle", len: 0, typ: NTI1188015, name: "fontStyle", sons: null},
+{kind: 1, offset: "fontSynthesis", len: 0, typ: NTI1188015, name: "fontSynthesis", sons: null},
+{kind: 1, offset: "fontVariant", len: 0, typ: NTI1188015, name: "fontVariant", sons: null},
+{kind: 1, offset: "fontVariantAlternates", len: 0, typ: NTI1188015, name: "fontVariantAlternates", sons: null},
+{kind: 1, offset: "fontVariantCaps", len: 0, typ: NTI1188015, name: "fontVariantCaps", sons: null},
+{kind: 1, offset: "fontVariantEastAsian", len: 0, typ: NTI1188015, name: "fontVariantEastAsian", sons: null},
+{kind: 1, offset: "fontVariantLigatures", len: 0, typ: NTI1188015, name: "fontVariantLigatures", sons: null},
+{kind: 1, offset: "fontVariantNumeric", len: 0, typ: NTI1188015, name: "fontVariantNumeric", sons: null},
+{kind: 1, offset: "fontVariantPosition", len: 0, typ: NTI1188015, name: "fontVariantPosition", sons: null},
+{kind: 1, offset: "fontVariationSettings", len: 0, typ: NTI1188015, name: "fontVariationSettings", sons: null},
+{kind: 1, offset: "fontWeight", len: 0, typ: NTI1188015, name: "fontWeight", sons: null},
+{kind: 1, offset: "gap", len: 0, typ: NTI1188015, name: "gap", sons: null},
+{kind: 1, offset: "grid", len: 0, typ: NTI1188015, name: "grid", sons: null},
+{kind: 1, offset: "gridArea", len: 0, typ: NTI1188015, name: "gridArea", sons: null},
+{kind: 1, offset: "gridAutoColumns", len: 0, typ: NTI1188015, name: "gridAutoColumns", sons: null},
+{kind: 1, offset: "gridAutoFlow", len: 0, typ: NTI1188015, name: "gridAutoFlow", sons: null},
+{kind: 1, offset: "gridAutoRows", len: 0, typ: NTI1188015, name: "gridAutoRows", sons: null},
+{kind: 1, offset: "gridColumn", len: 0, typ: NTI1188015, name: "gridColumn", sons: null},
+{kind: 1, offset: "gridColumnEnd", len: 0, typ: NTI1188015, name: "gridColumnEnd", sons: null},
+{kind: 1, offset: "gridColumnStart", len: 0, typ: NTI1188015, name: "gridColumnStart", sons: null},
+{kind: 1, offset: "gridRow", len: 0, typ: NTI1188015, name: "gridRow", sons: null},
+{kind: 1, offset: "gridRowEnd", len: 0, typ: NTI1188015, name: "gridRowEnd", sons: null},
+{kind: 1, offset: "gridRowStart", len: 0, typ: NTI1188015, name: "gridRowStart", sons: null},
+{kind: 1, offset: "gridTemplate", len: 0, typ: NTI1188015, name: "gridTemplate", sons: null},
+{kind: 1, offset: "gridTemplateAreas", len: 0, typ: NTI1188015, name: "gridTemplateAreas", sons: null},
+{kind: 1, offset: "gridTemplateColumns", len: 0, typ: NTI1188015, name: "gridTemplateColumns", sons: null},
+{kind: 1, offset: "gridTemplateRows", len: 0, typ: NTI1188015, name: "gridTemplateRows", sons: null},
+{kind: 1, offset: "hangingPunctuation", len: 0, typ: NTI1188015, name: "hangingPunctuation", sons: null},
+{kind: 1, offset: "height", len: 0, typ: NTI1188015, name: "height", sons: null},
+{kind: 1, offset: "hyphens", len: 0, typ: NTI1188015, name: "hyphens", sons: null},
+{kind: 1, offset: "imageOrientation", len: 0, typ: NTI1188015, name: "imageOrientation", sons: null},
+{kind: 1, offset: "imageRendering", len: 0, typ: NTI1188015, name: "imageRendering", sons: null},
+{kind: 1, offset: "inlineSize", len: 0, typ: NTI1188015, name: "inlineSize", sons: null},
+{kind: 1, offset: "inset", len: 0, typ: NTI1188015, name: "inset", sons: null},
+{kind: 1, offset: "insetBlock", len: 0, typ: NTI1188015, name: "insetBlock", sons: null},
+{kind: 1, offset: "insetBlockEnd", len: 0, typ: NTI1188015, name: "insetBlockEnd", sons: null},
+{kind: 1, offset: "insetBlockStart", len: 0, typ: NTI1188015, name: "insetBlockStart", sons: null},
+{kind: 1, offset: "insetInline", len: 0, typ: NTI1188015, name: "insetInline", sons: null},
+{kind: 1, offset: "insetInlineEnd", len: 0, typ: NTI1188015, name: "insetInlineEnd", sons: null},
+{kind: 1, offset: "insetInlineStart", len: 0, typ: NTI1188015, name: "insetInlineStart", sons: null},
+{kind: 1, offset: "isolation", len: 0, typ: NTI1188015, name: "isolation", sons: null},
+{kind: 1, offset: "justifyContent", len: 0, typ: NTI1188015, name: "justifyContent", sons: null},
+{kind: 1, offset: "justifyItems", len: 0, typ: NTI1188015, name: "justifyItems", sons: null},
+{kind: 1, offset: "justifySelf", len: 0, typ: NTI1188015, name: "justifySelf", sons: null},
+{kind: 1, offset: "left", len: 0, typ: NTI1188015, name: "left", sons: null},
+{kind: 1, offset: "letterSpacing", len: 0, typ: NTI1188015, name: "letterSpacing", sons: null},
+{kind: 1, offset: "lineBreak", len: 0, typ: NTI1188015, name: "lineBreak", sons: null},
+{kind: 1, offset: "lineHeight", len: 0, typ: NTI1188015, name: "lineHeight", sons: null},
+{kind: 1, offset: "listStyle", len: 0, typ: NTI1188015, name: "listStyle", sons: null},
+{kind: 1, offset: "listStyleImage", len: 0, typ: NTI1188015, name: "listStyleImage", sons: null},
+{kind: 1, offset: "listStylePosition", len: 0, typ: NTI1188015, name: "listStylePosition", sons: null},
+{kind: 1, offset: "listStyleType", len: 0, typ: NTI1188015, name: "listStyleType", sons: null},
+{kind: 1, offset: "margin", len: 0, typ: NTI1188015, name: "margin", sons: null},
+{kind: 1, offset: "marginBlock", len: 0, typ: NTI1188015, name: "marginBlock", sons: null},
+{kind: 1, offset: "marginBlockEnd", len: 0, typ: NTI1188015, name: "marginBlockEnd", sons: null},
+{kind: 1, offset: "marginBlockStart", len: 0, typ: NTI1188015, name: "marginBlockStart", sons: null},
+{kind: 1, offset: "marginBottom", len: 0, typ: NTI1188015, name: "marginBottom", sons: null},
+{kind: 1, offset: "marginInline", len: 0, typ: NTI1188015, name: "marginInline", sons: null},
+{kind: 1, offset: "marginInlineEnd", len: 0, typ: NTI1188015, name: "marginInlineEnd", sons: null},
+{kind: 1, offset: "marginInlineStart", len: 0, typ: NTI1188015, name: "marginInlineStart", sons: null},
+{kind: 1, offset: "marginLeft", len: 0, typ: NTI1188015, name: "marginLeft", sons: null},
+{kind: 1, offset: "marginRight", len: 0, typ: NTI1188015, name: "marginRight", sons: null},
+{kind: 1, offset: "marginTop", len: 0, typ: NTI1188015, name: "marginTop", sons: null},
+{kind: 1, offset: "mask", len: 0, typ: NTI1188015, name: "mask", sons: null},
+{kind: 1, offset: "maskBorder", len: 0, typ: NTI1188015, name: "maskBorder", sons: null},
+{kind: 1, offset: "maskBorderMode", len: 0, typ: NTI1188015, name: "maskBorderMode", sons: null},
+{kind: 1, offset: "maskBorderOutset", len: 0, typ: NTI1188015, name: "maskBorderOutset", sons: null},
+{kind: 1, offset: "maskBorderRepeat", len: 0, typ: NTI1188015, name: "maskBorderRepeat", sons: null},
+{kind: 1, offset: "maskBorderSlice", len: 0, typ: NTI1188015, name: "maskBorderSlice", sons: null},
+{kind: 1, offset: "maskBorderSource", len: 0, typ: NTI1188015, name: "maskBorderSource", sons: null},
+{kind: 1, offset: "maskBorderWidth", len: 0, typ: NTI1188015, name: "maskBorderWidth", sons: null},
+{kind: 1, offset: "maskClip", len: 0, typ: NTI1188015, name: "maskClip", sons: null},
+{kind: 1, offset: "maskComposite", len: 0, typ: NTI1188015, name: "maskComposite", sons: null},
+{kind: 1, offset: "maskImage", len: 0, typ: NTI1188015, name: "maskImage", sons: null},
+{kind: 1, offset: "maskMode", len: 0, typ: NTI1188015, name: "maskMode", sons: null},
+{kind: 1, offset: "maskOrigin", len: 0, typ: NTI1188015, name: "maskOrigin", sons: null},
+{kind: 1, offset: "maskPosition", len: 0, typ: NTI1188015, name: "maskPosition", sons: null},
+{kind: 1, offset: "maskRepeat", len: 0, typ: NTI1188015, name: "maskRepeat", sons: null},
+{kind: 1, offset: "maskSize", len: 0, typ: NTI1188015, name: "maskSize", sons: null},
+{kind: 1, offset: "maskType", len: 0, typ: NTI1188015, name: "maskType", sons: null},
+{kind: 1, offset: "maxBlockSize", len: 0, typ: NTI1188015, name: "maxBlockSize", sons: null},
+{kind: 1, offset: "maxHeight", len: 0, typ: NTI1188015, name: "maxHeight", sons: null},
+{kind: 1, offset: "maxInlineSize", len: 0, typ: NTI1188015, name: "maxInlineSize", sons: null},
+{kind: 1, offset: "maxWidth", len: 0, typ: NTI1188015, name: "maxWidth", sons: null},
+{kind: 1, offset: "minBlockSize", len: 0, typ: NTI1188015, name: "minBlockSize", sons: null},
+{kind: 1, offset: "minHeight", len: 0, typ: NTI1188015, name: "minHeight", sons: null},
+{kind: 1, offset: "minInlineSize", len: 0, typ: NTI1188015, name: "minInlineSize", sons: null},
+{kind: 1, offset: "minWidth", len: 0, typ: NTI1188015, name: "minWidth", sons: null},
+{kind: 1, offset: "mixBlendMode", len: 0, typ: NTI1188015, name: "mixBlendMode", sons: null},
+{kind: 1, offset: "objectFit", len: 0, typ: NTI1188015, name: "objectFit", sons: null},
+{kind: 1, offset: "objectPosition", len: 0, typ: NTI1188015, name: "objectPosition", sons: null},
+{kind: 1, offset: "offset", len: 0, typ: NTI1188015, name: "offset", sons: null},
+{kind: 1, offset: "offsetAnchor", len: 0, typ: NTI1188015, name: "offsetAnchor", sons: null},
+{kind: 1, offset: "offsetDistance", len: 0, typ: NTI1188015, name: "offsetDistance", sons: null},
+{kind: 1, offset: "offsetPath", len: 0, typ: NTI1188015, name: "offsetPath", sons: null},
+{kind: 1, offset: "offsetRotate", len: 0, typ: NTI1188015, name: "offsetRotate", sons: null},
+{kind: 1, offset: "opacity", len: 0, typ: NTI1188015, name: "opacity", sons: null},
+{kind: 1, offset: "order", len: 0, typ: NTI1188015, name: "order", sons: null},
+{kind: 1, offset: "orphans", len: 0, typ: NTI1188015, name: "orphans", sons: null},
+{kind: 1, offset: "outline", len: 0, typ: NTI1188015, name: "outline", sons: null},
+{kind: 1, offset: "outlineColor", len: 0, typ: NTI1188015, name: "outlineColor", sons: null},
+{kind: 1, offset: "outlineOffset", len: 0, typ: NTI1188015, name: "outlineOffset", sons: null},
+{kind: 1, offset: "outlineStyle", len: 0, typ: NTI1188015, name: "outlineStyle", sons: null},
+{kind: 1, offset: "outlineWidth", len: 0, typ: NTI1188015, name: "outlineWidth", sons: null},
+{kind: 1, offset: "overflow", len: 0, typ: NTI1188015, name: "overflow", sons: null},
+{kind: 1, offset: "overflowAnchor", len: 0, typ: NTI1188015, name: "overflowAnchor", sons: null},
+{kind: 1, offset: "overflowBlock", len: 0, typ: NTI1188015, name: "overflowBlock", sons: null},
+{kind: 1, offset: "overflowInline", len: 0, typ: NTI1188015, name: "overflowInline", sons: null},
+{kind: 1, offset: "overflowWrap", len: 0, typ: NTI1188015, name: "overflowWrap", sons: null},
+{kind: 1, offset: "overflowX", len: 0, typ: NTI1188015, name: "overflowX", sons: null},
+{kind: 1, offset: "overflowY", len: 0, typ: NTI1188015, name: "overflowY", sons: null},
+{kind: 1, offset: "overscrollBehavior", len: 0, typ: NTI1188015, name: "overscrollBehavior", sons: null},
+{kind: 1, offset: "overscrollBehaviorBlock", len: 0, typ: NTI1188015, name: "overscrollBehaviorBlock", sons: null},
+{kind: 1, offset: "overscrollBehaviorInline", len: 0, typ: NTI1188015, name: "overscrollBehaviorInline", sons: null},
+{kind: 1, offset: "overscrollBehaviorX", len: 0, typ: NTI1188015, name: "overscrollBehaviorX", sons: null},
+{kind: 1, offset: "overscrollBehaviorY", len: 0, typ: NTI1188015, name: "overscrollBehaviorY", sons: null},
+{kind: 1, offset: "padding", len: 0, typ: NTI1188015, name: "padding", sons: null},
+{kind: 1, offset: "paddingBlock", len: 0, typ: NTI1188015, name: "paddingBlock", sons: null},
+{kind: 1, offset: "paddingBlockEnd", len: 0, typ: NTI1188015, name: "paddingBlockEnd", sons: null},
+{kind: 1, offset: "paddingBlockStart", len: 0, typ: NTI1188015, name: "paddingBlockStart", sons: null},
+{kind: 1, offset: "paddingBottom", len: 0, typ: NTI1188015, name: "paddingBottom", sons: null},
+{kind: 1, offset: "paddingInline", len: 0, typ: NTI1188015, name: "paddingInline", sons: null},
+{kind: 1, offset: "paddingInlineEnd", len: 0, typ: NTI1188015, name: "paddingInlineEnd", sons: null},
+{kind: 1, offset: "paddingInlineStart", len: 0, typ: NTI1188015, name: "paddingInlineStart", sons: null},
+{kind: 1, offset: "paddingLeft", len: 0, typ: NTI1188015, name: "paddingLeft", sons: null},
+{kind: 1, offset: "paddingRight", len: 0, typ: NTI1188015, name: "paddingRight", sons: null},
+{kind: 1, offset: "paddingTop", len: 0, typ: NTI1188015, name: "paddingTop", sons: null},
+{kind: 1, offset: "pageBreakAfter", len: 0, typ: NTI1188015, name: "pageBreakAfter", sons: null},
+{kind: 1, offset: "pageBreakBefore", len: 0, typ: NTI1188015, name: "pageBreakBefore", sons: null},
+{kind: 1, offset: "pageBreakInside", len: 0, typ: NTI1188015, name: "pageBreakInside", sons: null},
+{kind: 1, offset: "paintOrder", len: 0, typ: NTI1188015, name: "paintOrder", sons: null},
+{kind: 1, offset: "perspective", len: 0, typ: NTI1188015, name: "perspective", sons: null},
+{kind: 1, offset: "perspectiveOrigin", len: 0, typ: NTI1188015, name: "perspectiveOrigin", sons: null},
+{kind: 1, offset: "placeContent", len: 0, typ: NTI1188015, name: "placeContent", sons: null},
+{kind: 1, offset: "placeItems", len: 0, typ: NTI1188015, name: "placeItems", sons: null},
+{kind: 1, offset: "placeSelf", len: 0, typ: NTI1188015, name: "placeSelf", sons: null},
+{kind: 1, offset: "pointerEvents", len: 0, typ: NTI1188015, name: "pointerEvents", sons: null},
+{kind: 1, offset: "position", len: 0, typ: NTI1188015, name: "position", sons: null},
+{kind: 1, offset: "quotes", len: 0, typ: NTI1188015, name: "quotes", sons: null},
+{kind: 1, offset: "resize", len: 0, typ: NTI1188015, name: "resize", sons: null},
+{kind: 1, offset: "right", len: 0, typ: NTI1188015, name: "right", sons: null},
+{kind: 1, offset: "rotate", len: 0, typ: NTI1188015, name: "rotate", sons: null},
+{kind: 1, offset: "rowGap", len: 0, typ: NTI1188015, name: "rowGap", sons: null},
+{kind: 1, offset: "scale", len: 0, typ: NTI1188015, name: "scale", sons: null},
+{kind: 1, offset: "scrollBehavior", len: 0, typ: NTI1188015, name: "scrollBehavior", sons: null},
+{kind: 1, offset: "scrollMargin", len: 0, typ: NTI1188015, name: "scrollMargin", sons: null},
+{kind: 1, offset: "scrollMarginBlock", len: 0, typ: NTI1188015, name: "scrollMarginBlock", sons: null},
+{kind: 1, offset: "scrollMarginBlockEnd", len: 0, typ: NTI1188015, name: "scrollMarginBlockEnd", sons: null},
+{kind: 1, offset: "scrollMarginBlockStart", len: 0, typ: NTI1188015, name: "scrollMarginBlockStart", sons: null},
+{kind: 1, offset: "scrollMarginBottom", len: 0, typ: NTI1188015, name: "scrollMarginBottom", sons: null},
+{kind: 1, offset: "scrollMarginInline", len: 0, typ: NTI1188015, name: "scrollMarginInline", sons: null},
+{kind: 1, offset: "scrollMarginInlineEnd", len: 0, typ: NTI1188015, name: "scrollMarginInlineEnd", sons: null},
+{kind: 1, offset: "scrollMarginInlineStart", len: 0, typ: NTI1188015, name: "scrollMarginInlineStart", sons: null},
+{kind: 1, offset: "scrollMarginLeft", len: 0, typ: NTI1188015, name: "scrollMarginLeft", sons: null},
+{kind: 1, offset: "scrollMarginRight", len: 0, typ: NTI1188015, name: "scrollMarginRight", sons: null},
+{kind: 1, offset: "scrollMarginTop", len: 0, typ: NTI1188015, name: "scrollMarginTop", sons: null},
+{kind: 1, offset: "scrollPadding", len: 0, typ: NTI1188015, name: "scrollPadding", sons: null},
+{kind: 1, offset: "scrollPaddingBlock", len: 0, typ: NTI1188015, name: "scrollPaddingBlock", sons: null},
+{kind: 1, offset: "scrollPaddingBlockEnd", len: 0, typ: NTI1188015, name: "scrollPaddingBlockEnd", sons: null},
+{kind: 1, offset: "scrollPaddingBlockStart", len: 0, typ: NTI1188015, name: "scrollPaddingBlockStart", sons: null},
+{kind: 1, offset: "scrollPaddingBottom", len: 0, typ: NTI1188015, name: "scrollPaddingBottom", sons: null},
+{kind: 1, offset: "scrollPaddingInline", len: 0, typ: NTI1188015, name: "scrollPaddingInline", sons: null},
+{kind: 1, offset: "scrollPaddingInlineEnd", len: 0, typ: NTI1188015, name: "scrollPaddingInlineEnd", sons: null},
+{kind: 1, offset: "scrollPaddingInlineStart", len: 0, typ: NTI1188015, name: "scrollPaddingInlineStart", sons: null},
+{kind: 1, offset: "scrollPaddingLeft", len: 0, typ: NTI1188015, name: "scrollPaddingLeft", sons: null},
+{kind: 1, offset: "scrollPaddingRight", len: 0, typ: NTI1188015, name: "scrollPaddingRight", sons: null},
+{kind: 1, offset: "scrollPaddingTop", len: 0, typ: NTI1188015, name: "scrollPaddingTop", sons: null},
+{kind: 1, offset: "scrollSnapAlign", len: 0, typ: NTI1188015, name: "scrollSnapAlign", sons: null},
+{kind: 1, offset: "scrollSnapStop", len: 0, typ: NTI1188015, name: "scrollSnapStop", sons: null},
+{kind: 1, offset: "scrollSnapType", len: 0, typ: NTI1188015, name: "scrollSnapType", sons: null},
+{kind: 1, offset: "scrollbar3dLightColor", len: 0, typ: NTI1188015, name: "scrollbar3dLightColor", sons: null},
+{kind: 1, offset: "scrollbarArrowColor", len: 0, typ: NTI1188015, name: "scrollbarArrowColor", sons: null},
+{kind: 1, offset: "scrollbarBaseColor", len: 0, typ: NTI1188015, name: "scrollbarBaseColor", sons: null},
+{kind: 1, offset: "scrollbarColor", len: 0, typ: NTI1188015, name: "scrollbarColor", sons: null},
+{kind: 1, offset: "scrollbarDarkshadowColor", len: 0, typ: NTI1188015, name: "scrollbarDarkshadowColor", sons: null},
+{kind: 1, offset: "scrollbarFaceColor", len: 0, typ: NTI1188015, name: "scrollbarFaceColor", sons: null},
+{kind: 1, offset: "scrollbarHighlightColor", len: 0, typ: NTI1188015, name: "scrollbarHighlightColor", sons: null},
+{kind: 1, offset: "scrollbarShadowColor", len: 0, typ: NTI1188015, name: "scrollbarShadowColor", sons: null},
+{kind: 1, offset: "scrollbarTrackColor", len: 0, typ: NTI1188015, name: "scrollbarTrackColor", sons: null},
+{kind: 1, offset: "scrollbarWidth", len: 0, typ: NTI1188015, name: "scrollbarWidth", sons: null},
+{kind: 1, offset: "shapeImageThreshold", len: 0, typ: NTI1188015, name: "shapeImageThreshold", sons: null},
+{kind: 1, offset: "shapeMargin", len: 0, typ: NTI1188015, name: "shapeMargin", sons: null},
+{kind: 1, offset: "shapeOutside", len: 0, typ: NTI1188015, name: "shapeOutside", sons: null},
+{kind: 1, offset: "tabSize", len: 0, typ: NTI1188015, name: "tabSize", sons: null},
+{kind: 1, offset: "tableLayout", len: 0, typ: NTI1188015, name: "tableLayout", sons: null},
+{kind: 1, offset: "textAlign", len: 0, typ: NTI1188015, name: "textAlign", sons: null},
+{kind: 1, offset: "textAlignLast", len: 0, typ: NTI1188015, name: "textAlignLast", sons: null},
+{kind: 1, offset: "textCombineUpright", len: 0, typ: NTI1188015, name: "textCombineUpright", sons: null},
+{kind: 1, offset: "textDecoration", len: 0, typ: NTI1188015, name: "textDecoration", sons: null},
+{kind: 1, offset: "textDecorationColor", len: 0, typ: NTI1188015, name: "textDecorationColor", sons: null},
+{kind: 1, offset: "textDecorationLine", len: 0, typ: NTI1188015, name: "textDecorationLine", sons: null},
+{kind: 1, offset: "textDecorationSkipInk", len: 0, typ: NTI1188015, name: "textDecorationSkipInk", sons: null},
+{kind: 1, offset: "textDecorationStyle", len: 0, typ: NTI1188015, name: "textDecorationStyle", sons: null},
+{kind: 1, offset: "textDecorationThickness", len: 0, typ: NTI1188015, name: "textDecorationThickness", sons: null},
+{kind: 1, offset: "textEmphasis", len: 0, typ: NTI1188015, name: "textEmphasis", sons: null},
+{kind: 1, offset: "textEmphasisColor", len: 0, typ: NTI1188015, name: "textEmphasisColor", sons: null},
+{kind: 1, offset: "textEmphasisPosition", len: 0, typ: NTI1188015, name: "textEmphasisPosition", sons: null},
+{kind: 1, offset: "textEmphasisStyle", len: 0, typ: NTI1188015, name: "textEmphasisStyle", sons: null},
+{kind: 1, offset: "textIndent", len: 0, typ: NTI1188015, name: "textIndent", sons: null},
+{kind: 1, offset: "textJustify", len: 0, typ: NTI1188015, name: "textJustify", sons: null},
+{kind: 1, offset: "textOrientation", len: 0, typ: NTI1188015, name: "textOrientation", sons: null},
+{kind: 1, offset: "textOverflow", len: 0, typ: NTI1188015, name: "textOverflow", sons: null},
+{kind: 1, offset: "textRendering", len: 0, typ: NTI1188015, name: "textRendering", sons: null},
+{kind: 1, offset: "textShadow", len: 0, typ: NTI1188015, name: "textShadow", sons: null},
+{kind: 1, offset: "textTransform", len: 0, typ: NTI1188015, name: "textTransform", sons: null},
+{kind: 1, offset: "textUnderlineOffset", len: 0, typ: NTI1188015, name: "textUnderlineOffset", sons: null},
+{kind: 1, offset: "textUnderlinePosition", len: 0, typ: NTI1188015, name: "textUnderlinePosition", sons: null},
+{kind: 1, offset: "top", len: 0, typ: NTI1188015, name: "top", sons: null},
+{kind: 1, offset: "touchAction", len: 0, typ: NTI1188015, name: "touchAction", sons: null},
+{kind: 1, offset: "transform", len: 0, typ: NTI1188015, name: "transform", sons: null},
+{kind: 1, offset: "transformBox", len: 0, typ: NTI1188015, name: "transformBox", sons: null},
+{kind: 1, offset: "transformOrigin", len: 0, typ: NTI1188015, name: "transformOrigin", sons: null},
+{kind: 1, offset: "transformStyle", len: 0, typ: NTI1188015, name: "transformStyle", sons: null},
+{kind: 1, offset: "transition", len: 0, typ: NTI1188015, name: "transition", sons: null},
+{kind: 1, offset: "transitionDelay", len: 0, typ: NTI1188015, name: "transitionDelay", sons: null},
+{kind: 1, offset: "transitionDuration", len: 0, typ: NTI1188015, name: "transitionDuration", sons: null},
+{kind: 1, offset: "transitionProperty", len: 0, typ: NTI1188015, name: "transitionProperty", sons: null},
+{kind: 1, offset: "transitionTimingFunction", len: 0, typ: NTI1188015, name: "transitionTimingFunction", sons: null},
+{kind: 1, offset: "translate", len: 0, typ: NTI1188015, name: "translate", sons: null},
+{kind: 1, offset: "unicodeBidi", len: 0, typ: NTI1188015, name: "unicodeBidi", sons: null},
+{kind: 1, offset: "verticalAlign", len: 0, typ: NTI1188015, name: "verticalAlign", sons: null},
+{kind: 1, offset: "visibility", len: 0, typ: NTI1188015, name: "visibility", sons: null},
+{kind: 1, offset: "whiteSpace", len: 0, typ: NTI1188015, name: "whiteSpace", sons: null},
+{kind: 1, offset: "widows", len: 0, typ: NTI1188015, name: "widows", sons: null},
+{kind: 1, offset: "width", len: 0, typ: NTI1188015, name: "width", sons: null},
+{kind: 1, offset: "willChange", len: 0, typ: NTI1188015, name: "willChange", sons: null},
+{kind: 1, offset: "wordBreak", len: 0, typ: NTI1188015, name: "wordBreak", sons: null},
+{kind: 1, offset: "wordSpacing", len: 0, typ: NTI1188015, name: "wordSpacing", sons: null},
+{kind: 1, offset: "writingMode", len: 0, typ: NTI1188015, name: "writingMode", sons: null},
+{kind: 1, offset: "zIndex", len: 0, typ: NTI1188015, name: "zIndex", sons: null}]};
+NTI1852293.node = NNI1852293;
+NTI1852293.base = NTI1194408;
+NTI1852291.base = NTI1852293;
+var NNI1852237 = {kind: 2, len: 22, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "attributes", len: 0, typ: NTI1852609, name: "attributes", sons: null},
+{kind: 1, offset: "childNodes", len: 0, typ: NTI1852611, name: "childNodes", sons: null},
+{kind: 1, offset: "children", len: 0, typ: NTI1852613, name: "children", sons: null},
+{kind: 1, offset: "data", len: 0, typ: NTI1188015, name: "data", sons: null},
+{kind: 1, offset: "firstChild", len: 0, typ: NTI1852235, name: "firstChild", sons: null},
+{kind: 1, offset: "lastChild", len: 0, typ: NTI1852235, name: "lastChild", sons: null},
+{kind: 1, offset: "nextSibling", len: 0, typ: NTI1852235, name: "nextSibling", sons: null},
+{kind: 1, offset: "nodeName", len: 0, typ: NTI1188015, name: "nodeName", sons: null},
+{kind: 1, offset: "nodeType", len: 0, typ: NTI1852233, name: "nodeType", sons: null},
+{kind: 1, offset: "nodeValue", len: 0, typ: NTI1188015, name: "nodeValue", sons: null},
+{kind: 1, offset: "parentNode", len: 0, typ: NTI1852235, name: "parentNode", sons: null},
+{kind: 1, offset: "content", len: 0, typ: NTI1852235, name: "content", sons: null},
+{kind: 1, offset: "previousSibling", len: 0, typ: NTI1852235, name: "previousSibling", sons: null},
+{kind: 1, offset: "ownerDocument", len: 0, typ: NTI1852239, name: "ownerDocument", sons: null},
+{kind: 1, offset: "innerHTML", len: 0, typ: NTI1188015, name: "innerHTML", sons: null},
+{kind: 1, offset: "outerHTML", len: 0, typ: NTI1188015, name: "outerHTML", sons: null},
+{kind: 1, offset: "innerText", len: 0, typ: NTI1188015, name: "innerText", sons: null},
+{kind: 1, offset: "textContent", len: 0, typ: NTI1188015, name: "textContent", sons: null},
+{kind: 1, offset: "style", len: 0, typ: NTI1852291, name: "style", sons: null},
+{kind: 1, offset: "baseURI", len: 0, typ: NTI1188015, name: "baseURI", sons: null},
+{kind: 1, offset: "parentElement", len: 0, typ: NTI1852243, name: "parentElement", sons: null},
+{kind: 1, offset: "isConnected", len: 0, typ: NTI1188064, name: "isConnected", sons: null}]};
+NTI1852237.node = NNI1852237;
+var NNI1852205 = {kind: 2, len: 23, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "onabort", len: 0, typ: NTI1852388, name: "onabort", sons: null},
+{kind: 1, offset: "onblur", len: 0, typ: NTI1852392, name: "onblur", sons: null},
+{kind: 1, offset: "onchange", len: 0, typ: NTI1852396, name: "onchange", sons: null},
+{kind: 1, offset: "onclick", len: 0, typ: NTI1852400, name: "onclick", sons: null},
+{kind: 1, offset: "ondblclick", len: 0, typ: NTI1852404, name: "ondblclick", sons: null},
+{kind: 1, offset: "onerror", len: 0, typ: NTI1852408, name: "onerror", sons: null},
+{kind: 1, offset: "onfocus", len: 0, typ: NTI1852412, name: "onfocus", sons: null},
+{kind: 1, offset: "onkeydown", len: 0, typ: NTI1852416, name: "onkeydown", sons: null},
+{kind: 1, offset: "onkeypress", len: 0, typ: NTI1852420, name: "onkeypress", sons: null},
+{kind: 1, offset: "onkeyup", len: 0, typ: NTI1852424, name: "onkeyup", sons: null},
+{kind: 1, offset: "onload", len: 0, typ: NTI1852428, name: "onload", sons: null},
+{kind: 1, offset: "onmousedown", len: 0, typ: NTI1852432, name: "onmousedown", sons: null},
+{kind: 1, offset: "onmousemove", len: 0, typ: NTI1852436, name: "onmousemove", sons: null},
+{kind: 1, offset: "onmouseout", len: 0, typ: NTI1852440, name: "onmouseout", sons: null},
+{kind: 1, offset: "onmouseover", len: 0, typ: NTI1852444, name: "onmouseover", sons: null},
+{kind: 1, offset: "onmouseup", len: 0, typ: NTI1852448, name: "onmouseup", sons: null},
+{kind: 1, offset: "onreset", len: 0, typ: NTI1852452, name: "onreset", sons: null},
+{kind: 1, offset: "onselect", len: 0, typ: NTI1852456, name: "onselect", sons: null},
+{kind: 1, offset: "onsubmit", len: 0, typ: NTI1852460, name: "onsubmit", sons: null},
+{kind: 1, offset: "onunload", len: 0, typ: NTI1852464, name: "onunload", sons: null},
+{kind: 1, offset: "onloadstart", len: 0, typ: NTI1852468, name: "onloadstart", sons: null},
+{kind: 1, offset: "onprogress", len: 0, typ: NTI1852472, name: "onprogress", sons: null},
+{kind: 1, offset: "onloadend", len: 0, typ: NTI1852476, name: "onloadend", sons: null}]};
+NTI1852205.node = NNI1852205;
+NTI1852205.base = NTI1194408;
+NTI1852237.base = NTI1852205;
+NTI1852235.base = NTI1852237;
+NTI1880505.base = NTI1852235;
+NTI10575580.base = NTI1188015;
+var NNI1194653 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []};
+NTI1194653.node = NNI1194653;
+NTI1194653.base = NTI1194619;
+var NNI10416058 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "Field0", len: 0, typ: NTI1188044, name: "Field0", sons: null},
+{kind: 1, offset: "Field1", len: 0, typ: NTI1188064, name: "Field1", sons: null}]};
+NTI10416058.node = NNI10416058;
+function makeNimstrLit(c_1455062) {
+ var ln = c_1455062.length;
+ var result = new Array(ln);
+ for (var i = 0; i < ln; ++i) {
+ result[i] = c_1455062.charCodeAt(i);
+ }
+ return result;
+
+
+
+}
+function toJSStr(s_1455096) {
+ var Tmp5;
+ var Tmp7;
+
+ var result_1455097 = null;
+
+ var res_1455170 = newSeq_1455128((s_1455096).length);
+ var i_1455172 = 0;
+ var j_1455174 = 0;
+ L1: do {
+ L2: while (true) {
+ if (!(i_1455172 < (s_1455096).length)) break L2;
+ var c_1455175 = s_1455096[i_1455172];
+ if ((c_1455175 < 128)) {
+ res_1455170[j_1455174] = String.fromCharCode(c_1455175);
+ i_1455172 += 1;
+ }
+ else {
+ var helper_1455198 = newSeq_1455128(0);
+ L3: do {
+ L4: while (true) {
+ if (!true) break L4;
+ var code_1455199 = c_1455175.toString(16);
+ if (((code_1455199).length == 1)) {
+ helper_1455198.push("%0");;
+ }
+ else {
+ helper_1455198.push("%");;
+ }
+
+ helper_1455198.push(code_1455199);;
+ i_1455172 += 1;
+ if (((s_1455096).length <= i_1455172)) Tmp5 = true; else { Tmp5 = (s_1455096[i_1455172] < 128); } if (Tmp5) {
+ break L3;
+ }
+
+ c_1455175 = s_1455096[i_1455172];
+ }
+ } while(false);
+++excHandler;
+ Tmp7 = framePtr;
+ try {
+ res_1455170[j_1455174] = decodeURIComponent(helper_1455198.join(""));
+--excHandler;
+} catch (EXC) {
+ var prevJSError = lastJSError;
+ lastJSError = EXC;
+ --excHandler;
+ framePtr = Tmp7;
+ res_1455170[j_1455174] = helper_1455198.join("");
+ lastJSError = prevJSError;
+ } finally {
+ framePtr = Tmp7;
+ }
+ }
+
+ j_1455174 += 1;
+ }
+ } while(false);
+ if (res_1455170.length < j_1455174) { for (var i=res_1455170.length;i> 6) | 192;
+ }
+ else {
+ if (ch < 55296 || ch >= 57344) {
+ result[r] = (ch >> 12) | 224;
+ }
+ else {
+ ++i;
+ ch = 65536 + (((ch & 1023) << 10) | (c_1455079.charCodeAt(i) & 1023));
+ result[r] = (ch >> 18) | 240;
+ ++r;
+ result[r] = ((ch >> 12) & 63) | 128;
+ }
+ ++r;
+ result[r] = ((ch >> 6) & 63) | 128;
+ }
+ ++r;
+ result[r] = (ch & 63) | 128;
+ }
+ ++r;
+ }
+ return result;
+
+
+
+}
+function setConstr() {
+ var result = {};
+ for (var i = 0; i < arguments.length; ++i) {
+ var x = arguments[i];
+ if (typeof(x) == "object") {
+ for (var j = x[0]; j <= x[1]; ++j) {
+ result[j] = true;
+ }
+ } else {
+ result[x] = true;
+ }
+ }
+ return result;
+
+
+
+}
+var ConstSet1 = setConstr(17, 16, 4, 18, 27, 19, 23, 22, 21);
+function nimCopy(dest_1470023, src_1470024, ti_1470025) {
+ var result_1475219 = null;
+
+ switch (ti_1470025.kind) {
+ case 21:
+ case 22:
+ case 23:
+ case 5:
+ if (!(isFatPointer_1465401(ti_1470025))) {
+ result_1475219 = src_1470024;
+ }
+ else {
+ result_1475219 = [src_1470024[0], src_1470024[1]];
+ }
+
+ break;
+ case 19:
+ if (dest_1470023 === null || dest_1470023 === undefined) {
+ dest_1470023 = {};
+ }
+ else {
+ for (var key in dest_1470023) { delete dest_1470023[key]; }
+ }
+ for (var key in src_1470024) { dest_1470023[key] = src_1470024[key]; }
+ result_1475219 = dest_1470023;
+
+ break;
+ case 18:
+ case 17:
+ if (!((ti_1470025.base == null))) {
+ result_1475219 = nimCopy(dest_1470023, src_1470024, ti_1470025.base);
+ }
+ else {
+ if ((ti_1470025.kind == 17)) {
+ result_1475219 = (dest_1470023 === null || dest_1470023 === undefined) ? {m_type: ti_1470025} : dest_1470023;
+ }
+ else {
+ result_1475219 = (dest_1470023 === null || dest_1470023 === undefined) ? {} : dest_1470023;
+ }
+ }
+ nimCopyAux(result_1475219, src_1470024, ti_1470025.node);
+ break;
+ case 24:
+ case 4:
+ case 27:
+ case 16:
+ if (src_1470024 === null) {
+ result_1475219 = null;
+ }
+ else {
+ if (dest_1470023 === null || dest_1470023 === undefined) {
+ dest_1470023 = new Array(src_1470024.length);
+ }
+ else {
+ dest_1470023.length = src_1470024.length;
+ }
+ result_1475219 = dest_1470023;
+ for (var i = 0; i < src_1470024.length; ++i) {
+ result_1475219[i] = nimCopy(result_1475219[i], src_1470024[i], ti_1470025.base);
+ }
+ }
+
+ break;
+ case 28:
+ if (src_1470024 !== null) {
+ result_1475219 = src_1470024.slice(0);
+ }
+
+ break;
+ default:
+ result_1475219 = src_1470024;
+ break;
+ }
+
+ return result_1475219;
+
+}
+function chckIndx(i_1480086, a_1480087, b_1480088) {
+ var Tmp1;
+
+ var result_1480089 = 0;
+
+ BeforeRet: do {
+ if (!(a_1480087 <= i_1480086)) Tmp1 = false; else { Tmp1 = (i_1480086 <= b_1480088); } if (Tmp1) {
+ result_1480089 = i_1480086;
+ break BeforeRet;
+ }
+ else {
+ raiseIndexError(i_1480086, a_1480087, b_1480088);
+ }
+
+ } while (false);
+
+ return result_1480089;
+
+}
+function subInt(a_1460437, b_1460438) {
+ var result = a_1460437 - b_1460438;
+ checkOverflowInt(result);
+ return result;
+
+
+
+}
+var ConstSet2 = setConstr([65, 90]);
+function chckRange(i_1485016, a_1485017, b_1485018) {
+ var Tmp1;
+
+ var result_1485019 = 0;
+
+ BeforeRet: do {
+ if (!(a_1485017 <= i_1485016)) Tmp1 = false; else { Tmp1 = (i_1485016 <= b_1485018); } if (Tmp1) {
+ result_1485019 = i_1485016;
+ break BeforeRet;
+ }
+ else {
+ raiseRangeError();
+ }
+
+ } while (false);
+
+ return result_1485019;
+
+}
+var ConstSet3 = setConstr(95, 32, 46);
+var ConstSet4 = setConstr(95, 32, 46);
+function mulInt(a_1460455, b_1460456) {
+ var result = a_1460455 * b_1460456;
+ checkOverflowInt(result);
+ return result;
+
+
+
+}
+var ConstSet5 = setConstr([97, 122]);
+var ConstSet6 = setConstr([65, 90], [97, 122]);
+var ConstSet7 = setConstr([97, 122]);
+var ConstSet8 = setConstr([65, 90]);
+var ConstSet9 = setConstr([65, 90], [97, 122]);
+function nimMax(a_1460821, b_1460822) {
+ var Tmp1;
+
+ var result_1460823 = 0;
+
+ BeforeRet: do {
+ if ((b_1460822 <= a_1460821)) {
+ Tmp1 = a_1460821;
+ }
+ else {
+ Tmp1 = b_1460822;
+ }
+
+ result_1460823 = Tmp1;
+ break BeforeRet;
+ } while (false);
+
+ return result_1460823;
+
+}
+function nimMin(a_1460803, b_1460804) {
+ var Tmp1;
+
+ var result_1460805 = 0;
+
+ BeforeRet: do {
+ if ((a_1460803 <= b_1460804)) {
+ Tmp1 = a_1460803;
+ }
+ else {
+ Tmp1 = b_1460804;
+ }
+
+ result_1460805 = Tmp1;
+ break BeforeRet;
+ } while (false);
+
+ return result_1460805;
+
+}
+function addChar(x_1505031, c_1505032) {
+ x_1505031.push(c_1505032);
+
+
+}
+var globalRaiseHook_1357018 = [null];
+var localRaiseHook_1357023 = [null];
+var outOfMemHook_1357026 = [null];
+var unhandledExceptionHook_1357031 = [null];
+if (!Math.trunc) {
+ Math.trunc = function(v) {
+ v = +v;
+ if (!isFinite(v)) return v;
+ return (v - v % 1) || (v < 0 ? -0 : v === 0 ? v : 0);
+ };
+}
+
+var alternative_10575322 = [null];
+function add_1357042(x_1357045, x_1357045_Idx, y_1357046) {
+ if (x_1357045[x_1357045_Idx] === null) { x_1357045[x_1357045_Idx] = []; }
+ var off = x_1357045[x_1357045_Idx].length;
+ x_1357045[x_1357045_Idx].length += y_1357046.length;
+ for (var i = 0; i < y_1357046.length; ++i) {
+ x_1357045[x_1357045_Idx][off+i] = y_1357046.charCodeAt(i);
+ }
+
+
+
+}
+function newSeq_1455128(len_1455131) {
+ var result_1455133 = [];
+
+ result_1455133 = new Array(len_1455131); for (var i=0;i 2147483647 || a_1460403 < -2147483648) raiseOverflow();
+
+
+
+}
+function isWhitespace_10550116(text_10550118) {
+ return !/[^\s]/.test(text_10550118);
+
+
+
+}
+function isWhitespace_10550133(x_10550135) {
+ var Tmp1;
+ var Tmp2;
+
+ var result_10550136 = false;
+
+ if (!(x_10550135.nodeName == "#text")) Tmp2 = false; else { Tmp2 = isWhitespace_10550116(x_10550135.textContent); } if (Tmp2) Tmp1 = true; else { Tmp1 = (x_10550135.nodeName == "#comment"); } result_10550136 = Tmp1;
+
+ return result_10550136;
+
+}
+function isFatPointer_1465401(ti_1465403) {
+ var result_1465404 = false;
+
+ BeforeRet: do {
+ result_1465404 = !((ConstSet1[ti_1465403.base.kind] != undefined));
+ break BeforeRet;
+ } while (false);
+
+ return result_1465404;
+
+}
+function nimCopyAux(dest_1470028, src_1470029, n_1470031) {
+ switch (n_1470031.kind) {
+ case 0:
+ break;
+ case 1:
+ dest_1470028[n_1470031.offset] = nimCopy(dest_1470028[n_1470031.offset], src_1470029[n_1470031.offset], n_1470031.typ);
+
+ break;
+ case 2:
+ for (var i = 0; i < n_1470031.sons.length; i++) {
+ nimCopyAux(dest_1470028, src_1470029, n_1470031.sons[i]);
+ }
+
+ break;
+ case 3:
+ dest_1470028[n_1470031.offset] = nimCopy(dest_1470028[n_1470031.offset], src_1470029[n_1470031.offset], n_1470031.typ);
+ for (var i = 0; i < n_1470031.sons.length; ++i) {
+ nimCopyAux(dest_1470028, src_1470029, n_1470031.sons[i][1]);
+ }
+
+ break;
+ }
+
+
+}
+function raiseIndexError(i_1440047, a_1440048, b_1440049) {
+ var Tmp1;
+
+ if ((b_1440049 < a_1440048)) {
+ Tmp1 = makeNimstrLit("index out of bounds, the container is empty");
+ }
+ else {
+ Tmp1 = (makeNimstrLit("index ") || []).concat(cstrToNimstr((i_1440047)+"") || [],makeNimstrLit(" not in ") || [],cstrToNimstr((a_1440048)+"") || [],makeNimstrLit(" .. ") || [],cstrToNimstr((b_1440049)+"") || []);
+ }
+
+ raiseException({message: nimCopy(null, Tmp1, NTI1188013), parent: null, m_type: NTI1194649, name: null, trace: [], up: null}, "IndexDefect");
+
+
+}
+function toToc_10550150(x_10550152, father_10550153) {
+ var Tmp5;
+ var Tmp6;
+ var Tmp7;
+ var Tmp8;
+ var Tmp15;
+
+ if ((x_10550152.nodeName == "UL")) {
+ var f_10550174 = {heading: null, kids: [], sortId: (father_10550153.kids).length, doSort: false};
+ var i_10550176 = 0;
+ L1: do {
+ L2: while (true) {
+ if (!(i_10550176 < x_10550152.childNodes.length)) break L2;
+ var nxt_10550177 = addInt(i_10550176, 1);
+ L3: do {
+ L4: while (true) {
+ if (!(nxt_10550177 < x_10550152.childNodes.length)) Tmp5 = false; else { Tmp5 = isWhitespace_10550133(x_10550152.childNodes[nxt_10550177]); } if (!Tmp5) break L4;
+ nxt_10550177 = addInt(nxt_10550177, 1);
+ }
+ } while(false);
+ if (!(nxt_10550177 < x_10550152.childNodes.length)) Tmp8 = false; else { Tmp8 = (x_10550152.childNodes[i_10550176].nodeName == "LI"); } if (!Tmp8) Tmp7 = false; else { Tmp7 = (x_10550152.childNodes[i_10550176].childNodes.length == 1); } if (!Tmp7) Tmp6 = false; else { Tmp6 = (x_10550152.childNodes[nxt_10550177].nodeName == "UL"); } if (Tmp6) {
+ var e_10550204 = {heading: x_10550152.childNodes[i_10550176].childNodes[0], kids: [], sortId: (f_10550174.kids).length, doSort: false};
+ var it_10550205 = x_10550152.childNodes[nxt_10550177];
+ L9: do {
+ var j_10550213 = 0;
+ var colontmp__10575445 = 0;
+ colontmp__10575445 = it_10550205.childNodes.length;
+ var i_10575446 = 0;
+ L10: do {
+ L11: while (true) {
+ if (!(i_10575446 < colontmp__10575445)) break L11;
+ j_10550213 = i_10575446;
+ toToc_10550150(it_10550205.childNodes[j_10550213], e_10550204);
+ i_10575446 = addInt(i_10575446, 1);
+ }
+ } while(false);
+ } while(false);
+ f_10550174.kids.push(e_10550204);;
+ i_10550176 = addInt(nxt_10550177, 1);
+ }
+ else {
+ toToc_10550150(x_10550152.childNodes[i_10550176], f_10550174);
+ i_10550176 = addInt(i_10550176, 1);
+ }
+
+ }
+ } while(false);
+ father_10550153.kids.push(f_10550174);;
+ }
+ else {
+ if (isWhitespace_10550133(x_10550152)) {
+ }
+ else {
+ if ((x_10550152.nodeName == "LI")) {
+ var idx_10550252 = [];
+ L12: do {
+ var i_10550260 = 0;
+ var colontmp__10575449 = 0;
+ colontmp__10575449 = x_10550152.childNodes.length;
+ var i_10575450 = 0;
+ L13: do {
+ L14: while (true) {
+ if (!(i_10575450 < colontmp__10575449)) break L14;
+ i_10550260 = i_10575450;
+ if (!(isWhitespace_10550133(x_10550152.childNodes[i_10550260]))) {
+ idx_10550252.push(i_10550260);;
+ }
+
+ i_10575450 = addInt(i_10575450, 1);
+ }
+ } while(false);
+ } while(false);
+ if (!((idx_10550252).length == 2)) Tmp15 = false; else { Tmp15 = (x_10550152.childNodes[idx_10550252[chckIndx(1, 0, (idx_10550252).length-1)]].nodeName == "UL"); } if (Tmp15) {
+ var e_10550294 = {heading: x_10550152.childNodes[idx_10550252[chckIndx(0, 0, (idx_10550252).length-1)]], kids: [], sortId: (father_10550153.kids).length, doSort: false};
+ var it_10550295 = x_10550152.childNodes[idx_10550252[chckIndx(1, 0, (idx_10550252).length-1)]];
+ L16: do {
+ var j_10550303 = 0;
+ var colontmp__10575454 = 0;
+ colontmp__10575454 = it_10550295.childNodes.length;
+ var i_10575455 = 0;
+ L17: do {
+ L18: while (true) {
+ if (!(i_10575455 < colontmp__10575454)) break L18;
+ j_10550303 = i_10575455;
+ toToc_10550150(it_10550295.childNodes[j_10550303], e_10550294);
+ i_10575455 = addInt(i_10575455, 1);
+ }
+ } while(false);
+ } while(false);
+ father_10550153.kids.push(e_10550294);;
+ }
+ else {
+ L19: do {
+ var i_10550319 = 0;
+ var colontmp__10575458 = 0;
+ colontmp__10575458 = x_10550152.childNodes.length;
+ var i_10575459 = 0;
+ L20: do {
+ L21: while (true) {
+ if (!(i_10575459 < colontmp__10575458)) break L21;
+ i_10550319 = i_10575459;
+ toToc_10550150(x_10550152.childNodes[i_10550319], father_10550153);
+ i_10575459 = addInt(i_10575459, 1);
+ }
+ } while(false);
+ } while(false);
+ }
+
+ }
+ else {
+ father_10550153.kids.push({heading: x_10550152, kids: [], sortId: (father_10550153.kids).length, doSort: false});;
+ }
+ }}
+
+
+}
+function extractItems_10505075(x_10505077, heading_10505078, items_10505081, items_10505081_Idx) {
+ var Tmp1;
+
+ BeforeRet: do {
+ if ((x_10505077 == null)) {
+ break BeforeRet;
+ }
+
+ if (!!((x_10505077.heading == null))) Tmp1 = false; else { Tmp1 = (x_10505077.heading.textContent == heading_10505078); } if (Tmp1) {
+ L2: do {
+ var i_10510021 = 0;
+ var colontmp__10575475 = 0;
+ colontmp__10575475 = (x_10505077.kids).length;
+ var i_10575476 = 0;
+ L3: do {
+ L4: while (true) {
+ if (!(i_10575476 < colontmp__10575475)) break L4;
+ i_10510021 = i_10575476;
+ items_10505081[items_10505081_Idx].push(x_10505077.kids[chckIndx(i_10510021, 0, (x_10505077.kids).length-1)].heading);;
+ i_10575476 = addInt(i_10575476, 1);
+ }
+ } while(false);
+ } while(false);
+ }
+ else {
+ L5: do {
+ var i_10510042 = 0;
+ var colontmp__10575479 = 0;
+ colontmp__10575479 = (x_10505077.kids).length;
+ var i_10575480 = 0;
+ L6: do {
+ L7: while (true) {
+ if (!(i_10575480 < colontmp__10575479)) break L7;
+ i_10510042 = i_10575480;
+ var it_10510043 = x_10505077.kids[chckIndx(i_10510042, 0, (x_10505077.kids).length-1)];
+ extractItems_10505075(it_10510043, heading_10505078, items_10505081, items_10505081_Idx);
+ i_10575480 = addInt(i_10575480, 1);
+ }
+ } while(false);
+ } while(false);
+ }
+
+ } while (false);
+
+
+}
+function tree_10496020(tag_10496022, kids_10496024) {
+ var result_10496025 = null;
+
+ result_10496025 = document.createElement(toJSStr(tag_10496022));
+ L1: do {
+ var k_10496058 = null;
+ var k_10496058_Idx = 0;
+ var i_10575496 = 0;
+ L2: do {
+ L3: while (true) {
+ if (!(i_10575496 < (kids_10496024).length)) break L3;
+ k_10496058 = kids_10496024; k_10496058_Idx = chckIndx(i_10575496, 0, (kids_10496024).length-1);
+ result_10496025.appendChild(k_10496058[k_10496058_Idx]);
+ i_10575496 = addInt(i_10575496, 1);
+ }
+ } while(false);
+ } while(false);
+
+ return result_10496025;
+
+}
+function text_10496169(s_10496171) {
+ var result_10496172 = null;
+
+ result_10496172 = document.createTextNode(s_10496171);
+
+ return result_10496172;
+
+}
+function sysFatal_1305418(message_1305422) {
+ raiseException({message: nimCopy(null, message_1305422, NTI1188013), m_type: NTI1194641, parent: null, name: null, trace: [], up: null}, "AssertionDefect");
+
+
+}
+function raiseAssert_1305414(msg_1305416) {
+ sysFatal_1305418(msg_1305416);
+
+
+}
+function failedAssertImpl_1305480(msg_1305482) {
+ raiseAssert_1305414(msg_1305482);
+
+
+}
+function uncovered_10555022(x_10555024) {
+ var Tmp1;
+ var Tmp2;
+
+ var result_10555025 = null;
+
+ BeforeRet: do {
+ if (!((x_10555024.kids).length == 0)) Tmp1 = false; else { Tmp1 = !((x_10555024.heading == null)); } if (Tmp1) {
+ if (!(x_10555024.heading.hasOwnProperty('__karaxMarker__'))) {
+ Tmp2 = x_10555024;
+ }
+ else {
+ Tmp2 = null;
+ }
+
+ result_10555025 = Tmp2;
+ break BeforeRet;
+ }
+
+ result_10555025 = {heading: x_10555024.heading, kids: [], sortId: x_10555024.sortId, doSort: x_10555024.doSort};
+ L3: do {
+ var i_10560036 = 0;
+ var colontmp__10575507 = 0;
+ colontmp__10575507 = (x_10555024.kids).length;
+ var i_10575508 = 0;
+ L4: do {
+ L5: while (true) {
+ if (!(i_10575508 < colontmp__10575507)) break L5;
+ i_10560036 = i_10575508;
+ var y_10560037 = uncovered_10555022(x_10555024.kids[chckIndx(i_10560036, 0, (x_10555024.kids).length-1)]);
+ if (!((y_10560037 == null))) {
+ result_10555025.kids.push(y_10560037);;
+ }
+
+ i_10575508 = addInt(i_10575508, 1);
+ }
+ } while(false);
+ } while(false);
+ if (((result_10555025.kids).length == 0)) {
+ result_10555025 = null;
+ }
+
+ } while (false);
+
+ return result_10555025;
+
+}
+function mergeTocs_10565035(orig_10565037, news_10565038) {
+ var result_10565039 = null;
+
+ result_10565039 = uncovered_10555022(orig_10565037);
+ if ((result_10565039 == null)) {
+ result_10565039 = news_10565038;
+ }
+ else {
+ L1: do {
+ var i_10565060 = 0;
+ var colontmp__10575502 = 0;
+ colontmp__10575502 = (news_10565038.kids).length;
+ var i_10575503 = 0;
+ L2: do {
+ L3: while (true) {
+ if (!(i_10575503 < colontmp__10575502)) break L3;
+ i_10565060 = i_10575503;
+ result_10565039.kids.push(news_10565038.kids[chckIndx(i_10565060, 0, (news_10565038.kids).length-1)]);;
+ i_10575503 = addInt(i_10575503, 1);
+ }
+ } while(false);
+ } while(false);
+ }
+
+
+ return result_10565039;
+
+}
+function buildToc_10565082(orig_10565084, types_10565086, procs_10565087) {
+ var Tmp7;
+
+ var result_10565088 = null;
+
+ var newStuff_10565104 = {heading: null, kids: [], doSort: true, sortId: 0};
+ L1: do {
+ var t_10575214 = null;
+ var t_10575214_Idx = 0;
+ var i_10575491 = 0;
+ var L_10575492 = (types_10565086).length;
+ L2: do {
+ L3: while (true) {
+ if (!(i_10575491 < L_10575492)) break L3;
+ t_10575214 = types_10565086; t_10575214_Idx = chckIndx(i_10575491, 0, (types_10565086).length-1);
+ var c_10575230 = {heading: t_10575214[t_10575214_Idx].cloneNode(true), kids: [], doSort: true, sortId: 0};
+ t_10575214[t_10575214_Idx].__karaxMarker__ = true;
+ L4: do {
+ var p_10575238 = null;
+ var p_10575238_Idx = 0;
+ var i_10575488 = 0;
+ var L_10575489 = (procs_10565087).length;
+ L5: do {
+ L6: while (true) {
+ if (!(i_10575488 < L_10575489)) break L6;
+ p_10575238 = procs_10565087; p_10575238_Idx = chckIndx(i_10575488, 0, (procs_10565087).length-1);
+ if (!(p_10575238[p_10575238_Idx].hasOwnProperty('__karaxMarker__'))) {
+ var xx_10575239 = p_10575238[p_10575238_Idx].parentNode.getElementsByClassName("attachedType");
+ if (!((xx_10575239).length == 1)) Tmp7 = false; else { Tmp7 = (xx_10575239[chckIndx(0, 0, (xx_10575239).length-1)].textContent == t_10575214[t_10575214_Idx].textContent); } if (Tmp7) {
+ var q_10575247 = tree_10496020(makeNimstrLit("A"), [text_10496169(p_10575238[p_10575238_Idx].title)]);
+ q_10575247.setAttribute("href", p_10575238[p_10575238_Idx].getAttribute("href"));
+ c_10575230.kids.push({heading: q_10575247, kids: [], sortId: 0, doSort: false});;
+ p_10575238[p_10575238_Idx].__karaxMarker__ = true;
+ }
+
+ }
+
+ i_10575488 = addInt(i_10575488, 1);
+ if (!(((procs_10565087).length == L_10575489))) {
+ failedAssertImpl_1305480(makeNimstrLit("iterators.nim(204, 11) `len(a) == L` the length of the seq changed while iterating over it"));
+ }
+
+ }
+ } while(false);
+ } while(false);
+ newStuff_10565104.kids.push(c_10575230);;
+ i_10575491 = addInt(i_10575491, 1);
+ if (!(((types_10565086).length == L_10575492))) {
+ failedAssertImpl_1305480(makeNimstrLit("iterators.nim(204, 11) `len(a) == L` the length of the seq changed while iterating over it"));
+ }
+
+ }
+ } while(false);
+ } while(false);
+ result_10565088 = mergeTocs_10565035(orig_10565084, newStuff_10565104);
+
+ return result_10565088;
+
+}
+function add_10496117(parent_10496119, kid_10496120) {
+ var Tmp1;
+ var Tmp2;
+
+ if (!(parent_10496119.nodeName == "TR")) Tmp1 = false; else { if ((kid_10496120.nodeName == "TD")) Tmp2 = true; else { Tmp2 = (kid_10496120.nodeName == "TH"); } Tmp1 = Tmp2; } if (Tmp1) {
+ var k_10496121 = document.createElement("TD");
+ k_10496121.appendChild(kid_10496120);
+ parent_10496119.appendChild(k_10496121);
+ }
+ else {
+ parent_10496119.appendChild(kid_10496120);
+ }
+
+
+
+}
+function setClass_10496135(e_10496137, value_10496138) {
+ e_10496137.setAttribute("class", toJSStr(value_10496138));
+
+
+}
+function toHtml_10510072(x_10510074, isRoot_10510075) {
+ var Tmp1;
+ function HEX3Aanonymous_10515015(a_10515017, b_10515018) {
+ var Tmp1;
+
+ var result_10515019 = 0;
+
+ BeforeRet: do {
+ if (!!((a_10515017.heading == null))) Tmp1 = false; else { Tmp1 = !((b_10515018.heading == null)); } if (Tmp1) {
+ var x_10525009 = a_10515017.heading.textContent;
+ var y_10525010 = b_10515018.heading.textContent;
+ if ((x_10525009 < y_10525010)) {
+ result_10515019 = -1;
+ break BeforeRet;
+ }
+
+ if ((y_10525010 < x_10525009)) {
+ result_10515019 = 1;
+ break BeforeRet;
+ }
+
+ result_10515019 = 0;
+ break BeforeRet;
+ }
+ else {
+ result_10515019 = subInt(a_10515017.sortId, b_10515018.sortId);
+ break BeforeRet;
+ }
+
+ } while (false);
+
+ return result_10515019;
+
+ }
+
+ var result_10510076 = null;
+
+ BeforeRet: do {
+ if ((x_10510074 == null)) {
+ result_10510076 = null;
+ break BeforeRet;
+ }
+
+ if (((x_10510074.kids).length == 0)) {
+ if ((x_10510074.heading == null)) {
+ result_10510076 = null;
+ break BeforeRet;
+ }
+
+ result_10510076 = x_10510074.heading.cloneNode(true);
+ break BeforeRet;
+ }
+
+ result_10510076 = tree_10496020(makeNimstrLit("DIV"), []);
+ if (!!((x_10510074.heading == null))) Tmp1 = false; else { Tmp1 = !(x_10510074.heading.hasOwnProperty('__karaxMarker__')); } if (Tmp1) {
+ add_10496117(result_10510076, x_10510074.heading.cloneNode(true));
+ }
+
+ var ul_10515012 = tree_10496020(makeNimstrLit("UL"), []);
+ if (isRoot_10510075) {
+ setClass_10496135(ul_10515012, makeNimstrLit("simple simple-toc"));
+ }
+ else {
+ setClass_10496135(ul_10515012, makeNimstrLit("simple"));
+ }
+
+ if (x_10510074.doSort) {
+ x_10510074.kids.sort(HEX3Aanonymous_10515015);
+ }
+
+ L2: do {
+ var k_10540214 = null;
+ var k_10540214_Idx = 0;
+ var i_10575514 = 0;
+ var L_10575515 = (x_10510074.kids).length;
+ L3: do {
+ L4: while (true) {
+ if (!(i_10575514 < L_10575515)) break L4;
+ k_10540214 = x_10510074.kids; k_10540214_Idx = chckIndx(i_10575514, 0, (x_10510074.kids).length-1);
+ var y_10540215 = toHtml_10510072(k_10540214[k_10540214_Idx], false);
+ if (!((y_10540215 == null))) {
+ add_10496117(ul_10515012, tree_10496020(makeNimstrLit("LI"), [y_10540215]));
+ }
+
+ i_10575514 = addInt(i_10575514, 1);
+ if (!(((x_10510074.kids).length == L_10575515))) {
+ failedAssertImpl_1305480(makeNimstrLit("iterators.nim(204, 11) `len(a) == L` the length of the seq changed while iterating over it"));
+ }
+
+ }
+ } while(false);
+ } while(false);
+ if (!((ul_10515012.childNodes.length == 0))) {
+ add_10496117(result_10510076, ul_10515012);
+ }
+
+ if ((result_10510076.childNodes.length == 0)) {
+ result_10510076 = null;
+ }
+
+ } while (false);
+
+ return result_10510076;
+
+}
+function replaceById_10496189(id_10496191, newTree_10496192) {
+ var x_10496193 = document.getElementById(id_10496191);
+ x_10496193.parentNode.replaceChild(newTree_10496192, x_10496193);
+ newTree_10496192.id = id_10496191;
+
+
+}
+function togglevis_10575336(d_10575338) {
+ if (d_10575338.style.display == 'none')
+ d_10575338.style.display = 'inline';
+ else
+ d_10575338.style.display = 'none';
+
+
+
+}
+function groupBy(value_10575354) {
+ var toc_10575355 = document.getElementById("toc-list");
+ if ((alternative_10575322[0] == null)) {
+ var tt_10575376 = {heading: null, kids: [], sortId: 0, doSort: false};
+ toToc_10550150(toc_10575355, tt_10575376);
+ tt_10575376 = tt_10575376.kids[chckIndx(0, 0, (tt_10575376.kids).length-1)];
+ var types_10575393 = [[]];
+ var procs_10575410 = [[]];
+ extractItems_10505075(tt_10575376, "Types", types_10575393, 0);
+ extractItems_10505075(tt_10575376, "Procs", procs_10575410, 0);
+ extractItems_10505075(tt_10575376, "Converters", procs_10575410, 0);
+ extractItems_10505075(tt_10575376, "Methods", procs_10575410, 0);
+ extractItems_10505075(tt_10575376, "Templates", procs_10575410, 0);
+ extractItems_10505075(tt_10575376, "Macros", procs_10575410, 0);
+ extractItems_10505075(tt_10575376, "Iterators", procs_10575410, 0);
+ var ntoc_10575418 = buildToc_10565082(tt_10575376, types_10575393[0], procs_10575410[0]);
+ var x_10575419 = toHtml_10510072(ntoc_10575418, true);
+ alternative_10575322[0] = tree_10496020(makeNimstrLit("DIV"), [x_10575419]);
+ }
+
+ if ((value_10575354 == "type")) {
+ replaceById_10496189("tocRoot", alternative_10575322[0]);
+ }
+ else {
+ replaceById_10496189("tocRoot", tree_10496020(makeNimstrLit("DIV"), []));
+ }
+
+ togglevis_10575336(document.getElementById("toc-list"));
+
+
+}
+var db_10575518 = [[]];
+var contents_10575520 = [[]];
+var oldtoc_10585439 = [null];
+var timer_10585440 = [null];
+function raiseRangeError() {
+ raiseException({message: makeNimstrLit("value out of range"), parent: null, m_type: NTI1194653, name: null, trace: [], up: null}, "RangeDefect");
+
+
+}
+function nsuToLowerAsciiChar(c_9410023) {
+ var result_9410024 = 0;
+
+ if ((ConstSet2[c_9410023] != undefined)) {
+ result_9410024 = chckRange(addInt(c_9410023, 32), 0, 255);
+ }
+ else {
+ result_9410024 = c_9410023;
+ }
+
+
+ return result_9410024;
+
+}
+function fuzzyMatch_10416054(pattern_10416056, str_10416057) {
+ var Tmp4;
+ var Tmp5;
+ var Tmp6;
+ var Tmp7;
+ var Tmp8;
+
+ var result_10416061 = {Field0: 0, Field1: false};
+
+ var scoreState_10416062 = -100;
+ var headerMatched_10416063 = false;
+ var unmatchedLeadingCharCount_10416065 = 0;
+ var consecutiveMatchCount_10416067 = 0;
+ var strIndex_10416069 = 0;
+ var patIndex_10416071 = 0;
+ var score_10416073 = 0;
+ L1: do {
+ L2: while (true) {
+ if (!((strIndex_10416069 < (str_10416057).length) && (patIndex_10416071 < (pattern_10416056).length))) break L2;
+ L3: do {
+ var patternChar_10416079 = nsuToLowerAsciiChar(pattern_10416056.charCodeAt(chckIndx(patIndex_10416071, 0, (pattern_10416056).length-1)));
+ var strChar_10416080 = nsuToLowerAsciiChar(str_10416057.charCodeAt(chckIndx(strIndex_10416069, 0, (str_10416057).length-1)));
+ if ((ConstSet3[patternChar_10416079] != undefined)) {
+ patIndex_10416071 = addInt(patIndex_10416071, 1);
+ break L3;
+ }
+
+ if ((ConstSet4[strChar_10416080] != undefined)) {
+ strIndex_10416069 = addInt(strIndex_10416069, 1);
+ break L3;
+ }
+
+ if ((!(headerMatched_10416063) && (strChar_10416080 == 58))) {
+ headerMatched_10416063 = true;
+ scoreState_10416062 = -100;
+ score_10416073 = ((Math.floor((5.0000000000000000e-01 * score_10416073)))|0);
+ patIndex_10416071 = 0;
+ strIndex_10416069 = addInt(strIndex_10416069, 1);
+ break L3;
+ }
+
+ if ((strChar_10416080 == patternChar_10416079)) {
+ switch (scoreState_10416062) {
+ case -100:
+ case 20:
+ scoreState_10416062 = 10;
+ break;
+ case 0:
+ scoreState_10416062 = 5;
+ score_10416073 = addInt(score_10416073, scoreState_10416062);
+ break;
+ case 10:
+ case 5:
+ consecutiveMatchCount_10416067 = addInt(consecutiveMatchCount_10416067, 1);
+ scoreState_10416062 = 5;
+ score_10416073 = addInt(score_10416073, mulInt(5, consecutiveMatchCount_10416067));
+ if ((scoreState_10416062 == 10)) {
+ score_10416073 = addInt(score_10416073, 10);
+ }
+
+ var onBoundary_10430042 = (patIndex_10416071 == ((pattern_10416056).length-1));
+ if ((!(onBoundary_10430042) && (strIndex_10416069 < ((str_10416057).length-1)))) {
+ var nextPatternChar_10430043 = nsuToLowerAsciiChar(pattern_10416056.charCodeAt(chckIndx(addInt(patIndex_10416071, 1), 0, (pattern_10416056).length-1)));
+ var nextStrChar_10430044 = nsuToLowerAsciiChar(str_10416057.charCodeAt(chckIndx(addInt(strIndex_10416069, 1), 0, (str_10416057).length-1)));
+ if (!!((ConstSet5[nextStrChar_10430044] != undefined))) Tmp4 = false; else { Tmp4 = !((nextStrChar_10430044 == nextPatternChar_10430043)); } onBoundary_10430042 = Tmp4;
+ }
+
+ if (onBoundary_10430042) {
+ scoreState_10416062 = 20;
+ score_10416073 = addInt(score_10416073, scoreState_10416062);
+ }
+
+ break;
+ case -1:
+ case -3:
+ if (!((ConstSet6[str_10416057.charCodeAt(chckIndx(subInt(strIndex_10416069, 1), 0, (str_10416057).length-1))] != undefined))) Tmp5 = true; else { if (!(ConstSet7[str_10416057.charCodeAt(chckIndx(subInt(strIndex_10416069, 1), 0, (str_10416057).length-1))] != undefined)) Tmp6 = false; else { Tmp6 = (ConstSet8[str_10416057.charCodeAt(chckIndx(strIndex_10416069, 0, (str_10416057).length-1))] != undefined); } Tmp5 = Tmp6; } var isLeadingChar_10460008 = Tmp5;
+ if (isLeadingChar_10460008) {
+ scoreState_10416062 = 10;
+ }
+ else {
+ scoreState_10416062 = 0;
+ score_10416073 = addInt(score_10416073, scoreState_10416062);
+ }
+
+ break;
+ }
+ patIndex_10416071 = addInt(patIndex_10416071, 1);
+ }
+ else {
+ switch (scoreState_10416062) {
+ case -100:
+ scoreState_10416062 = -3;
+ score_10416073 = addInt(score_10416073, scoreState_10416062);
+ break;
+ case 5:
+ scoreState_10416062 = -1;
+ score_10416073 = addInt(score_10416073, scoreState_10416062);
+ consecutiveMatchCount_10416067 = 0;
+ break;
+ case -3:
+ if ((unmatchedLeadingCharCount_10416065 < 3)) {
+ scoreState_10416062 = -3;
+ score_10416073 = addInt(score_10416073, scoreState_10416062);
+ }
+
+ unmatchedLeadingCharCount_10416065 = addInt(unmatchedLeadingCharCount_10416065, 1);
+ break;
+ default:
+ scoreState_10416062 = -1;
+ score_10416073 = addInt(score_10416073, scoreState_10416062);
+ break;
+ }
+ }
+
+ strIndex_10416069 = addInt(strIndex_10416069, 1);
+ } while(false);
+ }
+ } while(false);
+ if (!(patIndex_10416071 == (pattern_10416056).length)) Tmp7 = false; else { if ((strIndex_10416069 == (str_10416057).length)) Tmp8 = true; else { Tmp8 = !((ConstSet9[str_10416057.charCodeAt(chckIndx(strIndex_10416069, 0, (str_10416057).length-1))] != undefined)); } Tmp7 = Tmp8; } if (Tmp7) {
+ score_10416073 = addInt(score_10416073, 10);
+ }
+
+ var colontmp__10595060 = nimMax(0, score_10416073);
+ var colontmp__10595061 = (0 < score_10416073);
+ nimCopy(result_10416061, {Field0: colontmp__10595060, Field1: colontmp__10595061}, NTI10416058);
+
+ return result_10416061;
+
+}
+function escapeCString_10575537(x_10575540, x_10575540_Idx) {
+ var s_10575541 = [];
+ L1: do {
+ var c_10575542 = 0;
+ var i_10595065 = 0;
+ var L_10595066 = (x_10575540[x_10575540_Idx]).length;
+ L2: do {
+ L3: while (true) {
+ if (!(i_10595065 < L_10595066)) break L3;
+ c_10575542 = x_10575540[x_10575540_Idx].charCodeAt(chckIndx(i_10595065, 0, (x_10575540[x_10575540_Idx]).length-1));
+ switch (c_10575542) {
+ case 38:
+ s_10575541.push.apply(s_10575541, makeNimstrLit("&"));;
+ break;
+ case 60:
+ s_10575541.push.apply(s_10575541, makeNimstrLit("<"));;
+ break;
+ case 62:
+ s_10575541.push.apply(s_10575541, makeNimstrLit(">"));;
+ break;
+ case 34:
+ s_10575541.push.apply(s_10575541, makeNimstrLit("""));;
+ break;
+ case 39:
+ s_10575541.push.apply(s_10575541, makeNimstrLit("'"));;
+ break;
+ case 47:
+ s_10575541.push.apply(s_10575541, makeNimstrLit("/"));;
+ break;
+ default:
+ addChar(s_10575541, c_10575542);;
+ break;
+ }
+ i_10595065 = addInt(i_10595065, 1);
+ }
+ } while(false);
+ } while(false);
+ x_10575540[x_10575540_Idx] = toJSStr(s_10575541);
+
+
+}
+function text_10496152(s_10496154) {
+ var result_10496155 = null;
+
+ result_10496155 = document.createTextNode(toJSStr(s_10496154));
+
+ return result_10496155;
+
+}
+function dosearch_10575556(value_10575558) {
+ function HEX3Aanonymous_10585276(a_10585285, b_10585286) {
+ var result_10585292 = 0;
+
+ result_10585292 = subInt(b_10585286["Field1"], a_10585285["Field1"]);
+
+ return result_10585292;
+
+ }
+
+ var result_10575559 = null;
+
+ if (((db_10575518[0]).length == 0)) {
+ var stuff_10575565 = null;
+ var request = new XMLHttpRequest();
+ request.open("GET", "theindex.html", false);
+ request.send(null);
+
+ var doc = document.implementation.createHTMLDocument("theindex");
+ doc.documentElement.innerHTML = request.responseText;
+
+ //parser=new DOMParser();
+ //doc=parser.parseFromString("", "text/html");
+
+ stuff_10575565 = doc.documentElement;
+
+ db_10575518[0] = nimCopy(null, stuff_10575565.getElementsByClassName("reference"), NTI1880505);
+ contents_10575520[0] = nimCopy(null, [], NTI10575580);
+ L1: do {
+ var ahref_10585214 = null;
+ var ahref_10585214_Idx = 0;
+ var i_10595040 = 0;
+ var L_10595041 = (db_10575518[0]).length;
+ L2: do {
+ L3: while (true) {
+ if (!(i_10595040 < L_10595041)) break L3;
+ ahref_10585214 = db_10575518[0]; ahref_10585214_Idx = chckIndx(i_10595040, 0, (db_10575518[0]).length-1);
+ contents_10575520[0].push(ahref_10585214[ahref_10585214_Idx].getAttribute("data-doc-search-tag"));;
+ i_10595040 = addInt(i_10595040, 1);
+ if (!(((db_10575518[0]).length == L_10595041))) {
+ failedAssertImpl_1305480(makeNimstrLit("iterators.nim(204, 11) `len(a) == L` the length of the seq changed while iterating over it"));
+ }
+
+ }
+ } while(false);
+ } while(false);
+ }
+
+ var ul_10585226 = tree_10496020(makeNimstrLit("UL"), []);
+ result_10575559 = tree_10496020(makeNimstrLit("DIV"), []);
+ setClass_10496135(result_10575559, makeNimstrLit("search_results"));
+ var matches_10585247 = [];
+ L4: do {
+ var i_10585260 = 0;
+ var colontmp__10595047 = 0;
+ colontmp__10595047 = (db_10575518[0]).length;
+ var i_10595048 = 0;
+ L5: do {
+ L6: while (true) {
+ if (!(i_10595048 < colontmp__10595047)) break L6;
+ i_10585260 = i_10595048;
+ L7: do {
+ var c_10585261 = contents_10575520[0][chckIndx(i_10585260, 0, (contents_10575520[0]).length-1)];
+ if (((c_10585261 == "Examples") || (c_10585261 == "PEG construction"))) {
+ break L7;
+ }
+
+ var colontmp__10595055 = fuzzyMatch_10416054(value_10575558, c_10585261);
+ var score_10585262 = colontmp__10595055["Field0"];
+ var matched_10585263 = colontmp__10595055["Field1"];
+ if (matched_10585263) {
+ matches_10585247.push({Field0: db_10575518[0][chckIndx(i_10585260, 0, (db_10575518[0]).length-1)], Field1: score_10585262});;
+ }
+
+ } while(false);
+ i_10595048 = addInt(i_10595048, 1);
+ }
+ } while(false);
+ } while(false);
+ matches_10585247.sort(HEX3Aanonymous_10585276);
+ L8: do {
+ var i_10585331 = 0;
+ var colontmp__10595052 = 0;
+ colontmp__10595052 = nimMin((matches_10585247).length, 29);
+ var i_10595053 = 0;
+ L9: do {
+ L10: while (true) {
+ if (!(i_10595053 < colontmp__10595052)) break L10;
+ i_10585331 = i_10595053;
+ matches_10585247[chckIndx(i_10585331, 0, (matches_10585247).length-1)]["Field0"].innerHTML = matches_10585247[chckIndx(i_10585331, 0, (matches_10585247).length-1)]["Field0"].getAttribute("data-doc-search-tag");
+ escapeCString_10575537(matches_10585247[chckIndx(i_10585331, 0, (matches_10585247).length-1)]["Field0"], "innerHTML");
+ add_10496117(ul_10585226, tree_10496020(makeNimstrLit("LI"), [matches_10585247[chckIndx(i_10585331, 0, (matches_10585247).length-1)]["Field0"]]));
+ i_10595053 = addInt(i_10595053, 1);
+ }
+ } while(false);
+ } while(false);
+ if ((ul_10585226.childNodes.length == 0)) {
+ add_10496117(result_10575559, tree_10496020(makeNimstrLit("B"), [text_10496152(makeNimstrLit("no search results"))]));
+ }
+ else {
+ add_10496117(result_10575559, tree_10496020(makeNimstrLit("B"), [text_10496152(makeNimstrLit("search results"))]));
+ add_10496117(result_10575559, ul_10585226);
+ }
+
+
+ return result_10575559;
+
+}
+function search() {
+ function wrapper_10585471() {
+ var elem_10585473 = document.getElementById("searchInput");
+ var value_10585474 = elem_10585473.value;
+ if (!(((value_10585474).length == 0))) {
+ if ((oldtoc_10585439[0] == null)) {
+ oldtoc_10585439[0] = document.getElementById("tocRoot");
+ }
+
+ var results_10590006 = dosearch_10575556(value_10585474);
+ replaceById_10496189("tocRoot", results_10590006);
+ }
+ else {
+ if (!((oldtoc_10585439[0] == null))) {
+ replaceById_10496189("tocRoot", oldtoc_10585439[0]);
+ }
+ }
+
+
+ }
+
+ if (!((timer_10585440[0] == null))) {
+ clearTimeout(timer_10585440[0]);
+ }
+
+ timer_10585440[0] = setTimeout(wrapper_10585471, 400);
+
+
+}
diff --git a/src/htmldocs/fftw3.html b/src/htmldocs/fftw3.html
index b5eb537..be488c9 100644
--- a/src/htmldocs/fftw3.html
+++ b/src/htmldocs/fftw3.html
@@ -93,49 +93,13 @@ fftw3
Introduction
Examples
+Planner flags
- Types
+ Imports
-
-
- Vars
-
@@ -143,22 +107,22 @@ fftw3
FFTW_ MEASURE
+ FFTW_ ESTIMATE
+ FFTW_ PATIENT
+ FFTW_ EXHAUSTIVE
+ FFTW_ WISDOM_ ONLY
FFTW_ DESTROY_ INPUT
+ FFTW_ PRESERVE_ INPUT
FFTW_ UNALIGNED
FFTW_ CONSERVE_ MEMORY
- FFTW_ EXHAUSTIVE
- FFTW_ PRESERVE_ INPUT
- FFTW_ PATIENT
- FFTW_ ESTIMATE
- FFTW_ WISDOM_ ONLY
FFTW_ FORWARD
fftw3
Procs
-
-
- fftw_print_plan
- fftw_print_plan,fftw_planfftw_plan
+ fftw_plan_r2r
+ fftw_plan_r2r,cint,ptr.cint,ptr.cdouble,ptr.cdouble,ptr.fftw_r2r_kind,cuint
+ fftw_plan_r2r,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuint
fftw_plan_many_r2r
fftw_plan_many_r2r,cint,ptr.cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.fftw_r2r_kind,cuintfftw_plan
+ outptr: ptr cdouble; onembed: ptr cint; ostride: cint;
+ odist: cint; kind: ptr fftw_r2r_kind; flags: cuint): fftw_plan">fftw_plan_many_r2r,cint,ptr.cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.fftw_r2r_kind,cuint
-
-
-
-
-
-
- fftw_plan_many_dft_c2r
- fftw_plan_many_dft_c2r,cint,ptr.cint,cint,ptr.fftw_complex,ptr.cint,cint,cint,ptr.cdouble,ptr.cint,cint,cint,cuintfftw_plan
-
-
-
- fftw_plan_dft_3d
- fftw_plan_dft_3d,cint,cint,cint,ptr.fftw_complex,ptr.fftw_complex,cint,cuintfftw_plan
- fftw_plan_dft_3d,Tensor[fftw_complex],Tensor[fftw_complex],cint,cuintfftw_complex
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
circshift
@@ -353,53 +164,25 @@ fftw3
fftw_plan_many_dft_r2c
- fftw_plan_many_dft_r2c,cint,ptr.cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.fftw_complex,ptr.cint,cint,cint,cuintfftw_plan
+ fftw_plan_many_dft_r2c,cint,ptr.cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.Complex64,ptr.cint,cint,cint,cuint
-
-
-
-
-
fftw_plan_dft_2d
- fftw_plan_dft_2d,cint,cint,ptr.fftw_complex,ptr.fftw_complex,cint,cuintfftw_plan
- fftw_plan_dft_2d,Tensor[fftw_complex],Tensor[fftw_complex],cint,cuintfftw_complex
+ fftw_plan_dft_2d,cint,cint,ptr.Complex64,ptr.Complex64,cint,cuint
+ fftw_plan_dft_2d,Tensor[Complex64],Tensor[Complex64],cint,cuint
ifftshift
@@ -408,182 +191,146 @@ fftw3
fftw_execute_dft
- fftw_execute_dft,fftw_plan,ptr.fftw_complex,ptr.fftw_complexfftw_plan
- fftw_execute_dft,fftw_plan,Tensor[fftw_complex],Tensor[fftw_complex]fftw_plan
+ fftw_execute_dft,fftw_plan,ptr.Complex64,ptr.Complex64
+ fftw_execute_dft,fftw_plan,Tensor[Complex64],Tensor[Complex64]
fftw_plan_dft_1d
- fftw_plan_dft_1d,cint,ptr.fftw_complex,ptr.fftw_complex,cint,cuintfftw_plan
- fftw_plan_dft_1d,Tensor[fftw_complex],Tensor[fftw_complex],cint,cuintfftw_complex
+ fftw_plan_dft_1d,cint,ptr.Complex64,ptr.Complex64,cint,cuint
+ fftw_plan_dft_1d,Tensor[Complex64],Tensor[Complex64],cint,cuint
fftw_plan_r2r_3d
fftw_plan_r2r_3d,cint,cint,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,fftw_r2r_kind,fftw_r2r_kind,cuintfftw_plan
+ title="fftw_plan_r2r_3d(n0: cint; n1: cint; n2: cint; inptr: ptr cdouble;
+ outptr: ptr cdouble; kind0: fftw_r2r_kind;
+ kind1: fftw_r2r_kind; kind2: fftw_r2r_kind; flags: cuint): fftw_plan">fftw_plan_r2r_3d,cint,cint,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,fftw_r2r_kind,fftw_r2r_kind,cuint
fftw_plan_r2r_3d,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuintfftw_plan
+ kinds: seq[fftw_r2r_kind]; flags: cuint = FFTW_MEASURE): fftw_plan">fftw_plan_r2r_3d,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuint
fftw_plan_many_dft
- fftw_plan_many_dft,cint,ptr.cint,cint,ptr.fftw_complex,ptr.cint,cint,cint,ptr.fftw_complex,ptr.cint,cint,cint,cint,cuintfftw_plan
+ outptr: ptr Complex64; onembed: ptr cint; ostride: cint;
+ odist: cint; sign: cint; flags: cuint): fftw_plan">fftw_plan_many_dft,cint,ptr.cint,cint,ptr.Complex64,ptr.cint,cint,cint,ptr.Complex64,ptr.cint,cint,cint,cint,cuint
- fftw_execute_split_dft
- fftw_execute_split_dft,fftw_plan,ptr.cdouble,ptr.cdouble,ptr.cdouble,ptr.cdoublefftw_plan
+ fftw_plan_many_dft_c2r
+ fftw_plan_many_dft_c2r,cint,ptr.cint,cint,ptr.Complex64,ptr.cint,cint,cint,ptr.cdouble,ptr.cint,cint,cint,cuint
- fftw_plan_guru64_dft_c2r
- fftw_plan_guru64_dft_c2r,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.fftw_complex,ptr.cdouble,cuintfftw_plan
+ fftw_plan_dft_r2c_1d,cint,ptr.cdouble,ptr.Complex64,cuint
+ fftw_plan_dft_r2c_1d,Tensor[float64],Tensor[Complex64],cuint
fftw_plan_dft_r2c
- fftw_plan_dft_r2c,cint,ptr.cint,ptr.cdouble,ptr.fftw_complex,cuintfftw_plan
- fftw_plan_dft_r2c,Tensor[float64],Tensor[fftw_complex],cuintfftw_plan
+ fftw_plan_dft_r2c,cint,ptr.cint,ptr.cdouble,ptr.Complex64,cuint
+ fftw_plan_dft_r2c,Tensor[float64],Tensor[Complex64],cuint
+ fftw_plan_dft_3d
+ fftw_plan_dft_3d,cint,cint,cint,ptr.Complex64,ptr.Complex64,cint,cuint
+ fftw_plan_dft_3d,Tensor[Complex64],Tensor[Complex64],cint,cuint
+
fftw_plan_dft_r2c_3d
- fftw_plan_dft_r2c_3d,cint,cint,cint,ptr.cdouble,ptr.fftw_complex,cuintfftw_plan
- fftw_plan_dft_r2c_3d,Tensor[float64],Tensor[fftw_complex],cuintfftw_plan
+ fftw_plan_dft_r2c_3d,cint,cint,cint,ptr.cdouble,ptr.Complex64,cuint
+ fftw_plan_dft_r2c_3d,Tensor[float64],Tensor[Complex64],cuint
fftw_plan_r2r_1d
fftw_plan_r2r_1d,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,cuintfftw_plan
+ title="fftw_plan_r2r_1d(n: cint; inptr: ptr cdouble; outptr: ptr cdouble;
+ kind: fftw_r2r_kind; flags: cuint): fftw_plan">fftw_plan_r2r_1d,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,cuint
fftw_plan_r2r_1d,Tensor[float64],Tensor[float64],fftw_r2r_kind,cuintfftw_plan
-
-
-
-
-
- fftw_import_wisdom_from_file
- fftw_import_wisdom_from_file,ptr.File
+ kind: fftw_r2r_kind; flags: cuint = FFTW_MEASURE): fftw_plan">fftw_plan_r2r_1d,Tensor[float64],Tensor[float64],fftw_r2r_kind,cuint
fftw_plan_dft_c2r_3d
- fftw_plan_dft_c2r_3d,cint,cint,cint,ptr.fftw_complex,ptr.cdouble,cuintfftw_plan
- fftw_plan_dft_c2r_3d,Tensor[fftw_complex],Tensor[float64],cuintfftw_complex
+ fftw_plan_dft_c2r_3d,cint,cint,cint,ptr.Complex64,ptr.cdouble,cuint
+ fftw_plan_dft_c2r_3d,Tensor[Complex64],Tensor[float64],cuint
-
- fftw_plan_guru_split_dft
- fftw_plan_guru_split_dft,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.cdouble,ptr.cdouble,ptr.cdouble,ptr.cdouble,cuintfftw_plan
+ title="fftw_execute(p: fftw_plan)">fftw_execute,fftw_plan
fftw_execute_dft_r2c
- fftw_execute_dft_r2c,fftw_plan,ptr.cdouble,ptr.fftw_complexfftw_plan
- fftw_execute_dft_r2c,fftw_plan,ptr.cdouble,ptr.Complex64
+ fftw_execute_dft_r2c,fftw_plan,Tensor[float64],Tensor[fftw_complex]fftw_plan
+ output: Tensor[Complex64])">fftw_execute_dft_r2c,fftw_plan,Tensor[float64],Tensor[Complex64]
fftw_plan_dft
- fftw_plan_dft,cint,ptr.cint,ptr.fftw_complex,ptr.fftw_complex,cint,cuintfftw_plan
- fftw_plan_dft,Tensor[fftw_complex],Tensor[fftw_complex],cint,cuintfftw_complex
+ fftw_plan_dft,cint,ptr.cint,ptr.Complex64,ptr.Complex64,cint,cuint
+ fftw_plan_dft,Tensor[Complex64],Tensor[Complex64],cint,cuint
- fftw_plan_guru64_dft_r2c
- fftw_plan_guru64_dft_r2c,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.cdouble,ptr.fftw_complex,cuintfftw_plan
+
fftw_plan_r2r_2d
fftw_plan_r2r_2d,cint,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,fftw_r2r_kind,cuintfftw_plan
+ title="fftw_plan_r2r_2d(n0: cint; n1: cint; inptr: ptr cdouble; outptr: ptr cdouble;
+ kind0: fftw_r2r_kind; kind1: fftw_r2r_kind; flags: cuint): fftw_plan">fftw_plan_r2r_2d,cint,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,fftw_r2r_kind,cuint
fftw_plan_r2r_2d,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuintfftw_plan
-
-
- fftw_cleanup
- fftw_cleanup
+ kinds: seq[fftw_r2r_kind]; flags: cuint = FFTW_MEASURE): fftw_plan">fftw_plan_r2r_2d,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuint
fftw_set_timelimit
@@ -591,53 +338,49 @@ fftw3
title="fftw_set_timelimit(t: cdouble)">fftw_set_timelimit,cdouble
-
- fftw_plan_guru64_split_dft_r2c
- fftw_plan_guru64_split_dft_r2c,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.cdouble,ptr.cdouble,ptr.cdouble,cuintfftw_plan
+
- fftw_plan_guru_dft_c2r
- fftw_plan_guru_dft_c2r,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.fftw_complex,ptr.cdouble,cuintfftw_plan
+
- fftw_plan_r2r
- fftw_plan_r2r,cint,ptr.cint,ptr.cdouble,ptr.cdouble,ptr.fftw_r2r_kind,cuintfftw_plan
- fftw_plan_r2r,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuintfftw_plan
+
- fftw_plan_dft_r2c_2d
- fftw_plan_dft_r2c_2d,cint,cint,ptr.cdouble,ptr.fftw_complex,cuintfftw_plan
- fftw_plan_dft_r2c_2d,Tensor[float64],Tensor[fftw_complex],cuintfftw_plan
+
-
-
+
+
+ Exports
+
@@ -654,129 +397,29 @@
-
-
Types
-
-
-fftw_r2r_kind = enum
- FFTW_R2HC = 0 , FFTW_HC2R = 1 , FFTW_DHT = 2 , FFTW_REDFT00 = 3 ,
- FFTW_REDFT01 = 4 , FFTW_REDFT10 = 5 , FFTW_REDFT11 = 6 , FFTW_RODFT00 = 7 ,
- FFTW_RODFT01 = 8 , FFTW_RODFT10 = 9 , FFTW_RODFT11 = 10
-
-
-
-
-
-
-fftw_iodim { ... } {. pure .} = object
- n * : cint
- ` is ` * : cint
- os * : cint
-
-
-
-
-
-
-
-ptrdiff_t = clong
-
-
-
-
-
-
-wchar_t = cint
-
-
-
-
-
-
-fftw_iodim64 { ... } {. pure .} = object
- n * : ptrdiff_t
- ` is ` * : ptrdiff_t
- os * : ptrdiff_t
-
-
-
-
-
-
-
-fftw_write_char_func = proc ( c : char ; a3 : pointer ) { ... } {. cdecl .}
-
-
-
-
-
-
-fftw_read_char_func = proc ( a2 : pointer ) : cint { ... } {. cdecl .}
-
-
-
-
-
-
-fftw_complex = Complex64
-
-
-
-
-
-
-fftw_plan = pointer
-
-
-
-
-
-
-
-
-
Vars
+
fftw_execute ( plan )
+
Planner flags Planner are const integer that specify how the DFT plan should be computed. More information about
planner flags
+
Consts
@@ -785,60 +428,76 @@
Consts
FFTW_MEASURE = 0
+fftw_plan planner flag.
+Find an optimized plan by computing several FFTs and measuring their execution time. Default planning option.
-
-
FFTW_DESTROY_INPUT = 1
+
+
FFTW_ESTIMATE = 64
+fftw_plan planner flag.
+Instead of time measurements, a simple heuristic is used to pick a plan quickly. The input/output arrays are not overwritten during planning.
-
-
FFTW_UNALIGNED = 2
+
+
FFTW_PATIENT = 32
+fftw_plan planner flag.
+Like FFTW_MEASURE, but considers a wider range of algorithms.
-
-
FFTW_CONSERVE_MEMORY = 4
+
+
FFTW_EXHAUSTIVE = 8
+fftw_plan planner flag.
+Like FFTW_PATIENT, but considers an even wider range of algorithms.
-
-
FFTW_EXHAUSTIVE = 8
+
+
FFTW_WISDOM_ONLY = 2097152
+fftw_plan planner flag.
+Special planning mode in which the plan is created only if wisdow is available.
-
-
FFTW_PRESERVE_INPUT = 16
+
+
FFTW_DESTROY_INPUT = 1
+fftw_plan planner flag.
+An out-of-place transform is allowed to overwrite its input array with arbitrary data. Default value for complex-to-real transform.
-
-
FFTW_PATIENT = 32
+
+
FFTW_PRESERVE_INPUT = 16
+fftw_plan planner flag.
+An out-of-place transform must not change its input array. Default value except for complex-to-real (c2r and hc2r).
-
-
FFTW_ESTIMATE = 64
+
+
FFTW_UNALIGNED = 2
+fftw_plan planner flag.
+The algorithm may not impose any unusual alignment requirements on the input/output arrays.(i.e. no SIMD may be used).
-
-
FFTW_WISDOM_ONLY = 2097152
+
+
FFTW_CONSERVE_MEMORY = 4
@@ -848,6 +507,8 @@ Consts
FFTW_FORWARD = -1
+fftw_plan sign flag.
+Compute a DFT transform.
@@ -855,6 +516,8 @@
Consts
FFTW_BACKWARD = 1
+fftw_plan sign flag.
+Compute an inverse DFT transform.
@@ -874,7 +537,7 @@
Procs
proc fftshift [ T ] ( t : Tensor [ T ] ) : Tensor [ T ]
-
+Common fftshift function
Example:
import arraymancer
let input_tensor = randomTensor [ float64 ] ( 10 , 10 , 10 , 10.0 )
@@ -886,340 +549,310 @@ Procs
proc ifftshift [ T ] ( t : Tensor [ T ] ) : Tensor [ T ]
-
+Common ifftshift function
Example:
import arraymancer
let input_tensor = randomTensor [ float64 ] ( 10 , 10 , 10 , 10.0 )
- var output_tensor = ifftshift ( input_tensor ) Calculate inverse fftshift using circshift
+ var output_tensor = ifftshift ( input_tensor )
-
proc fftw_execute ( p : fftw_plan ) { ... } {. cdecl , importc : "fftw_execute" ,
- dynlib : LibraryName .}
+
proc fftw_execute ( p : fftw_plan ) { ... } {. cdecl , importc : "fftw_execute" ,
+ dynlib : Fftw3Lib .}
-
+Execute a plan
-
-
proc fftw_execute_dft ( p : fftw_plan ; in : ptr fftw_complex ; out : ptr fftw_complex ) { ... } {.
- cdecl , importc : "fftw_execute_dft" , dynlib : LibraryName .}
+
+
proc fftw_execute_dft ( p : fftw_plan ; inptr : ptr Complex64 ; outptr : ptr Complex64 ) { ... } {.
+ cdecl , importc : "fftw_execute_dft" , dynlib : Fftw3Lib .}
-
+Execute a plan with different input / output memory address
-
-
proc fftw_execute_dft ( p : fftw_plan ; input : Tensor [ fftw_complex ] ;
- output : Tensor [ fftw_complex ] ) { ... } {. raises : [ ] , tags : [ ] .}
+
+
proc fftw_execute_dft ( p : fftw_plan ; input : Tensor [ Complex64 ] ;
+ output : Tensor [ Complex64 ] ) { ... } {. raises : [ ] , tags : [ ] .}
-
+Execute an fft using a pre-calculated fftw_plan
Example:
import arraymancer
import fftw3
-
let shape = @ [ 100 , 100 ]
var
dummy_input = newTensor [ Complex64 ] ( shape )
dummy_output = newTensor [ Complex64 ] ( shape )
- var plan : fftw_plan = fftw_plan_dft ( dummy_input , dummy_output , FFTW_FORWARD , FFTW_ESTIMATE )
-
+ var plan : fftw_plan = fftw_plan_dft ( dummy_input , dummy_output , FFTW_FORWARD , FFTW_ESTIMATE )
var inputRe : Tensor [ float64 ] = randomTensor [ float64 ] ( shape , 10.0 )
var inputIm : Tensor [ float64 ] = randomTensor [ float64 ] ( shape , 20.0 )
-
var input = map2_inline ( inputRe , inputIm ) :
complex64 ( x , y )
-
let in_shape = @ ( input . shape )
var output = newTensor [ Complex64 ] ( in_shape )
-
- fftw_execute_dft ( plan , input , output )
+fftw_execute_dft ( plan , input , output )
-
proc fftw_execute_r2r ( p : fftw_plan ; in : ptr cdouble ; out : ptr cdouble ) { ... } {. cdecl ,
- importc : "fftw_execute_r2r" , dynlib : LibraryName .}
+
proc fftw_execute_r2r ( p : fftw_plan ; inptr : ptr cdouble ; outptr : ptr cdouble ) { ... } {.
+ cdecl , importc : "fftw_execute_r2r" , dynlib : Fftw3Lib .}
-
+Execute a plan real-to-real
-
-
proc fftw_execute_dft_r2c ( p : fftw_plan ; in : ptr cdouble ; out : ptr fftw_complex ) { ... } {.
- cdecl , importc : "fftw_execute_dft_r2c" , dynlib : LibraryName .}
+
+
proc fftw_execute_dft_r2c ( p : fftw_plan ; inptr : ptr cdouble ;
+ outptr : ptr Complex64 ) { ... } {. cdecl ,
+ importc : "fftw_execute_dft_r2c" , dynlib : Fftw3Lib .}
-
+Execute a plan real-to-complex
-
-
proc fftw_execute_dft_r2c ( p : fftw_plan ; input : Tensor [ float64 ] ;
- output : Tensor [ fftw_complex ] ) { ... } {. raises : [ ] , tags : [ ] .}
+
+
proc fftw_execute_dft_r2c ( p : fftw_plan ; input : Tensor [ float64 ] ;
+ output : Tensor [ Complex64 ] ) { ... } {. raises : [ ] , tags : [ ] .}
Execute a real-to-complex plan on new Tensor
-
-
proc fftw_execute_dft_c2r ( p : fftw_plan ; in : ptr fftw_complex ; out : ptr cdouble ) { ... } {.
- cdecl , importc : "fftw_execute_dft_c2r" , dynlib : LibraryName .}
+
+
proc fftw_execute_dft_c2r ( p : fftw_plan ; inptr : ptr Complex64 ;
+ outptr : ptr cdouble ) { ... } {. cdecl ,
+ importc : "fftw_execute_dft_c2r" , dynlib : Fftw3Lib .}
-
+Execute a plan complex-to-real
-
-
proc fftw_execute_dft_c2r ( p : fftw_plan ; input : Tensor [ fftw_complex ] ;
+
+proc fftw_execute_dft_c2r ( p : fftw_plan ; input : Tensor [ Complex64 ] ;
output : Tensor [ float64 ] ) { ... } {. raises : [ ] , tags : [ ] .}
Execute a complex-to-real plan on new Tensor
-
-
proc fftw_execute_split_dft ( p : fftw_plan ; ri : ptr cdouble ; ii : ptr cdouble ;
- ro : ptr cdouble ; io : ptr cdouble ) { ... } {. cdecl ,
- importc : "fftw_execute_split_dft" , dynlib : LibraryName .}
+
+
proc fftw_plan_dft ( rank : cint ; n : ptr cint ; inptr : ptr Complex64 ;
+ outptr : ptr Complex64 ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_dft" , dynlib : Fftw3Lib .}
-
-
proc fftw_execute_split_dft_r2c ( p : fftw_plan ; in : ptr cdouble ; ro : ptr cdouble ;
- io : ptr cdouble ) { ... } {. cdecl ,
- importc : "fftw_execute_split_dft_r2c" , dynlib : LibraryName .}
-
-
-
-
-
-
-
proc fftw_execute_split_dft_c2r ( p : fftw_plan ; ri : ptr cdouble ; ii : ptr cdouble ;
- out : ptr cdouble ) { ... } {. cdecl ,
- importc : "fftw_execute_split_dft_c2r" , dynlib : LibraryName .}
-
-
-
-
-
-
-
proc fftw_plan_dft ( rank : cint ; n : ptr cint ; in : ptr fftw_complex ;
- out : ptr fftw_complex ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_dft" , dynlib : LibraryName .}
-
-
-
-
-
-
-
proc fftw_plan_dft ( input : Tensor [ fftw_complex ] ; output : Tensor [ fftw_complex ] ;
- sign : cint ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
+
+proc fftw_plan_dft ( input : Tensor [ Complex64 ] ; output : Tensor [ Complex64 ] ;
+ sign : cint ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
raises : [ ] , tags : [ ] .}
Generic Tensor plan calculation using FFTW_MEASURE as a default fftw flag. Read carefully FFTW documentation about the input / output dimension it will change depending on the transformation.
-
-proc fftw_plan_dft_1d ( n : cint ; in : ptr fftw_complex ; out : ptr fftw_complex ;
- sign : cint ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_dft_1d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_1d ( n : cint ; inptr : ptr Complex64 ; outptr : ptr Complex64 ;
+ sign : cint ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_dft_1d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_1d ( input : Tensor [ fftw_complex ] ; output : Tensor [ fftw_complex ] ;
- sign : cint ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
+
+proc fftw_plan_dft_1d ( input : Tensor [ Complex64 ] ; output : Tensor [ Complex64 ] ;
+ sign : cint ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
raises : [ ] , tags : [ ] .}
1D Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_2d ( n0 : cint ; n1 : cint ; in : ptr fftw_complex ;
- out : ptr fftw_complex ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_dft_2d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_2d ( n0 : cint ; n1 : cint ; inptr : ptr Complex64 ;
+ outptr : ptr Complex64 ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_dft_2d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_2d ( input : Tensor [ fftw_complex ] ; output : Tensor [ fftw_complex ] ;
- sign : cint ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
+
+proc fftw_plan_dft_2d ( input : Tensor [ Complex64 ] ; output : Tensor [ Complex64 ] ;
+ sign : cint ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
raises : [ ] , tags : [ ] .}
2D Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_3d ( n0 : cint ; n1 : cint ; n2 : cint ; in : ptr fftw_complex ;
- out : ptr fftw_complex ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_dft_3d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_3d ( n0 : cint ; n1 : cint ; n2 : cint ; inptr : ptr Complex64 ;
+ outptr : ptr Complex64 ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_dft_3d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_3d ( input : Tensor [ fftw_complex ] ; output : Tensor [ fftw_complex ] ;
- sign : cint ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
+
+proc fftw_plan_dft_3d ( input : Tensor [ Complex64 ] ; output : Tensor [ Complex64 ] ;
+ sign : cint ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
raises : [ ] , tags : [ ] .}
3D Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_r2c ( rank : cint ; n : ptr cint ; in : ptr cdouble ;
- out : ptr fftw_complex ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_dft_r2c" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_r2c ( rank : cint ; n : ptr cint ; inptr : ptr cdouble ;
+ outptr : ptr Complex64 ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_dft_r2c" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_r2c ( input : Tensor [ float64 ] ; output : Tensor [ fftw_complex ] ;
- flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
+
+proc fftw_plan_dft_r2c ( input : Tensor [ float64 ] ; output : Tensor [ Complex64 ] ;
+ flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
tags : [ ] .}
Generic Real-to-Complex Tensor plan calculation using FFTW_MEASURE as a default fftw flag. Read carefully FFTW documentation about the input / output dimension as FFTW does not calculate redundant conjugate value.
-
-proc fftw_plan_dft_r2c_1d ( n : cint ; in : ptr cdouble ; out : ptr fftw_complex ;
- flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_dft_r2c_1d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_r2c_1d ( n : cint ; inptr : ptr cdouble ; outptr : ptr Complex64 ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_dft_r2c_1d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_r2c_1d ( input : Tensor [ float64 ] ; output : Tensor [ fftw_complex ] ;
- flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
+
+proc fftw_plan_dft_r2c_1d ( input : Tensor [ float64 ] ; output : Tensor [ Complex64 ] ;
+ flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
tags : [ ] .}
1D Real-to-Complex Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_r2c_2d ( n0 : cint ; n1 : cint ; in : ptr cdouble ;
- out : ptr fftw_complex ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_dft_r2c_2d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_r2c_2d ( n0 : cint ; n1 : cint ; inptr : ptr cdouble ;
+ outptr : ptr Complex64 ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_dft_r2c_2d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_r2c_2d ( input : Tensor [ float64 ] ; output : Tensor [ fftw_complex ] ;
- flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
+
+proc fftw_plan_dft_r2c_2d ( input : Tensor [ float64 ] ; output : Tensor [ Complex64 ] ;
+ flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
tags : [ ] .}
2D Real-to-Complex Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_r2c_3d ( n0 : cint ; n1 : cint ; n2 : cint ; in : ptr cdouble ;
- out : ptr fftw_complex ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_dft_r2c_3d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_r2c_3d ( n0 : cint ; n1 : cint ; n2 : cint ; inptr : ptr cdouble ;
+ outptr : ptr Complex64 ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_dft_r2c_3d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_r2c_3d ( input : Tensor [ float64 ] ; output : Tensor [ fftw_complex ] ;
- flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
+
+proc fftw_plan_dft_r2c_3d ( input : Tensor [ float64 ] ; output : Tensor [ Complex64 ] ;
+ flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
tags : [ ] .}
3D Real-to-Complex Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_c2r ( rank : cint ; n : ptr cint ; in : ptr fftw_complex ;
- out : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_dft_c2r" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_c2r ( rank : cint ; n : ptr cint ; inptr : ptr Complex64 ;
+ outptr : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_dft_c2r" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_c2r ( input : Tensor [ fftw_complex ] ; output : Tensor [ float64 ] ;
- flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
+
+proc fftw_plan_dft_c2r ( input : Tensor [ Complex64 ] ; output : Tensor [ float64 ] ;
+ flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
tags : [ ] .}
Generic Complex-to-real Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_c2r_1d ( n : cint ; in : ptr fftw_complex ; out : ptr cdouble ;
- flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_dft_c2r_1d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_c2r_1d ( n : cint ; inptr : ptr Complex64 ; outptr : ptr cdouble ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_dft_c2r_1d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_c2r_1d ( input : Tensor [ fftw_complex ] ; output : Tensor [ float64 ] ;
- flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
+
+proc fftw_plan_dft_c2r_1d ( input : Tensor [ Complex64 ] ; output : Tensor [ float64 ] ;
+ flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
tags : [ ] .}
1D Complex-to-real Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_c2r_2d ( n0 : cint ; n1 : cint ; in : ptr fftw_complex ;
- out : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_dft_c2r_2d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_c2r_2d ( n0 : cint ; n1 : cint ; inptr : ptr Complex64 ;
+ outptr : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_dft_c2r_2d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_c2r_2d ( input : Tensor [ fftw_complex ] ; output : Tensor [ float64 ] ;
- flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
+
+proc fftw_plan_dft_c2r_2d ( input : Tensor [ Complex64 ] ; output : Tensor [ float64 ] ;
+ flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
tags : [ ] .}
2D Complex-to-real Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_dft_c2r_3d ( n0 : cint ; n1 : cint ; n2 : cint ; in : ptr fftw_complex ;
- out : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_dft_c2r_3d" , dynlib : LibraryName .}
+
+proc fftw_plan_dft_c2r_3d ( n0 : cint ; n1 : cint ; n2 : cint ; inptr : ptr Complex64 ;
+ outptr : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_dft_c2r_3d" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_dft_c2r_3d ( input : Tensor [ fftw_complex ] ; output : Tensor [ float64 ] ;
- flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
+
+proc fftw_plan_dft_c2r_3d ( input : Tensor [ Complex64 ] ; output : Tensor [ float64 ] ;
+ flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {. raises : [ ] ,
tags : [ ] .}
@@ -1227,9 +860,9 @@ Procs
-proc fftw_plan_r2r ( rank : cint ; n : ptr cint ; in : ptr cdouble ; out : ptr cdouble ;
- kind : ptr fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_r2r" , dynlib : LibraryName .}
+proc fftw_plan_r2r ( rank : cint ; n : ptr cint ; inptr : ptr cdouble ;
+ outptr : ptr cdouble ; kind : ptr fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_r2r" , dynlib : Fftw3Lib .}
@@ -1237,7 +870,7 @@ Procs
proc fftw_plan_r2r ( input : Tensor [ float64 ] ; output : Tensor [ float64 ] ;
- kinds : seq [ fftw_r2r_kind ] ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
+ kinds : seq [ fftw_r2r_kind ] ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
raises : [ ] , tags : [ ] .}
@@ -1245,9 +878,9 @@ Procs
-proc fftw_plan_r2r_1d ( n : cint ; in : ptr cdouble ; out : ptr cdouble ;
- kind : fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_r2r_1d" , dynlib : LibraryName .}
+proc fftw_plan_r2r_1d ( n : cint ; inptr : ptr cdouble ; outptr : ptr cdouble ;
+ kind : fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_r2r_1d" , dynlib : Fftw3Lib .}
@@ -1255,7 +888,7 @@ Procs
proc fftw_plan_r2r_1d ( input : Tensor [ float64 ] ; output : Tensor [ float64 ] ;
- kind : fftw_r2r_kind ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
+ kind : fftw_r2r_kind ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
raises : [ ] , tags : [ ] .}
@@ -1263,9 +896,10 @@ Procs
-proc fftw_plan_r2r_2d ( n0 : cint ; n1 : cint ; in : ptr cdouble ; out : ptr cdouble ;
- kind0 : fftw_r2r_kind ; kind1 : fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_r2r_2d" , dynlib : LibraryName .}
+proc fftw_plan_r2r_2d ( n0 : cint ; n1 : cint ; inptr : ptr cdouble ;
+ outptr : ptr cdouble ; kind0 : fftw_r2r_kind ;
+ kind1 : fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_r2r_2d" , dynlib : Fftw3Lib .}
@@ -1273,7 +907,7 @@ Procs
proc fftw_plan_r2r_2d ( input : Tensor [ float64 ] ; output : Tensor [ float64 ] ;
- kinds : seq [ fftw_r2r_kind ] ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
+ kinds : seq [ fftw_r2r_kind ] ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
raises : [ ] , tags : [ ] .}
@@ -1281,10 +915,10 @@ Procs
-proc fftw_plan_r2r_3d ( n0 : cint ; n1 : cint ; n2 : cint ; in : ptr cdouble ;
- out : ptr cdouble ; kind0 : fftw_r2r_kind ;
- kind1 : fftw_r2r_kind ; kind2 : fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_r2r_3d" , dynlib : LibraryName .}
+proc fftw_plan_r2r_3d ( n0 : cint ; n1 : cint ; n2 : cint ; inptr : ptr cdouble ;
+ outptr : ptr cdouble ; kind0 : fftw_r2r_kind ;
+ kind1 : fftw_r2r_kind ; kind2 : fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_r2r_3d" , dynlib : Fftw3Lib .}
@@ -1292,406 +926,89 @@ Procs
proc fftw_plan_r2r_3d ( input : Tensor [ float64 ] ; output : Tensor [ float64 ] ;
- kinds : seq [ fftw_r2r_kind ] ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
+ kinds : seq [ fftw_r2r_kind ] ; flags : cuint = FFTW_MEASURE ) : fftw_plan { ... } {.
raises : [ ] , tags : [ ] .}
3D real-to-real Tensor plan calculation using FFTW_MEASURE as a default fftw flag.
-
-proc fftw_plan_many_dft ( rank : cint ; n : ptr cint ; howmany : cint ;
- in : ptr fftw_complex ; inembed : ptr cint ; istride : cint ;
- idist : cint ; out : ptr fftw_complex ; onembed : ptr cint ;
- ostride : cint ; odist : cint ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_many_dft" , dynlib : LibraryName .}
+
+proc fftw_plan_many_dft ( rank : cint ; n : ptr cint ; howmany : cint ;
+ inptr : ptr Complex64 ; inembed : ptr cint ; istride : cint ;
+ idist : cint ; outptr : ptr Complex64 ; onembed : ptr cint ;
+ ostride : cint ; odist : cint ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_many_dft" , dynlib : Fftw3Lib .}
-
+Plan mutliple multidimensionnal complex DFTs and extend fftw_plan_dft to compute howmany transforms, each having rank rank and size n. howmany is the (nonnegative) number of transforms to compute. The resulting plan computes howmany transforms, where the input of the k-th transform is at location in+k*idist (in C pointer arithmetic), and its output is at location out+k*odist. Plans obtained in this way can often be faster than calling FFTW multiple times for the individual transforms. The basic fftw_plan_dft interface corresponds to howmany=1 (in which case the dist parameters are ignored).
-
-proc fftw_plan_many_dft_c2r ( rank : cint ; n : ptr cint ; howmany : cint ;
- in : ptr fftw_complex ; inembed : ptr cint ;
- istride : cint ; idist : cint ; out : ptr cdouble ;
+
+proc fftw_plan_many_dft_c2r ( rank : cint ; n : ptr cint ; howmany : cint ;
+ inptr : ptr Complex64 ; inembed : ptr cint ;
+ istride : cint ; idist : cint ; outptr : ptr cdouble ;
onembed : ptr cint ; ostride : cint ; odist : cint ;
- flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_many_dft_c2r" , dynlib : LibraryName .}
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_many_dft_c2r" , dynlib : Fftw3Lib .}
-
-proc fftw_plan_many_dft_r2c ( rank : cint ; n : ptr cint ; howmany : cint ;
- in : ptr cdouble ; inembed : ptr cint ; istride : cint ;
- idist : cint ; out : ptr fftw_complex ;
+
+proc fftw_plan_many_dft_r2c ( rank : cint ; n : ptr cint ; howmany : cint ;
+ inptr : ptr cdouble ; inembed : ptr cint ;
+ istride : cint ; idist : cint ; outptr : ptr Complex64 ;
onembed : ptr cint ; ostride : cint ; odist : cint ;
- flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_many_dft_r2c" , dynlib : LibraryName .}
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_many_dft_r2c" , dynlib : Fftw3Lib .}
-proc fftw_plan_many_r2r ( rank : cint ; n : ptr cint ; howmany : cint ; in : ptr cdouble ;
- inembed : ptr cint ; istride : cint ; idist : cint ;
- out : ptr cdouble ; onembed : ptr cint ; ostride : cint ;
- odist : cint ; kind : ptr fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_many_r2r" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru_dft ( rank : cint ; dims : ptr fftw_iodim ; howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim ; in : ptr fftw_complex ;
- out : ptr fftw_complex ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru_dft" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru_split_dft ( rank : cint ; dims : ptr fftw_iodim ;
- howmany_rank : cint ; howmany_dims : ptr fftw_iodim ;
- ri : ptr cdouble ; ii : ptr cdouble ; ro : ptr cdouble ;
- io : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_guru_split_dft" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru64_dft ( rank : cint ; dims : ptr fftw_iodim64 ;
- howmany_rank : cint ; howmany_dims : ptr fftw_iodim64 ;
- in : ptr fftw_complex ; out : ptr fftw_complex ;
- sign : cint ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_guru64_dft" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru64_split_dft ( rank : cint ; dims : ptr fftw_iodim64 ;
- howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim64 ; ri : ptr cdouble ;
- ii : ptr cdouble ; ro : ptr cdouble ;
- io : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru64_split_dft" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru_dft_r2c ( rank : cint ; dims : ptr fftw_iodim ;
- howmany_rank : cint ; howmany_dims : ptr fftw_iodim ;
- in : ptr cdouble ; out : ptr fftw_complex ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru_dft_r2c" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru_dft_c2r ( rank : cint ; dims : ptr fftw_iodim ;
- howmany_rank : cint ; howmany_dims : ptr fftw_iodim ;
- in : ptr fftw_complex ; out : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru_dft_c2r" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru_split_dft_r2c ( rank : cint ; dims : ptr fftw_iodim ;
- howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim ; in : ptr cdouble ;
- ro : ptr cdouble ; io : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru_split_dft_r2c" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru_split_dft_c2r ( rank : cint ; dims : ptr fftw_iodim ;
- howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim ; ri : ptr cdouble ;
- ii : ptr cdouble ; out : ptr cdouble ;
- flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_guru_split_dft_c2r" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru64_dft_r2c ( rank : cint ; dims : ptr fftw_iodim64 ;
- howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim64 ; in : ptr cdouble ;
- out : ptr fftw_complex ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru64_dft_r2c" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru64_dft_c2r ( rank : cint ; dims : ptr fftw_iodim64 ;
- howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim64 ;
- in : ptr fftw_complex ; out : ptr cdouble ;
- flags : cuint ) : fftw_plan { ... } {. cdecl ,
- importc : "fftw_plan_guru64_dft_c2r" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru64_split_dft_r2c ( rank : cint ; dims : ptr fftw_iodim64 ;
- howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim64 ;
- in : ptr cdouble ; ro : ptr cdouble ;
- io : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru64_split_dft_r2c" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru64_split_dft_c2r ( rank : cint ; dims : ptr fftw_iodim64 ;
- howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim64 ;
- ri : ptr cdouble ; ii : ptr cdouble ;
- out : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru64_split_dft_c2r" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru_r2r ( rank : cint ; dims : ptr fftw_iodim ; howmany_rank : cint ;
- howmany_dims : ptr fftw_iodim ; in : ptr cdouble ;
- out : ptr cdouble ; kind : ptr fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru_r2r" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_plan_guru64_r2r ( rank : cint ; dims : ptr fftw_iodim64 ;
- howmany_rank : cint ; howmany_dims : ptr fftw_iodim64 ;
- in : ptr cdouble ; out : ptr cdouble ;
- kind : ptr fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {.
- cdecl , importc : "fftw_plan_guru64_r2r" , dynlib : LibraryName .}
+proc fftw_plan_many_r2r ( rank : cint ; n : ptr cint ; howmany : cint ;
+ inptr : ptr cdouble ; inembed : ptr cint ; istride : cint ;
+ idist : cint ; outptr : ptr cdouble ; onembed : ptr cint ;
+ ostride : cint ; odist : cint ; kind : ptr fftw_r2r_kind ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_many_r2r" , dynlib : Fftw3Lib .}
-proc fftw_destroy_plan ( p : fftw_plan ) { ... } {. cdecl , importc : "fftw_destroy_plan" ,
- dynlib : LibraryName .}
+proc fftw_destroy_plan ( p : fftw_plan ) { ... } {. cdecl , importc : "fftw_destroy_plan" ,
+ dynlib : Fftw3Lib .}
-
-
-
-
-proc fftw_forget_wisdom ( ) { ... } {. cdecl , importc : "fftw_forget_wisdom" ,
- dynlib : LibraryName .}
-
-
-
+Destroy a plan
-proc fftw_cleanup ( ) { ... } {. cdecl , importc : "fftw_cleanup" , dynlib : LibraryName .}
+proc fftw_cleanup ( ) { ... } {. cdecl , importc : "fftw_cleanup" , dynlib : Fftw3Lib .}
-
+All existing plans become undefined, and you should not attempt to execute them nor to destroy them. You can however create and execute/destroy new plans, in which case FFTW starts accumulating wisdom information again.
proc fftw_set_timelimit ( t : cdouble ) { ... } {. cdecl , importc : "fftw_set_timelimit" ,
- dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_export_wisdom_to_filename ( filename : cstring ) : cint { ... } {. cdecl ,
- importc : "fftw_export_wisdom_to_filename" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_export_wisdom_to_file ( output_file : ptr File ) { ... } {. cdecl ,
- importc : "fftw_export_wisdom_to_file" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_export_wisdom_to_string ( ) : cstring { ... } {. cdecl ,
- importc : "fftw_export_wisdom_to_string" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_export_wisdom ( write_char : fftw_write_char_func ; data : pointer ) { ... } {.
- cdecl , importc : "fftw_export_wisdom" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_import_system_wisdom ( ) : cint { ... } {. cdecl ,
- importc : "fftw_import_system_wisdom" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_import_wisdom_from_filename ( filename : cstring ) : cint { ... } {. cdecl ,
- importc : "fftw_import_wisdom_from_filename" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_import_wisdom_from_file ( input_file : ptr File ) : cint { ... } {. cdecl ,
- importc : "fftw_import_wisdom_from_file" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_import_wisdom_from_string ( input_string : cstring ) : cint { ... } {. cdecl ,
- importc : "fftw_import_wisdom_from_string" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_import_wisdom ( read_char : fftw_read_char_func ; data : pointer ) : cint { ... } {.
- cdecl , importc : "fftw_import_wisdom" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_fprint_plan ( p : fftw_plan ; output_file : ptr File ) { ... } {. cdecl ,
- importc : "fftw_fprint_plan" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_print_plan ( p : fftw_plan ) { ... } {. cdecl , importc : "fftw_print_plan" ,
- dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_sprint_plan ( p : fftw_plan ) : cstring { ... } {. cdecl ,
- importc : "fftw_sprint_plan" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_malloc ( n : csize_t ) : pointer { ... } {. cdecl , importc : "fftw_malloc" ,
- dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_alloc_real ( n : csize_t ) : ptr cdouble { ... } {. cdecl ,
- importc : "fftw_alloc_real" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_alloc_complex ( n : csize_t ) : ptr fftw_complex { ... } {. cdecl ,
- importc : "fftw_alloc_complex" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_free ( p : pointer ) { ... } {. cdecl , importc : "fftw_free" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_flops ( p : fftw_plan ; add : ptr cdouble ; mul : ptr cdouble ;
- fmas : ptr cdouble ) { ... } {. cdecl , importc : "fftw_flops" ,
- dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_estimate_cost ( p : fftw_plan ) : cdouble { ... } {. cdecl ,
- importc : "fftw_estimate_cost" , dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_cost ( p : fftw_plan ) : cdouble { ... } {. cdecl , importc : "fftw_cost" ,
- dynlib : LibraryName .}
-
-
-
-
-
-
-proc fftw_alignment_of ( p : ptr cdouble ) : cint { ... } {. cdecl ,
- importc : "fftw_alignment_of" , dynlib : LibraryName .}
+ dynlib : Fftw3Lib .}
+
+
@@ -1701,7 +1018,7 @@ Procs
- Made with Nim. Generated: 2020-11-05 15:59:44 UTC
+ Made with Nim. Generated: 2020-11-25 11:31:15 UTC
diff --git a/src/htmldocs/fftw3.idx b/src/htmldocs/fftw3.idx
new file mode 100644
index 0000000..8f716af
--- /dev/null
+++ b/src/htmldocs/fftw3.idx
@@ -0,0 +1,66 @@
+Introduction fftw3.html#introduction Introduction
+Examples fftw3.html#examples Examples
+C-Binding low-level example fftw3.html#examples-cminusbinding-lowminuslevel-example C-Binding low-level example
+Arraymancer API example fftw3.html#examples-arraymancer-api-example Arraymancer API example
+Planner flags fftw3.html#planner-flags Planner flags
+FFTW_MEASURE fftw3.html#FFTW_MEASURE fftw3: FFTW_MEASURE
+FFTW_ESTIMATE fftw3.html#FFTW_ESTIMATE fftw3: FFTW_ESTIMATE
+FFTW_PATIENT fftw3.html#FFTW_PATIENT fftw3: FFTW_PATIENT
+FFTW_EXHAUSTIVE fftw3.html#FFTW_EXHAUSTIVE fftw3: FFTW_EXHAUSTIVE
+FFTW_WISDOM_ONLY fftw3.html#FFTW_WISDOM_ONLY fftw3: FFTW_WISDOM_ONLY
+FFTW_DESTROY_INPUT fftw3.html#FFTW_DESTROY_INPUT fftw3: FFTW_DESTROY_INPUT
+FFTW_PRESERVE_INPUT fftw3.html#FFTW_PRESERVE_INPUT fftw3: FFTW_PRESERVE_INPUT
+FFTW_UNALIGNED fftw3.html#FFTW_UNALIGNED fftw3: FFTW_UNALIGNED
+FFTW_CONSERVE_MEMORY fftw3.html#FFTW_CONSERVE_MEMORY fftw3: FFTW_CONSERVE_MEMORY
+FFTW_FORWARD fftw3.html#FFTW_FORWARD fftw3: FFTW_FORWARD
+FFTW_BACKWARD fftw3.html#FFTW_BACKWARD fftw3: FFTW_BACKWARD
+circshift fftw3.html#circshift,Tensor[T],seq[int] fftw3: circshift[T](t: Tensor[T]; shift: seq[int]): Tensor[T]
+fftshift fftw3.html#fftshift,Tensor[T] fftw3: fftshift[T](t: Tensor[T]): Tensor[T]
+ifftshift fftw3.html#ifftshift,Tensor[T] fftw3: ifftshift[T](t: Tensor[T]): Tensor[T]
+fftw_execute fftw3.html#fftw_execute,fftw_plan fftw3: fftw_execute(p: fftw_plan)
+fftw_execute_dft fftw3.html#fftw_execute_dft,fftw_plan,ptr.Complex64,ptr.Complex64 fftw3: fftw_execute_dft(p: fftw_plan; inptr: ptr Complex64; outptr: ptr Complex64)
+fftw_execute_dft fftw3.html#fftw_execute_dft,fftw_plan,Tensor[Complex64],Tensor[Complex64] fftw3: fftw_execute_dft(p: fftw_plan; input: Tensor[Complex64];\n output: Tensor[Complex64])
+fftw_execute_r2r fftw3.html#fftw_execute_r2r,fftw_plan,ptr.cdouble,ptr.cdouble fftw3: fftw_execute_r2r(p: fftw_plan; inptr: ptr cdouble; outptr: ptr cdouble)
+fftw_execute_dft_r2c fftw3.html#fftw_execute_dft_r2c,fftw_plan,ptr.cdouble,ptr.Complex64 fftw3: fftw_execute_dft_r2c(p: fftw_plan; inptr: ptr cdouble; outptr: ptr Complex64)
+fftw_execute_dft_r2c fftw3.html#fftw_execute_dft_r2c,fftw_plan,Tensor[float64],Tensor[Complex64] fftw3: fftw_execute_dft_r2c(p: fftw_plan; input: Tensor[float64];\n output: Tensor[Complex64])
+fftw_execute_dft_c2r fftw3.html#fftw_execute_dft_c2r,fftw_plan,ptr.Complex64,ptr.cdouble fftw3: fftw_execute_dft_c2r(p: fftw_plan; inptr: ptr Complex64; outptr: ptr cdouble)
+fftw_execute_dft_c2r fftw3.html#fftw_execute_dft_c2r,fftw_plan,Tensor[Complex64],Tensor[float64] fftw3: fftw_execute_dft_c2r(p: fftw_plan; input: Tensor[Complex64];\n output: Tensor[float64])
+fftw_plan_dft fftw3.html#fftw_plan_dft,cint,ptr.cint,ptr.Complex64,ptr.Complex64,cint,cuint fftw3: fftw_plan_dft(rank: cint; n: ptr cint; inptr: ptr Complex64;\n outptr: ptr Complex64; sign: cint; flags: cuint): fftw_plan
+fftw_plan_dft fftw3.html#fftw_plan_dft,Tensor[Complex64],Tensor[Complex64],cint,cuint fftw3: fftw_plan_dft(input: Tensor[Complex64]; output: Tensor[Complex64]; sign: cint;\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_1d fftw3.html#fftw_plan_dft_1d,cint,ptr.Complex64,ptr.Complex64,cint,cuint fftw3: fftw_plan_dft_1d(n: cint; inptr: ptr Complex64; outptr: ptr Complex64;\n sign: cint; flags: cuint): fftw_plan
+fftw_plan_dft_1d fftw3.html#fftw_plan_dft_1d,Tensor[Complex64],Tensor[Complex64],cint,cuint fftw3: fftw_plan_dft_1d(input: Tensor[Complex64]; output: Tensor[Complex64];\n sign: cint; flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_2d fftw3.html#fftw_plan_dft_2d,cint,cint,ptr.Complex64,ptr.Complex64,cint,cuint fftw3: fftw_plan_dft_2d(n0: cint; n1: cint; inptr: ptr Complex64;\n outptr: ptr Complex64; sign: cint; flags: cuint): fftw_plan
+fftw_plan_dft_2d fftw3.html#fftw_plan_dft_2d,Tensor[Complex64],Tensor[Complex64],cint,cuint fftw3: fftw_plan_dft_2d(input: Tensor[Complex64]; output: Tensor[Complex64];\n sign: cint; flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_3d fftw3.html#fftw_plan_dft_3d,cint,cint,cint,ptr.Complex64,ptr.Complex64,cint,cuint fftw3: fftw_plan_dft_3d(n0: cint; n1: cint; n2: cint; inptr: ptr Complex64;\n outptr: ptr Complex64; sign: cint; flags: cuint): fftw_plan
+fftw_plan_dft_3d fftw3.html#fftw_plan_dft_3d,Tensor[Complex64],Tensor[Complex64],cint,cuint fftw3: fftw_plan_dft_3d(input: Tensor[Complex64]; output: Tensor[Complex64];\n sign: cint; flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_r2c fftw3.html#fftw_plan_dft_r2c,cint,ptr.cint,ptr.cdouble,ptr.Complex64,cuint fftw3: fftw_plan_dft_r2c(rank: cint; n: ptr cint; inptr: ptr cdouble;\n outptr: ptr Complex64; flags: cuint): fftw_plan
+fftw_plan_dft_r2c fftw3.html#fftw_plan_dft_r2c,Tensor[float64],Tensor[Complex64],cuint fftw3: fftw_plan_dft_r2c(input: Tensor[float64]; output: Tensor[Complex64];\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_r2c_1d fftw3.html#fftw_plan_dft_r2c_1d,cint,ptr.cdouble,ptr.Complex64,cuint fftw3: fftw_plan_dft_r2c_1d(n: cint; inptr: ptr cdouble; outptr: ptr Complex64;\n flags: cuint): fftw_plan
+fftw_plan_dft_r2c_1d fftw3.html#fftw_plan_dft_r2c_1d,Tensor[float64],Tensor[Complex64],cuint fftw3: fftw_plan_dft_r2c_1d(input: Tensor[float64]; output: Tensor[Complex64];\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_r2c_2d fftw3.html#fftw_plan_dft_r2c_2d,cint,cint,ptr.cdouble,ptr.Complex64,cuint fftw3: fftw_plan_dft_r2c_2d(n0: cint; n1: cint; inptr: ptr cdouble;\n outptr: ptr Complex64; flags: cuint): fftw_plan
+fftw_plan_dft_r2c_2d fftw3.html#fftw_plan_dft_r2c_2d,Tensor[float64],Tensor[Complex64],cuint fftw3: fftw_plan_dft_r2c_2d(input: Tensor[float64]; output: Tensor[Complex64];\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_r2c_3d fftw3.html#fftw_plan_dft_r2c_3d,cint,cint,cint,ptr.cdouble,ptr.Complex64,cuint fftw3: fftw_plan_dft_r2c_3d(n0: cint; n1: cint; n2: cint; inptr: ptr cdouble;\n outptr: ptr Complex64; flags: cuint): fftw_plan
+fftw_plan_dft_r2c_3d fftw3.html#fftw_plan_dft_r2c_3d,Tensor[float64],Tensor[Complex64],cuint fftw3: fftw_plan_dft_r2c_3d(input: Tensor[float64]; output: Tensor[Complex64];\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_c2r fftw3.html#fftw_plan_dft_c2r,cint,ptr.cint,ptr.Complex64,ptr.cdouble,cuint fftw3: fftw_plan_dft_c2r(rank: cint; n: ptr cint; inptr: ptr Complex64;\n outptr: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_dft_c2r fftw3.html#fftw_plan_dft_c2r,Tensor[Complex64],Tensor[float64],cuint fftw3: fftw_plan_dft_c2r(input: Tensor[Complex64]; output: Tensor[float64];\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_c2r_1d fftw3.html#fftw_plan_dft_c2r_1d,cint,ptr.Complex64,ptr.cdouble,cuint fftw3: fftw_plan_dft_c2r_1d(n: cint; inptr: ptr Complex64; outptr: ptr cdouble;\n flags: cuint): fftw_plan
+fftw_plan_dft_c2r_1d fftw3.html#fftw_plan_dft_c2r_1d,Tensor[Complex64],Tensor[float64],cuint fftw3: fftw_plan_dft_c2r_1d(input: Tensor[Complex64]; output: Tensor[float64];\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_c2r_2d fftw3.html#fftw_plan_dft_c2r_2d,cint,cint,ptr.Complex64,ptr.cdouble,cuint fftw3: fftw_plan_dft_c2r_2d(n0: cint; n1: cint; inptr: ptr Complex64;\n outptr: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_dft_c2r_2d fftw3.html#fftw_plan_dft_c2r_2d,Tensor[Complex64],Tensor[float64],cuint fftw3: fftw_plan_dft_c2r_2d(input: Tensor[Complex64]; output: Tensor[float64];\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_dft_c2r_3d fftw3.html#fftw_plan_dft_c2r_3d,cint,cint,cint,ptr.Complex64,ptr.cdouble,cuint fftw3: fftw_plan_dft_c2r_3d(n0: cint; n1: cint; n2: cint; inptr: ptr Complex64;\n outptr: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_dft_c2r_3d fftw3.html#fftw_plan_dft_c2r_3d,Tensor[Complex64],Tensor[float64],cuint fftw3: fftw_plan_dft_c2r_3d(input: Tensor[Complex64]; output: Tensor[float64];\n flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_r2r fftw3.html#fftw_plan_r2r,cint,ptr.cint,ptr.cdouble,ptr.cdouble,ptr.fftw_r2r_kind,cuint fftw3: fftw_plan_r2r(rank: cint; n: ptr cint; inptr: ptr cdouble; outptr: ptr cdouble;\n kind: ptr fftw_r2r_kind; flags: cuint): fftw_plan
+fftw_plan_r2r fftw3.html#fftw_plan_r2r,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuint fftw3: fftw_plan_r2r(input: Tensor[float64]; output: Tensor[float64];\n kinds: seq[fftw_r2r_kind]; flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_r2r_1d fftw3.html#fftw_plan_r2r_1d,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,cuint fftw3: fftw_plan_r2r_1d(n: cint; inptr: ptr cdouble; outptr: ptr cdouble;\n kind: fftw_r2r_kind; flags: cuint): fftw_plan
+fftw_plan_r2r_1d fftw3.html#fftw_plan_r2r_1d,Tensor[float64],Tensor[float64],fftw_r2r_kind,cuint fftw3: fftw_plan_r2r_1d(input: Tensor[float64]; output: Tensor[float64];\n kind: fftw_r2r_kind; flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_r2r_2d fftw3.html#fftw_plan_r2r_2d,cint,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,fftw_r2r_kind,cuint fftw3: fftw_plan_r2r_2d(n0: cint; n1: cint; inptr: ptr cdouble; outptr: ptr cdouble;\n kind0: fftw_r2r_kind; kind1: fftw_r2r_kind; flags: cuint): fftw_plan
+fftw_plan_r2r_2d fftw3.html#fftw_plan_r2r_2d,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuint fftw3: fftw_plan_r2r_2d(input: Tensor[float64]; output: Tensor[float64];\n kinds: seq[fftw_r2r_kind]; flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_r2r_3d fftw3.html#fftw_plan_r2r_3d,cint,cint,cint,ptr.cdouble,ptr.cdouble,fftw_r2r_kind,fftw_r2r_kind,fftw_r2r_kind,cuint fftw3: fftw_plan_r2r_3d(n0: cint; n1: cint; n2: cint; inptr: ptr cdouble;\n outptr: ptr cdouble; kind0: fftw_r2r_kind;\n kind1: fftw_r2r_kind; kind2: fftw_r2r_kind; flags: cuint): fftw_plan
+fftw_plan_r2r_3d fftw3.html#fftw_plan_r2r_3d,Tensor[float64],Tensor[float64],seq[fftw_r2r_kind],cuint fftw3: fftw_plan_r2r_3d(input: Tensor[float64]; output: Tensor[float64];\n kinds: seq[fftw_r2r_kind]; flags: cuint = FFTW_MEASURE): fftw_plan
+fftw_plan_many_dft fftw3.html#fftw_plan_many_dft,cint,ptr.cint,cint,ptr.Complex64,ptr.cint,cint,cint,ptr.Complex64,ptr.cint,cint,cint,cint,cuint fftw3: fftw_plan_many_dft(rank: cint; n: ptr cint; howmany: cint; inptr: ptr Complex64;\n inembed: ptr cint; istride: cint; idist: cint;\n outptr: ptr Complex64; onembed: ptr cint; ostride: cint;\n odist: cint; sign: cint; flags: cuint): fftw_plan
+fftw_plan_many_dft_c2r fftw3.html#fftw_plan_many_dft_c2r,cint,ptr.cint,cint,ptr.Complex64,ptr.cint,cint,cint,ptr.cdouble,ptr.cint,cint,cint,cuint fftw3: fftw_plan_many_dft_c2r(rank: cint; n: ptr cint; howmany: cint;\n inptr: ptr Complex64; inembed: ptr cint; istride: cint;\n idist: cint; outptr: ptr cdouble; onembed: ptr cint;\n ostride: cint; odist: cint; flags: cuint): fftw_plan
+fftw_plan_many_dft_r2c fftw3.html#fftw_plan_many_dft_r2c,cint,ptr.cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.Complex64,ptr.cint,cint,cint,cuint fftw3: fftw_plan_many_dft_r2c(rank: cint; n: ptr cint; howmany: cint;\n inptr: ptr cdouble; inembed: ptr cint; istride: cint;\n idist: cint; outptr: ptr Complex64; onembed: ptr cint;\n ostride: cint; odist: cint; flags: cuint): fftw_plan
+fftw_plan_many_r2r fftw3.html#fftw_plan_many_r2r,cint,ptr.cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.cdouble,ptr.cint,cint,cint,ptr.fftw_r2r_kind,cuint fftw3: fftw_plan_many_r2r(rank: cint; n: ptr cint; howmany: cint; inptr: ptr cdouble;\n inembed: ptr cint; istride: cint; idist: cint;\n outptr: ptr cdouble; onembed: ptr cint; ostride: cint;\n odist: cint; kind: ptr fftw_r2r_kind; flags: cuint): fftw_plan
+fftw_destroy_plan fftw3.html#fftw_destroy_plan,fftw_plan fftw3: fftw_destroy_plan(p: fftw_plan)
+fftw_cleanup fftw3.html#fftw_cleanup fftw3: fftw_cleanup()
+fftw_set_timelimit fftw3.html#fftw_set_timelimit,cdouble fftw3: fftw_set_timelimit(t: cdouble)
diff --git a/src/htmldocs/fftw3/guru.html b/src/htmldocs/fftw3/guru.html
new file mode 100644
index 0000000..a66531e
--- /dev/null
+++ b/src/htmldocs/fftw3/guru.html
@@ -0,0 +1,450 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+fftw3/guru
+
+
+
+
+
+
+
+
+
+
+
fftw3/guru
+
+
+
+
+
+ Search:
+
+
+ Group by:
+
+ Section
+ Type
+
+
+
+
+ Imports
+
+
+
+ Procs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
FFTW Guru API for experts who knows what they're doing.
+
+
+
Procs
+
+
+proc fftw_execute_split_dft ( p : fftw_plan ; ri : ptr cdouble ; ii : ptr cdouble ;
+ ro : ptr cdouble ; io : ptr cdouble ) { ... } {. cdecl ,
+ importc : "fftw_execute_split_dft" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_execute_split_dft_r2c ( p : fftw_plan ; inptr : ptr cdouble ;
+ ro : ptr cdouble ; io : ptr cdouble ) { ... } {. cdecl ,
+ importc : "fftw_execute_split_dft_r2c" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_execute_split_dft_c2r ( p : fftw_plan ; ri : ptr cdouble ; ii : ptr cdouble ;
+ outptr : ptr cdouble ) { ... } {. cdecl ,
+ importc : "fftw_execute_split_dft_c2r" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru_dft ( rank : cint ; dims : ptr fftw_iodim ; howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim ; inptr : ptr Complex64 ;
+ outptr : ptr Complex64 ; sign : cint ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_guru_dft" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru_split_dft ( rank : cint ; dims : ptr fftw_iodim ;
+ howmany_rank : cint ; howmany_dims : ptr fftw_iodim ;
+ ri : ptr cdouble ; ii : ptr cdouble ; ro : ptr cdouble ;
+ io : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_guru_split_dft" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru64_dft ( rank : cint ; dims : ptr fftw_iodim64 ;
+ howmany_rank : cint ; howmany_dims : ptr fftw_iodim64 ;
+ inptr : ptr Complex64 ; outptr : ptr Complex64 ;
+ sign : cint ; flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_guru64_dft" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru64_split_dft ( rank : cint ; dims : ptr fftw_iodim64 ;
+ howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim64 ; ri : ptr cdouble ;
+ ii : ptr cdouble ; ro : ptr cdouble ;
+ io : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_guru64_split_dft" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru_dft_r2c ( rank : cint ; dims : ptr fftw_iodim ;
+ howmany_rank : cint ; howmany_dims : ptr fftw_iodim ;
+ inptr : ptr cdouble ; outptr : ptr Complex64 ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_guru_dft_r2c" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru_dft_c2r ( rank : cint ; dims : ptr fftw_iodim ;
+ howmany_rank : cint ; howmany_dims : ptr fftw_iodim ;
+ inptr : ptr Complex64 ; outptr : ptr cdouble ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_guru_dft_c2r" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru_split_dft_r2c ( rank : cint ; dims : ptr fftw_iodim ;
+ howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim ;
+ inptr : ptr cdouble ; ro : ptr cdouble ;
+ io : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_guru_split_dft_r2c" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru_split_dft_c2r ( rank : cint ; dims : ptr fftw_iodim ;
+ howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim ; ri : ptr cdouble ;
+ ii : ptr cdouble ; outptr : ptr cdouble ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_guru_split_dft_c2r" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru64_dft_r2c ( rank : cint ; dims : ptr fftw_iodim64 ;
+ howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim64 ;
+ inptr : ptr cdouble ; outptr : ptr Complex64 ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_guru64_dft_r2c" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru64_dft_c2r ( rank : cint ; dims : ptr fftw_iodim64 ;
+ howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim64 ;
+ inptr : ptr Complex64 ; outptr : ptr cdouble ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_guru64_dft_c2r" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru64_split_dft_r2c ( rank : cint ; dims : ptr fftw_iodim64 ;
+ howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim64 ;
+ inptr : ptr cdouble ; ro : ptr cdouble ;
+ io : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_guru64_split_dft_r2c" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru64_split_dft_c2r ( rank : cint ; dims : ptr fftw_iodim64 ;
+ howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim64 ;
+ ri : ptr cdouble ; ii : ptr cdouble ;
+ outptr : ptr cdouble ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_guru64_split_dft_c2r" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru_r2r ( rank : cint ; dims : ptr fftw_iodim ; howmany_rank : cint ;
+ howmany_dims : ptr fftw_iodim ; inptr : ptr cdouble ;
+ outptr : ptr cdouble ; kind : ptr fftw_r2r_kind ;
+ flags : cuint ) : fftw_plan { ... } {. cdecl ,
+ importc : "fftw_plan_guru_r2r" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_plan_guru64_r2r ( rank : cint ; dims : ptr fftw_iodim64 ;
+ howmany_rank : cint ; howmany_dims : ptr fftw_iodim64 ;
+ inptr : ptr cdouble ; outptr : ptr cdouble ;
+ kind : ptr fftw_r2r_kind ; flags : cuint ) : fftw_plan { ... } {.
+ cdecl , importc : "fftw_plan_guru64_r2r" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Made with Nim. Generated: 2020-11-25 11:31:13 UTC
+
+
+
+
+
+
+
diff --git a/src/htmldocs/fftw3/guru.idx b/src/htmldocs/fftw3/guru.idx
new file mode 100644
index 0000000..28dc200
--- /dev/null
+++ b/src/htmldocs/fftw3/guru.idx
@@ -0,0 +1,17 @@
+fftw_execute_split_dft fftw3/guru.html#fftw_execute_split_dft,fftw_plan,ptr.cdouble,ptr.cdouble,ptr.cdouble,ptr.cdouble guru: fftw_execute_split_dft(p: fftw_plan; ri: ptr cdouble; ii: ptr cdouble;\n ro: ptr cdouble; io: ptr cdouble)
+fftw_execute_split_dft_r2c fftw3/guru.html#fftw_execute_split_dft_r2c,fftw_plan,ptr.cdouble,ptr.cdouble,ptr.cdouble guru: fftw_execute_split_dft_r2c(p: fftw_plan; inptr: ptr cdouble; ro: ptr cdouble;\n io: ptr cdouble)
+fftw_execute_split_dft_c2r fftw3/guru.html#fftw_execute_split_dft_c2r,fftw_plan,ptr.cdouble,ptr.cdouble,ptr.cdouble guru: fftw_execute_split_dft_c2r(p: fftw_plan; ri: ptr cdouble; ii: ptr cdouble;\n outptr: ptr cdouble)
+fftw_plan_guru_dft fftw3/guru.html#fftw_plan_guru_dft,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.Complex64,ptr.Complex64,cint,cuint guru: fftw_plan_guru_dft(rank: cint; dims: ptr fftw_iodim; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim; inptr: ptr Complex64;\n outptr: ptr Complex64; sign: cint; flags: cuint): fftw_plan
+fftw_plan_guru_split_dft fftw3/guru.html#fftw_plan_guru_split_dft,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.cdouble,ptr.cdouble,ptr.cdouble,ptr.cdouble,cuint guru: fftw_plan_guru_split_dft(rank: cint; dims: ptr fftw_iodim; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim; ri: ptr cdouble;\n ii: ptr cdouble; ro: ptr cdouble; io: ptr cdouble;\n flags: cuint): fftw_plan
+fftw_plan_guru64_dft fftw3/guru.html#fftw_plan_guru64_dft,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.Complex64,ptr.Complex64,cint,cuint guru: fftw_plan_guru64_dft(rank: cint; dims: ptr fftw_iodim64; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim64; inptr: ptr Complex64;\n outptr: ptr Complex64; sign: cint; flags: cuint): fftw_plan
+fftw_plan_guru64_split_dft fftw3/guru.html#fftw_plan_guru64_split_dft,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.cdouble,ptr.cdouble,ptr.cdouble,ptr.cdouble,cuint guru: fftw_plan_guru64_split_dft(rank: cint; dims: ptr fftw_iodim64;\n howmany_rank: cint; howmany_dims: ptr fftw_iodim64;\n ri: ptr cdouble; ii: ptr cdouble; ro: ptr cdouble;\n io: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_guru_dft_r2c fftw3/guru.html#fftw_plan_guru_dft_r2c,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.cdouble,ptr.Complex64,cuint guru: fftw_plan_guru_dft_r2c(rank: cint; dims: ptr fftw_iodim; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim; inptr: ptr cdouble;\n outptr: ptr Complex64; flags: cuint): fftw_plan
+fftw_plan_guru_dft_c2r fftw3/guru.html#fftw_plan_guru_dft_c2r,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.Complex64,ptr.cdouble,cuint guru: fftw_plan_guru_dft_c2r(rank: cint; dims: ptr fftw_iodim; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim; inptr: ptr Complex64;\n outptr: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_guru_split_dft_r2c fftw3/guru.html#fftw_plan_guru_split_dft_r2c,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.cdouble,ptr.cdouble,ptr.cdouble,cuint guru: fftw_plan_guru_split_dft_r2c(rank: cint; dims: ptr fftw_iodim;\n howmany_rank: cint; howmany_dims: ptr fftw_iodim;\n inptr: ptr cdouble; ro: ptr cdouble;\n io: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_guru_split_dft_c2r fftw3/guru.html#fftw_plan_guru_split_dft_c2r,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.cdouble,ptr.cdouble,ptr.cdouble,cuint guru: fftw_plan_guru_split_dft_c2r(rank: cint; dims: ptr fftw_iodim;\n howmany_rank: cint; howmany_dims: ptr fftw_iodim;\n ri: ptr cdouble; ii: ptr cdouble;\n outptr: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_guru64_dft_r2c fftw3/guru.html#fftw_plan_guru64_dft_r2c,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.cdouble,ptr.Complex64,cuint guru: fftw_plan_guru64_dft_r2c(rank: cint; dims: ptr fftw_iodim64; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim64; inptr: ptr cdouble;\n outptr: ptr Complex64; flags: cuint): fftw_plan
+fftw_plan_guru64_dft_c2r fftw3/guru.html#fftw_plan_guru64_dft_c2r,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.Complex64,ptr.cdouble,cuint guru: fftw_plan_guru64_dft_c2r(rank: cint; dims: ptr fftw_iodim64; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim64; inptr: ptr Complex64;\n outptr: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_guru64_split_dft_r2c fftw3/guru.html#fftw_plan_guru64_split_dft_r2c,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.cdouble,ptr.cdouble,ptr.cdouble,cuint guru: fftw_plan_guru64_split_dft_r2c(rank: cint; dims: ptr fftw_iodim64;\n howmany_rank: cint;\n howmany_dims: ptr fftw_iodim64;\n inptr: ptr cdouble; ro: ptr cdouble;\n io: ptr cdouble; flags: cuint): fftw_plan
+fftw_plan_guru64_split_dft_c2r fftw3/guru.html#fftw_plan_guru64_split_dft_c2r,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.cdouble,ptr.cdouble,ptr.cdouble,cuint guru: fftw_plan_guru64_split_dft_c2r(rank: cint; dims: ptr fftw_iodim64;\n howmany_rank: cint;\n howmany_dims: ptr fftw_iodim64; ri: ptr cdouble;\n ii: ptr cdouble; outptr: ptr cdouble;\n flags: cuint): fftw_plan
+fftw_plan_guru_r2r fftw3/guru.html#fftw_plan_guru_r2r,cint,ptr.fftw_iodim,cint,ptr.fftw_iodim,ptr.cdouble,ptr.cdouble,ptr.fftw_r2r_kind,cuint guru: fftw_plan_guru_r2r(rank: cint; dims: ptr fftw_iodim; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim; inptr: ptr cdouble;\n outptr: ptr cdouble; kind: ptr fftw_r2r_kind; flags: cuint): fftw_plan
+fftw_plan_guru64_r2r fftw3/guru.html#fftw_plan_guru64_r2r,cint,ptr.fftw_iodim64,cint,ptr.fftw_iodim64,ptr.cdouble,ptr.cdouble,ptr.fftw_r2r_kind,cuint guru: fftw_plan_guru64_r2r(rank: cint; dims: ptr fftw_iodim64; howmany_rank: cint;\n howmany_dims: ptr fftw_iodim64; inptr: ptr cdouble;\n outptr: ptr cdouble; kind: ptr fftw_r2r_kind; flags: cuint): fftw_plan
diff --git a/src/htmldocs/fftw3/libutils.html b/src/htmldocs/fftw3/libutils.html
new file mode 100644
index 0000000..c2580ea
--- /dev/null
+++ b/src/htmldocs/fftw3/libutils.html
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+fftw3/libutils
+
+
+
+
+
+
+
+
+
+
+
fftw3/libutils
+
+
+
+
+
+ Search:
+
+
+ Group by:
+
+ Section
+ Type
+
+
+
+
+
+
+
+
+
Some utility types and functions not directly used to calculate FFT
+
+
Types
+
+
+fftw_r2r_kind = enum
+ FFTW_R2HC = 0 , FFTW_HC2R = 1 , FFTW_DHT = 2 , FFTW_REDFT00 = 3 ,
+ FFTW_REDFT01 = 4 , FFTW_REDFT10 = 5 , FFTW_REDFT11 = 6 , FFTW_RODFT00 = 7 ,
+ FFTW_RODFT01 = 8 , FFTW_RODFT10 = 9 , FFTW_RODFT11 = 10
+
+
+
+
+
+
+fftw_iodim { ... } {. pure .} = object
+ n * : cint
+ ` is ` * : cint
+ os * : cint
+
+
+
+
+
+
+
+ptrdiff_t = clong
+
+
+
+
+
+
+wchar_t = cint
+
+
+
+
+
+
+fftw_iodim64 { ... } {. pure .} = object
+ n * : ptrdiff_t
+ ` is ` * : ptrdiff_t
+ os * : ptrdiff_t
+
+
+
+
+
+
+
+fftw_write_char_func = proc ( c : char ; a3 : pointer ) { ... } {. cdecl .}
+
+
+
+
+
+
+fftw_read_char_func = proc ( a2 : pointer ) : cint { ... } {. cdecl .}
+
+
+
+
+
+
+fftw_plan = pointer
+
+
+
+
+
+
+
+
+
+
+
+
Procs
+
+
+proc fftw_fprint_plan ( p : fftw_plan ; output_file : ptr File ) { ... } {. cdecl ,
+ importc : "fftw_fprint_plan" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_print_plan ( p : fftw_plan ) { ... } {. cdecl , importc : "fftw_print_plan" ,
+ dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_sprint_plan ( p : fftw_plan ) : cstring { ... } {. cdecl ,
+ importc : "fftw_sprint_plan" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_malloc ( n : csize_t ) : pointer { ... } {. cdecl , importc : "fftw_malloc" ,
+ dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_alloc_real ( n : csize_t ) : ptr cdouble { ... } {. cdecl ,
+ importc : "fftw_alloc_real" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_alloc_complex ( n : csize_t ) : ptr fftw_complex { ... } {. cdecl ,
+ importc : "fftw_alloc_complex" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_free ( p : pointer ) { ... } {. cdecl , importc : "fftw_free" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_flops ( p : fftw_plan ; add : ptr cdouble ; mul : ptr cdouble ;
+ fmas : ptr cdouble ) { ... } {. cdecl , importc : "fftw_flops" ,
+ dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_estimate_cost ( p : fftw_plan ) : cdouble { ... } {. cdecl ,
+ importc : "fftw_estimate_cost" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_cost ( p : fftw_plan ) : cdouble { ... } {. cdecl , importc : "fftw_cost" ,
+ dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_alignment_of ( p : ptr cdouble ) : cint { ... } {. cdecl ,
+ importc : "fftw_alignment_of" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Made with Nim. Generated: 2020-11-25 11:31:13 UTC
+
+
+
+
+
+
+
diff --git a/src/htmldocs/fftw3/libutils.idx b/src/htmldocs/fftw3/libutils.idx
new file mode 100644
index 0000000..4703226
--- /dev/null
+++ b/src/htmldocs/fftw3/libutils.idx
@@ -0,0 +1,34 @@
+Fftw3Lib fftw3/libutils.html#Fftw3Lib libutils: Fftw3Lib
+FFTW_R2HC fftw3/libutils.html#FFTW_R2HC fftw_r2r_kind.FFTW_R2HC
+FFTW_HC2R fftw3/libutils.html#FFTW_HC2R fftw_r2r_kind.FFTW_HC2R
+FFTW_DHT fftw3/libutils.html#FFTW_DHT fftw_r2r_kind.FFTW_DHT
+FFTW_REDFT00 fftw3/libutils.html#FFTW_REDFT00 fftw_r2r_kind.FFTW_REDFT00
+FFTW_REDFT01 fftw3/libutils.html#FFTW_REDFT01 fftw_r2r_kind.FFTW_REDFT01
+FFTW_REDFT10 fftw3/libutils.html#FFTW_REDFT10 fftw_r2r_kind.FFTW_REDFT10
+FFTW_REDFT11 fftw3/libutils.html#FFTW_REDFT11 fftw_r2r_kind.FFTW_REDFT11
+FFTW_RODFT00 fftw3/libutils.html#FFTW_RODFT00 fftw_r2r_kind.FFTW_RODFT00
+FFTW_RODFT01 fftw3/libutils.html#FFTW_RODFT01 fftw_r2r_kind.FFTW_RODFT01
+FFTW_RODFT10 fftw3/libutils.html#FFTW_RODFT10 fftw_r2r_kind.FFTW_RODFT10
+FFTW_RODFT11 fftw3/libutils.html#FFTW_RODFT11 fftw_r2r_kind.FFTW_RODFT11
+fftw_r2r_kind fftw3/libutils.html#fftw_r2r_kind libutils: fftw_r2r_kind
+fftw_iodim fftw3/libutils.html#fftw_iodim libutils: fftw_iodim
+ptrdiff_t fftw3/libutils.html#ptrdiff_t libutils: ptrdiff_t
+wchar_t fftw3/libutils.html#wchar_t libutils: wchar_t
+fftw_iodim64 fftw3/libutils.html#fftw_iodim64 libutils: fftw_iodim64
+fftw_write_char_func fftw3/libutils.html#fftw_write_char_func libutils: fftw_write_char_func
+fftw_read_char_func fftw3/libutils.html#fftw_read_char_func libutils: fftw_read_char_func
+fftw_plan fftw3/libutils.html#fftw_plan libutils: fftw_plan
+fftw_fprint_plan fftw3/libutils.html#fftw_fprint_plan,fftw_plan,ptr.File libutils: fftw_fprint_plan(p: fftw_plan; output_file: ptr File)
+fftw_print_plan fftw3/libutils.html#fftw_print_plan,fftw_plan libutils: fftw_print_plan(p: fftw_plan)
+fftw_sprint_plan fftw3/libutils.html#fftw_sprint_plan,fftw_plan libutils: fftw_sprint_plan(p: fftw_plan): cstring
+fftw_malloc fftw3/libutils.html#fftw_malloc,csize_t libutils: fftw_malloc(n: csize_t): pointer
+fftw_alloc_real fftw3/libutils.html#fftw_alloc_real,csize_t libutils: fftw_alloc_real(n: csize_t): ptr cdouble
+fftw_alloc_complex fftw3/libutils.html#fftw_alloc_complex,csize_t libutils: fftw_alloc_complex(n: csize_t): ptr fftw_complex
+fftw_free fftw3/libutils.html#fftw_free,pointer libutils: fftw_free(p: pointer)
+fftw_flops fftw3/libutils.html#fftw_flops,fftw_plan,ptr.cdouble,ptr.cdouble,ptr.cdouble libutils: fftw_flops(p: fftw_plan; add: ptr cdouble; mul: ptr cdouble; fmas: ptr cdouble)
+fftw_estimate_cost fftw3/libutils.html#fftw_estimate_cost,fftw_plan libutils: fftw_estimate_cost(p: fftw_plan): cdouble
+fftw_cost fftw3/libutils.html#fftw_cost,fftw_plan libutils: fftw_cost(p: fftw_plan): cdouble
+fftw_alignment_of fftw3/libutils.html#fftw_alignment_of,ptr.cdouble libutils: fftw_alignment_of(p: ptr cdouble): cint
+fftw_version fftw3/libutils.html#fftw_version libutils: fftw_version
+fftw_cc fftw3/libutils.html#fftw_cc libutils: fftw_cc
+fftw_codelet_optim fftw3/libutils.html#fftw_codelet_optim libutils: fftw_codelet_optim
diff --git a/src/htmldocs/fftw3/wisdom.html b/src/htmldocs/fftw3/wisdom.html
new file mode 100644
index 0000000..76e31cd
--- /dev/null
+++ b/src/htmldocs/fftw3/wisdom.html
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+fftw3/wisdom
+
+
+
+
+
+
+
+
+
+
+
fftw3/wisdom
+
+
+
+
+
+ Search:
+
+
+ Group by:
+
+ Section
+ Type
+
+
+
+
+
+
+
+
+
FFTW Wisdom API for saving and restoring fftw_plan from disk. See Wisdom documentation for more information.
+
+
+
Procs
+
+
+proc fftw_forget_wisdom ( ) { ... } {. cdecl , importc : "fftw_forget_wisdom" ,
+ dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_export_wisdom_to_filename ( filename : cstring ) : cint { ... } {. cdecl ,
+ importc : "fftw_export_wisdom_to_filename" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_export_wisdom_to_file ( output_file : ptr File ) { ... } {. cdecl ,
+ importc : "fftw_export_wisdom_to_file" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_export_wisdom_to_string ( ) : cstring { ... } {. cdecl ,
+ importc : "fftw_export_wisdom_to_string" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_export_wisdom ( write_char : fftw_write_char_func ; data : pointer ) { ... } {.
+ cdecl , importc : "fftw_export_wisdom" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_import_system_wisdom ( ) : cint { ... } {. cdecl ,
+ importc : "fftw_import_system_wisdom" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_import_wisdom_from_filename ( filename : cstring ) : cint { ... } {. cdecl ,
+ importc : "fftw_import_wisdom_from_filename" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_import_wisdom_from_file ( input_file : ptr File ) : cint { ... } {. cdecl ,
+ importc : "fftw_import_wisdom_from_file" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_import_wisdom_from_string ( input_string : cstring ) : cint { ... } {. cdecl ,
+ importc : "fftw_import_wisdom_from_string" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+proc fftw_import_wisdom ( read_char : fftw_read_char_func ; data : pointer ) : cint { ... } {.
+ cdecl , importc : "fftw_import_wisdom" , dynlib : Fftw3Lib .}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Made with Nim. Generated: 2020-11-25 11:31:13 UTC
+
+
+
+
+
+
+
diff --git a/src/htmldocs/fftw3/wisdom.idx b/src/htmldocs/fftw3/wisdom.idx
new file mode 100644
index 0000000..d1c9106
--- /dev/null
+++ b/src/htmldocs/fftw3/wisdom.idx
@@ -0,0 +1,10 @@
+fftw_forget_wisdom fftw3/wisdom.html#fftw_forget_wisdom wisdom: fftw_forget_wisdom()
+fftw_export_wisdom_to_filename fftw3/wisdom.html#fftw_export_wisdom_to_filename,cstring wisdom: fftw_export_wisdom_to_filename(filename: cstring): cint
+fftw_export_wisdom_to_file fftw3/wisdom.html#fftw_export_wisdom_to_file,ptr.File wisdom: fftw_export_wisdom_to_file(output_file: ptr File)
+fftw_export_wisdom_to_string fftw3/wisdom.html#fftw_export_wisdom_to_string wisdom: fftw_export_wisdom_to_string(): cstring
+fftw_export_wisdom fftw3/wisdom.html#fftw_export_wisdom,fftw_write_char_func,pointer wisdom: fftw_export_wisdom(write_char: fftw_write_char_func; data: pointer)
+fftw_import_system_wisdom fftw3/wisdom.html#fftw_import_system_wisdom wisdom: fftw_import_system_wisdom(): cint
+fftw_import_wisdom_from_filename fftw3/wisdom.html#fftw_import_wisdom_from_filename,cstring wisdom: fftw_import_wisdom_from_filename(filename: cstring): cint
+fftw_import_wisdom_from_file fftw3/wisdom.html#fftw_import_wisdom_from_file,ptr.File wisdom: fftw_import_wisdom_from_file(input_file: ptr File): cint
+fftw_import_wisdom_from_string fftw3/wisdom.html#fftw_import_wisdom_from_string,cstring wisdom: fftw_import_wisdom_from_string(input_string: cstring): cint
+fftw_import_wisdom fftw3/wisdom.html#fftw_import_wisdom,fftw_read_char_func,pointer wisdom: fftw_import_wisdom(read_char: fftw_read_char_func; data: pointer): cint
diff --git a/src/htmldocs/theindex.html b/src/htmldocs/theindex.html
new file mode 100644
index 0000000..7cc8eae
--- /dev/null
+++ b/src/htmldocs/theindex.html
@@ -0,0 +1,703 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Index
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/config.nims b/tests/config.nims
index 3bb69f8..4083702 100644
--- a/tests/config.nims
+++ b/tests/config.nims
@@ -1 +1,2 @@
-switch("path", "$projectDir/../src")
\ No newline at end of file
+switch("path", "$projectDir/../src")
+switch("outdir", "tests/bin")
diff --git a/tests/test1.nim b/tests/test1.nim
index fc6d5bd..8b90f1d 100644
--- a/tests/test1.nim
+++ b/tests/test1.nim
@@ -1,18 +1,18 @@
import sugar
-
-import fftw3
-import utils
-
-import arraymancer
-
import random
import times
import system
+import arraymancer
+
+import fftw3
+import fftw3/libutils
+
+import utils
block: # fftw_plan_dft, fftw_execute_dft
let dims = @[4, 3, 2*7-1]
- var randData: Tensor[float64] = randomTensor(dims, 10).astype(float64)
+ var randData: Tensor[float64] = newTensor[float64](dims)
var r = initRand(epochTime().int64)
apply_inline(randData):
diff --git a/tests/utils.nim b/tests/utils.nim
index 72ffc8b..f401542 100644
--- a/tests/utils.nim
+++ b/tests/utils.nim
@@ -1,7 +1,7 @@
import arraymancer
import complex
-const MIN_FLOAT_COMPARAISON = 1e-8
+const MIN_FLOAT_COMPARAISON = 1e-12
proc compare*[T](a: Tensor[T], b:Tensor[T]): bool=
if a.shape != b.shape:
@@ -12,6 +12,5 @@ proc compare*[T](a: Tensor[T], b:Tensor[T]): bool=
let MA = max(abs(a))
let MB = max(abs(b))
let MIN_FLOAT_SCALED_COMPARAISON = MIN_FLOAT_COMPARAISON*(MA+MB)/2
- echo max(diff)
result = max(diff) < MIN_FLOAT_SCALED_COMPARAISON