!      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None 2fft#A plan is an opaque foreign object.fftLogical size of dimensionfft%Stride along dimension in input arrayfft&Stride along dimension in output array fftFrees memory allocated by  fftw_malloc;. Currently, we only need this to free the wisdom string.fftSimple plan executionfft7Plan a real to real transform using the guru interface.fft:Plan a complex to real transform using the guru interface.fft:Plan a real to complex transform using the guru interface.fft=Plan a complex to complex transform using the guru interface.fft7Plan a real to real transform using the guru interface.fft:Plan a complex to real transform using the guru interface.fft:Plan a real to complex transform using the guru interface.fft=Plan a complex to complex transform using the guru interface.-fftCorresponds to the  fftw_iodimc structure. It completely describes the layout of each dimension, before and after the transform.0  !"#$%&'()*+,-./NoneMG0fft&Types of transforms. Used to control .6fftHTuple of transform dimensions and non-transform dimensions of the array.7fftReal to Real transform kinds.Cfft,Determine which direction of DFT to execute.FfftThe Fj type is used to influence the kind of plans which are created. To specify multiple flags, use a bitwise .IfftiOur API is polymorphic over the real data type. FFTW, at least in principle, supports single precision , double precision  and long double CLDouble (presumable?).NfftThis lock must be taken during planning of any transform. The FFTW library is not thread-safe in the planning phase. Thankfully, the lock is not needed during the execute phase.PfftBDefault flag. For most transforms, this is equivalent to setting V and RK. The exceptions are complex to real and half-complex to real transforms.QfftAllows FFTW to overwrite the input array with arbitrary data; this can sometimes allow more efficient algorithms to be employed.wSetting this flag implies that two memory allocations will be done, one for work space, and one for the result. When U is not set, we will be doing two memory allocations anyway, so we set this flag as well (since we don't retain the work array anyway).RfftR specifies that an out-of-place transform must not change its input array. This is ordinarily the default, except for complex to real transforms for which Q/ is the default. In the latter cases, passing R will attempt to use algorithms that do not destroy the input, at the expense of worse performance; for multi-dimensional complex to real transforms, however, no input-preserving algorithms are implemented so the Haskell bindings will set Q1 and do a transform with two memory allocations.SfftInstruct FFTW not to generate a plan which uses SIMD instructions, even if the memory you are planning with is aligned. This should only be needed if you are using the guru interface and want to reuse a plan with memory that may be unaligned (i.e. you constructed the  with ).TfftThe header claims that this flag is documented, but in reality, it is not. I don't know what it does and it is here only for completeness.UfftU specifies that, instead of actual measurements of different algorithms, a simple heuristic is used to pick a (probably sub-optimal) plan quickly. With this flag, the input/output arrays are not overwritten during planning.OThis is the only planner flag for which a single memory allocation is possible.VfftV tells FFTW to find an optimized plan by actually computing several FFTs and measuring their execution time. Depending on your machine, this can take some time (often a few seconds). V! is the default planning option.WfftW is like V, but considers a wider range of algorithms and often produces a "more optimal" plan (especially for large transforms), but at the expense of several times longer planning time (especially for large transforms).XfftX is like W but considers an even wider range of algorithms, including many that we think are unlikely to be fast, to produce the most optimal plan but with a substantially increased planning time.[fft9Verify that a plan is valid. Throws an exception if not.\fft;Confirm that the plan is valid, then execute the transform.]ffttIn-place normalization outside of IO. You must be able to prove that no reference to the original can be retained.^fftNormalized general complex DFT_fft_Normalized general complex to real DFT where the last transformed dimension is logically even.`fft]Normalized general complex to real DFT where the last transformed dimension is logicall odd.afftMulti-dimensional forward DFT.bfftMulti-dimensional inverse DFT.cfft+Multi-dimensional forward DFT of real data.dfftoMulti-dimensional inverse DFT of Hermitian-symmetric data (where only the non-negative frequencies are given).efftMulti-dimensional inverse DFT of Hermitian-symmetric data (where only the non-negative frequencies are given) and the last transformed dimension is logically odd.hfftHMulti-dimensional real to real transform. The result is not normalized.ifftPMulti-dimensional real to half-complex transform. The result is not normalized.jfftPMulti-dimensional half-complex to real transform. The result is not normalized.kfftLMulti-dimensional Discrete Hartley Transform. The result is not normalized.lfft3Multi-dimensional Type 1 discrete cosine transform.mfftPMulti-dimensional Type 2 discrete cosine transform. This is commonly known as the DCT.nfftPMulti-dimensional Type 3 discrete cosine transform. This is commonly known as the, inverse DCT. The result is not normalized.offt3Multi-dimensional Type 4 discrete cosine transform.pfft1Multi-dimensional Type 1 discrete sine transform.qfft1Multi-dimensional Type 2 discrete sine transform.rfft1Multi-dimensional Type 3 discrete sine transform.sfft1Multi-dimensional Type 4 discrete sine transform.tfft1-dimensional complex DFT.ufft/1-dimensional complex inverse DFT. Inverse of t.vfft"1-dimensional real to complex DFT.wfftM1-dimensional complex to real DFT with logically even dimension. Inverse of v.xfftL1-dimensional complex to real DFT with logically odd dimension. Inverse of v.yfft'1-dimensional real to half-complex DFT.zfft41-dimensional half-complex to real DFT. Inverse of y after normalization.{fftL1-dimensional Discrete Hartley Transform. Self-inverse after normalization.|fft/1-dimensional Type 1 discrete cosine transform.}fftK1-dimensional Type 2 discrete cosine transform. This is commonly known as the DCT.~fftK1-dimensional Type 3 discrete cosine transform. This is commonly known as the inverse DCT.fft/1-dimensional Type 4 discrete cosine transform.fft-1-dimensional Type 1 discrete sine transform.fft-1-dimensional Type 2 discrete sine transform.fft-1-dimensional Type 3 discrete sine transform.fft-1-dimensional Type 4 discrete sine transform.fftTry to transform a CArray with only one memory allocation (for the result). If we can find a way to prove that FFTW already has a sufficiently good plan for this transform size and the input will not be overwritten, then we could call have a version of this that does not require U5. Since this is not currently the case, we require U0 to be set. Note that we do not check for the R flag here. This is because the default is to preserve input for all but the C->R and HC->R transforms. Therefore, this function must not be called for those transforms, unless R is set.fftTransform a CArray with two memory allocations. This is entirely safe with all transforms, but it must allocate a temporary array to do the planning in.fftTAll the logic for determining shape of resulting array, and how to do the transform.fftA simple helper.fftA generally useful list utilityfft&Complex to Complex DFT, un-normalized.fftReal to Complex DFT.fftwComplex to Real DFT. The first argument determines whether the last transformed dimension is logically odd or even.  implies the dimension is odd.fftGComplex to Real DFT where last transformed dimension is logically even.fftFComplex to Real DFT where last transformed dimension is logically odd.fftReal to Real transforms.fftQueries the FFTW cache. The K can be written to a file so the wisdom can be reused on a subsequent run.fft'Add wisdom to the FFTW cache. Returns  if it is successful.fft7Tries to import wisdom from a global source, typically etc fftw/wisdom . Returns  if it was successful.fft*Using this instance requires linking with -lfftw3.fft*Using this instance requires linking with -lfftw3f.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !#"$%&'()*+,-./ 7(c) 2008 Jed Brown BSD-style jed@59A2.org experimental non-portableNoneA789:;<=>?@ABCDEQRUVWX^_`abcdehijklmnopqrstuvwxyz{|}~ACDE789:;<=>?@ABQRUVWXtuab^vwxcde_`yz{|}~ijklmnopqrshSafefftTurn the outermost transformed dimension into one for real transformation. It is undefined if there is no transformed dimension.66SafeEHVX6      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~;;fft-0.1.8.7-inplace Math.FFT.Base Math.FFT.FFIMath.FFT Math.FFT.MaskMath.FFT.MaskTFFFTWPlanPlanIODimnIODimisIODimosIODimFFTWKindFFTWSignFFTWFlagc_freec_import_wisdom_systemc_import_wisdom_stringc_export_wisdom_string c_execute_r2rc_execute_dft_c2rc_execute_dft_r2c c_execute_dft c_executec_plan_guru_r2rc_plan_guru_dft_c2rc_plan_guru_dft_r2cc_plan_guru_dftcf_plan_guru_r2rcf_plan_guru_dft_c2rcf_plan_guru_dft_r2ccf_plan_guru_dft c_measurec_destroy_input c_unalignedc_conserve_memory c_exhaustivec_preserve_input c_patient c_estimate c_forward c_backwardc_r2hcc_hc2rc_dht c_redft00 c_redft10 c_redft01 c_redft11 c_rodft00 c_rodft10 c_rodft01 c_rodft11DFTCCRCCRCRORRTSpecKindR2HCHC2RDHTREDFT00REDFT10REDFT01REDFT11RODFT00RODFT01RODFT10RODFT11Sign DFTForward DFTBackwardFlagunFlagFFTWReal plan_guru_dftplan_guru_dft_r2cplan_guru_dft_c2r plan_guru_r2rlockwithLocknullFlag destroyInput preserveInput unalignedconserveMemoryestimatemeasurepatient exhaustiveunSignunKindcheckexecuteunsafeNormalizedftGdftCRGdftCROGdftNidftNdftRCNdftCRNdftCRONfzrdrrdftRRNdftRHNdftHRNdhtNdct1Ndct2Ndct3Ndct4Ndst1Ndst2Ndst3Ndst4NdftidftdftRCdftCRdftCROdftRHdftHRdhtdct1dct2dct3dct4dst1dst2dst3dst4hastransformCArraytransformCArray'dftShape withTSpecadjustdftGUdftRCGdftCRG_dftCRGUdftCROGUdftRRGexportWisdomStringimportWisdomStringimportWisdomSystem$fFFTWRealDouble$fFFTWRealFloat$fEqFlag $fShowFlag $fNumFlag $fBitsFlag$fEqSign $fShowSign$fEqKind $fShowKind$fEqDFT $fShowDFTbase Data.Bits.|.ghc-prim GHC.TypesFloatDoubleOcarray-0.1.6.8-b8dda51c4607100f709ca83d7307d744b58c9fbb251df807e66b369774275083Data.Array.CArray.BaseCArrayunsafeForeignPtrToCArrayTrueGHC.BaseString outermostRealComplexRealMaskioDimNum ioDimStridekeeptrans realTrans<<+><+>>unnest3mask2mask3example<++>