diff --git a/fftw3.nimble b/fftw3.nimble index cb5ac17..a370131 100644 --- a/fftw3.nimble +++ b/fftw3.nimble @@ -1,6 +1,6 @@ # Package -version = "0.2.5" +version = "0.2.6" author = "rcaillaud" description = "Nim FFTW bindings" license = "LGPL-2.1" @@ -10,4 +10,4 @@ srcDir = "src" # Dependencies requires "nim >= 1.2.0" -requires "arraymancer" +requires "arraymancer >= 0.5.2" diff --git a/doc/fftw3.html b/htmldocs/fftw3.html similarity index 57% rename from doc/fftw3.html rename to htmldocs/fftw3.html index a1fab10..33ba376 100644 --- a/doc/fftw3.html +++ b/htmldocs/fftw3.html @@ -47,21 +47,12 @@ toggleSwitch.addEventListener('change', switchTheme, false); + const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null; + if (currentTheme) { + document.documentElement.setAttribute('data-theme', currentTheme); - if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { - document.documentElement.setAttribute('data-theme', "dark"); - toggleSwitch.checked = true; - } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) { - document.documentElement.setAttribute('data-theme', "light"); - toggleSwitch.checked = false; - } else { - const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null; - if (currentTheme) { - document.documentElement.setAttribute('data-theme', currentTheme); - - if (currentTheme === 'dark') { - toggleSwitch.checked = true; - } + if (currentTheme === 'dark') { + toggleSwitch.checked = true; } } } @@ -83,6 +74,9 @@
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
proc fftshift[T](t: Tensor[T]): Tensor[T]
Example:
+import arraymancer +let input_tensor = randomTensor[float64](10, 10, 10, 10.0) +# output_tensor is the fftshift of input_tensor +var output_tensor = fftshift(input_tensor)Calculate fftshift using circshift
proc ifftshift[T](t: Tensor[T]): Tensor[T]
Example:
+import arraymancer +let input_tensor = randomTensor[float64](10, 10, 10, 10.0) +# output_tensor is the fftshift of input_tensor +var output_tensor = ifftshift(input_tensor)Calculate inverse fftshift using circshift
proc fftw_execute(p: fftw_plan) {...}{.cdecl, importc: "fftw_execute", dynlib: LibraryName.}
proc fftw_execute(p: fftw_plan) {...}{.cdecl, importc: "fftw_execute", + dynlib: LibraryName.}
proc fftw_execute_dft(p: fftw_plan; `in`: ptr fftw_complex; `out`: ptr fftw_complex) {...}{. + proc fftw_execute_dft(p: fftw_plan; in: ptr fftw_complex; out: ptr fftw_complex) {...}{. cdecl, importc: "fftw_execute_dft", dynlib: LibraryName.}- @@ -695,14 +912,39 @@
Procs
- + output: Tensor[fftw_complex]) {...}{.raises: [], tags: [].}
proc fftw_execute_dft(p: fftw_plan; input: Tensor[fftw_complex]; - output: Tensor[fftw_complex]) {...}{.raises: [], tags: [].}
Example:
+import arraymancer +import fftw3 + +let shape = @[100, 100] +# Create dummy tensors +var + dummy_input = newTensor[Complex64](shape) + dummy_output = newTensor[Complex64](shape) +# Use dummy tensor to create plan +var plan : fftw_plan = fftw_plan_dft(dummy_input, dummy_output, FFTW_FORWARD, FFTW_ESTIMATE) + +# Allocate output Tensor +# It is crucial to NOT modify the dimensions of the tensor +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) + +# Execute plan with output_tensor and input_tensor +fftw_execute_dft(plan, input, output) ## Execute a plan on new Tensor
proc fftw_execute_r2r(p: fftw_plan; `in`: ptr cdouble; `out`: ptr cdouble) {...}{.cdecl, + proc fftw_execute_r2r(p: fftw_plan; in: ptr cdouble; out: ptr cdouble) {...}{.cdecl, importc: "fftw_execute_r2r", dynlib: LibraryName.}- @@ -710,7 +952,7 @@
-Procs
proc fftw_execute_dft_r2c(p: fftw_plan; `in`: ptr cdouble; `out`: ptr fftw_complex) {...}{. + proc fftw_execute_dft_r2c(p: fftw_plan; in: ptr cdouble; out: ptr fftw_complex) {...}{. cdecl, importc: "fftw_execute_dft_r2c", dynlib: LibraryName.}- @@ -719,14 +961,14 @@
Procs
- + output: Tensor[fftw_complex]) {...}{.raises: [], tags: [].}
proc fftw_execute_dft_r2c(p: fftw_plan; input: Tensor[float64]; - output: Tensor[fftw_complex]) {...}{.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) {...}{. + proc fftw_execute_dft_c2r(p: fftw_plan; in: ptr fftw_complex; out: ptr cdouble) {...}{. cdecl, importc: "fftw_execute_dft_c2r", dynlib: LibraryName.}- @@ -735,7 +977,7 @@
Procs
- + output: Tensor[float64]) {...}{.raises: [], tags: [].}
proc fftw_execute_dft_c2r(p: fftw_plan; input: Tensor[fftw_complex]; - output: Tensor[float64]) {...}{.raises: [], tags: [].}- Execute a complex-to-real plan on new Tensor @@ -743,7 +985,7 @@
Procs
proc fftw_execute_split_dft(p: fftw_plan; ri: ptr cdouble; ii: ptr cdouble; - ro: ptr cdouble; io: ptr cdouble) {...}{.cdecl, + ro: ptr cdouble; io: ptr cdouble) {...}{.cdecl, importc: "fftw_execute_split_dft", dynlib: LibraryName.}- @@ -751,8 +993,8 @@
-Procs
proc fftw_execute_split_dft_r2c(p: fftw_plan; `in`: ptr cdouble; ro: ptr cdouble; - io: ptr cdouble) {...}{.cdecl, + 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.}- @@ -761,7 +1003,7 @@
Procs
proc fftw_execute_split_dft_c2r(p: fftw_plan; ri: ptr cdouble; ii: ptr cdouble; - `out`: ptr cdouble) {...}{.cdecl, + out: ptr cdouble) {...}{.cdecl, importc: "fftw_execute_split_dft_c2r", dynlib: LibraryName.}- @@ -769,9 +1011,9 @@
-Procs
- +
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(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.}- @@ -779,16 +1021,16 @@
Procs
- + sign: cint; flags: cuint = FFTW_MEASURE): fftw_plan {...}{. + raises: [], tags: [].}
proc fftw_plan_dft(input: Tensor[fftw_complex]; output: Tensor[fftw_complex]; - 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, + 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.}- @@ -797,16 +1039,16 @@
Procs
- + sign: cint; flags: cuint = FFTW_MEASURE): fftw_plan {...}{. + raises: [], tags: [].}
proc fftw_plan_dft_1d(input: Tensor[fftw_complex]; output: Tensor[fftw_complex]; - 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 {...}{. + 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.}- @@ -815,16 +1057,16 @@
Procs
- + sign: cint; flags: cuint = FFTW_MEASURE): fftw_plan {...}{. + raises: [], tags: [].}
proc fftw_plan_dft_2d(input: Tensor[fftw_complex]; output: Tensor[fftw_complex]; - 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 {...}{. + 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.}- @@ -833,16 +1075,16 @@
Procs
- + sign: cint; flags: cuint = FFTW_MEASURE): fftw_plan {...}{. + raises: [], tags: [].}
proc fftw_plan_dft_3d(input: Tensor[fftw_complex]; output: Tensor[fftw_complex]; - 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, + 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.}- @@ -851,15 +1093,16 @@
Procs
- + flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], + tags: [].}
proc fftw_plan_dft_r2c(input: Tensor[float64]; output: Tensor[fftw_complex]; - 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, + 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.}- @@ -868,16 +1111,17 @@
Procs
- + flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], + tags: [].}
proc fftw_plan_dft_r2c_1d(input: Tensor[float64]; output: Tensor[fftw_complex]; - 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; in: ptr cdouble; + out: ptr fftw_complex; flags: cuint): fftw_plan {...}{. + cdecl, importc: "fftw_plan_dft_r2c_2d", dynlib: LibraryName.}- @@ -885,16 +1129,17 @@
Procs
- + flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], + tags: [].}
proc fftw_plan_dft_r2c_2d(input: Tensor[float64]; output: Tensor[fftw_complex]; - flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], tags: [].}
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; 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(input: Tensor[float64]; output: Tensor[fftw_complex]; - flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], tags: [].}
proc fftw_plan_dft_c2r(rank: cint; n: ptr cint; `in`: ptr fftw_complex; - `out`: ptr cdouble; flags: cuint): fftw_plan {...}{.cdecl, + 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.}- @@ -919,15 +1165,16 @@
Procs
- + flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], + tags: [].}
proc fftw_plan_dft_c2r(input: Tensor[fftw_complex]; output: Tensor[float64]; - flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], tags: [].}
proc fftw_plan_dft_c2r_1d(n: cint; `in`: ptr fftw_complex; `out`: ptr cdouble; - flags: cuint): fftw_plan {...}{.cdecl, + 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.}- @@ -936,15 +1183,16 @@
Procs
- + flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], + tags: [].}
proc fftw_plan_dft_c2r_1d(input: Tensor[fftw_complex]; output: Tensor[float64]; - flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], tags: [].}
proc fftw_plan_dft_c2r_2d(n0: cint; n1: cint; `in`: ptr fftw_complex; - `out`: ptr cdouble; flags: cuint): fftw_plan {...}{.cdecl, + 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.}- @@ -953,15 +1201,16 @@
Procs
- + flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], + tags: [].}
proc fftw_plan_dft_c2r_2d(input: Tensor[fftw_complex]; output: Tensor[float64]; - flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], tags: [].}
proc fftw_plan_dft_c2r_3d(n0: cint; n1: cint; n2: cint; `in`: ptr fftw_complex; - `out`: ptr cdouble; flags: cuint): fftw_plan {...}{.cdecl, + 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.}- @@ -970,15 +1219,16 @@
Procs
- + flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], + tags: [].}
proc fftw_plan_dft_c2r_3d(input: Tensor[fftw_complex]; output: Tensor[float64]; - flags: cuint = FFTW_MEASURE): fftw_plan {...}{.raises: [], tags: [].}
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, + 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.}- @@ -987,7 +1237,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: [].}- @@ -995,8 +1245,8 @@
-Procs
proc fftw_plan_r2r_1d(n: cint; `in`: ptr cdouble; `out`: ptr cdouble; - kind: fftw_r2r_kind; flags: cuint): fftw_plan {...}{.cdecl, + 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.}- @@ -1005,7 +1255,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: [].}- @@ -1013,8 +1263,8 @@
-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 {...}{. + 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.}- @@ -1023,7 +1273,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: [].}- @@ -1031,10 +1281,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; 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.}- @@ -1042,7 +1292,7 @@
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: [].}- @@ -1050,11 +1300,11 @@
-Procs
- +
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; + 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.}- @@ -1062,20 +1312,22 @@
Procs
- + in: ptr fftw_complex; inembed: ptr cint; + istride: cint; idist: cint; out: ptr cdouble; + onembed: ptr cint; ostride: cint; odist: cint; + flags: cuint): fftw_plan {...}{.cdecl, + importc: "fftw_plan_many_dft_c2r", dynlib: LibraryName.}
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; onembed: ptr cint; - ostride: cint; odist: cint; flags: cuint): fftw_plan {...}{. - cdecl, importc: "fftw_plan_many_dft_c2r", dynlib: LibraryName.}- -
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; onembed: ptr cint; ostride: cint; - odist: cint; flags: cuint): fftw_plan {...}{.cdecl, + 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; + onembed: ptr cint; ostride: cint; odist: cint; + flags: cuint): fftw_plan {...}{.cdecl, importc: "fftw_plan_many_dft_r2c", dynlib: LibraryName.}- @@ -1083,10 +1335,10 @@
-Procs
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 {...}{. + 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.}- @@ -1095,8 +1347,8 @@
Procs
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 {...}{. + 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.}- @@ -1104,10 +1356,10 @@
-Procs
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, + 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.}- @@ -1115,10 +1367,11 @@
-Procs
- +
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_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.}- @@ -1126,30 +1379,31 @@
Procs
- + 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_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_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_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.}- @@ -1157,10 +1411,10 @@
Procs
- + 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_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.}- @@ -1168,9 +1422,10 @@
Procs
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, + 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.}- @@ -1178,9 +1433,10 @@
-Procs
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 {...}{. + 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.}- @@ -1188,10 +1444,12 @@
-Procs
- +
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_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.}- @@ -1199,11 +1457,11 @@
Procs
- + 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_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.}- @@ -1211,9 +1469,10 @@
Procs
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 {...}{. + 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.}- @@ -1222,8 +1481,8 @@
Procs
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 {...}{. + 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.}- @@ -1231,9 +1490,10 @@
-Procs
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 {...}{. + 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.}- @@ -1242,14 +1502,15 @@
Procs
- + dynlib: LibraryName.}
proc fftw_destroy_plan(p: fftw_plan) {...}{.cdecl, importc: "fftw_destroy_plan", - dynlib: LibraryName.}- -
- +
proc fftw_forget_wisdom() {...}{.cdecl, importc: "fftw_forget_wisdom", dynlib: LibraryName.} proc fftw_forget_wisdom() {...}{.cdecl, importc: "fftw_forget_wisdom", + dynlib: LibraryName.}- @@ -1264,7 +1525,7 @@
Procs
- + dynlib: LibraryName.}
proc fftw_set_timelimit(t: cdouble) {...}{.cdecl, importc: "fftw_set_timelimit", - dynlib: LibraryName.}- @@ -1295,8 +1556,8 @@
-Procs
- +
proc fftw_export_wisdom(write_char: fftw_write_char_func; data: pointer) {...}{.cdecl, - importc: "fftw_export_wisdom", dynlib: LibraryName.} proc fftw_export_wisdom(write_char: fftw_write_char_func; data: pointer) {...}{. + cdecl, importc: "fftw_export_wisdom", dynlib: LibraryName.}- @@ -1304,8 +1565,7 @@
Procs
- + importc: "fftw_import_system_wisdom", dynlib: LibraryName.}
proc fftw_import_system_wisdom(): cint {...}{.cdecl, - importc: "fftw_import_system_wisdom", - dynlib: LibraryName.}- @@ -1336,8 +1596,8 @@
-Procs
- +
proc fftw_import_wisdom(read_char: fftw_read_char_func; data: pointer): cint {...}{.cdecl, - importc: "fftw_import_wisdom", dynlib: LibraryName.} proc fftw_import_wisdom(read_char: fftw_read_char_func; data: pointer): cint {...}{. + cdecl, importc: "fftw_import_wisdom", dynlib: LibraryName.}- @@ -1353,15 +1613,15 @@
Procs
- + 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_sprint_plan(p: fftw_plan): cstring {...}{.cdecl, + importc: "fftw_sprint_plan", dynlib: LibraryName.}
proc fftw_malloc(n: csize): pointer {...}{.cdecl, importc: "fftw_malloc", - 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_flops(p: fftw_plan; add: ptr cdouble; mul: ptr cdouble; + fmas: ptr cdouble) {...}{.cdecl, importc: "fftw_flops", + 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.}
proc fftw_alignment_of(p: ptr cdouble): cint {...}{.cdecl, + importc: "fftw_alignment_of", dynlib: LibraryName.}