@@ -301,9 +301,6 @@ def ifft2(signal, dim0 = None, dim1 = None , scale = None):
301301
302302 dims = signal .dims ()
303303
304- if (len (dims ) < 2 ):
305- return ifft (signal )
306-
307304 if dim0 is None :
308305 dim0 = dims [0 ]
309306
@@ -359,9 +356,6 @@ def ifft3(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
359356
360357 dims = signal .dims ()
361358
362- if (len (dims ) < 3 ):
363- return ifft2 (signal )
364-
365359 if dim0 is None :
366360 dim0 = dims [0 ]
367361
@@ -379,6 +373,377 @@ def ifft3(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
379373 ct .c_longlong (dim0 ), ct .c_longlong (dim1 ), ct .c_longlong (dim2 )))
380374 return output
381375
376+ def fft_inplace (signal , scale = None ):
377+ """
378+ In-place Fast Fourier Transform: 1D
379+
380+ Parameters
381+ ----------
382+
383+ signal: af.Array
384+ A 1 dimensional signal or a batch of 1 dimensional signals.
385+
386+ scale: optional: scalar. default: None.
387+ - Specifies the scaling factor.
388+ - If None, scale is set to 1.
389+
390+ """
391+
392+ if scale is None :
393+ scale = 1.0
394+
395+ safe_call (backend .get ().af_fft_inplace (signal .arr , ct .c_double (scale )))
396+
397+ def fft2_inplace (signal , scale = None ):
398+ """
399+ In-place Fast Fourier Transform: 2D
400+
401+ Parameters
402+ ----------
403+
404+ signal: af.Array
405+ A 2 dimensional signal or a batch of 2 dimensional signals.
406+
407+ scale: optional: scalar. default: None.
408+ - Specifies the scaling factor.
409+ - If None, scale is set to 1.
410+
411+ """
412+
413+ if scale is None :
414+ scale = 1.0
415+
416+ safe_call (backend .get ().af_fft2_inplace (signal .arr , ct .c_double (scale )))
417+
418+ def fft3_inplace (signal , scale = None ):
419+ """
420+ In-place Fast Fourier Transform: 3D
421+
422+ Parameters
423+ ----------
424+
425+ signal: af.Array
426+ A 3 dimensional signal or a batch of 3 dimensional signals.
427+
428+ scale: optional: scalar. default: None.
429+ - Specifies the scaling factor.
430+ - If None, scale is set to 1.
431+ """
432+
433+ if scale is None :
434+ scale = 1.0
435+
436+ output = Array ()
437+ safe_call (backend .get ().af_fft3_inplace (signal .arr , ct .c_double (scale )))
438+
439+ def ifft_inplace (signal , scale = None ):
440+ """
441+ Inverse In-place Fast Fourier Transform: 1D
442+
443+ Parameters
444+ ----------
445+
446+ signal: af.Array
447+ A 1 dimensional signal or a batch of 1 dimensional signals.
448+
449+ scale: optional: scalar. default: None.
450+ - Specifies the scaling factor.
451+ - If None, scale is set to 1.0 / (signal.dims()[0])
452+ """
453+
454+ if scale is None :
455+ dim0 = signal .dims ()[0 ]
456+ scale = 1.0 / float (dim0 )
457+
458+ safe_call (backend .get ().af_ifft_inplace (signal .arr , ct .c_double (scale )))
459+
460+ def ifft2_inplace (signal , scale = None ):
461+ """
462+ Inverse In-place Fast Fourier Transform: 2D
463+
464+ Parameters
465+ ----------
466+
467+ signal: af.Array
468+ A 2 dimensional signal or a batch of 2 dimensional signals.
469+
470+ scale: optional: scalar. default: None.
471+ - Specifies the scaling factor.
472+ - If None, scale is set to 1.0 / (signal.dims()[0] * signal.dims()[1])
473+ """
474+
475+ dims = signal .dims ()
476+
477+ if scale is None :
478+ dim0 = dims [0 ]
479+ dim1 = dims [1 ]
480+ scale = 1.0 / float (dim0 * dim1 )
481+
482+ safe_call (backend .get ().af_ifft2_inplace (signal .arr , ct .c_double (scale )))
483+
484+ def ifft3_inplace (signal , scale = None ):
485+ """
486+ Inverse In-place Fast Fourier Transform: 3D
487+
488+ Parameters
489+ ----------
490+
491+ signal: af.Array
492+ A 3 dimensional signal or a batch of 3 dimensional signals.
493+
494+ scale: optional: scalar. default: None.
495+ - Specifies the scaling factor.
496+ - If None, scale is set to 1.0 / (signal.dims()[0] * signal.dims()[1] * signal.dims()[2]).
497+ """
498+
499+ dims = signal .dims ()
500+
501+ if scale is None :
502+ dim0 = dims [0 ]
503+ dim1 = dims [1 ]
504+ dim2 = dims [2 ]
505+ scale = 1.0 / float (dim0 * dim1 * dim2 )
506+
507+ safe_call (backend .get ().af_ifft3_inplace (signal .arr , ct .c_double (scale )))
508+
509+ def fft_r2c (signal , dim0 = None , scale = None ):
510+ """
511+ Real to Complex Fast Fourier Transform: 1D
512+
513+ Parameters
514+ ----------
515+
516+ signal: af.Array
517+ A 1 dimensional signal or a batch of 1 dimensional signals.
518+
519+ dim0: optional: int. default: None.
520+ - Specifies the size of the output.
521+ - If None, dim0 is calculated to be the first dimension of `signal`.
522+
523+ scale: optional: scalar. default: None.
524+ - Specifies the scaling factor.
525+ - If None, scale is set to 1.
526+
527+ Returns
528+ -------
529+
530+ output: af.Array
531+ A complex af.Array containing the non-redundant parts of the full FFT.
532+
533+ """
534+
535+ if dim0 is None :
536+ dim0 = 0
537+
538+ if scale is None :
539+ scale = 1.0
540+
541+ output = Array ()
542+ safe_call (backend .get ().af_fft_r2c (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ), ct .c_longlong (dim0 )))
543+ return output
544+
545+ def fft2_r2c (signal , dim0 = None , dim1 = None , scale = None ):
546+ """
547+ Real to Complex Fast Fourier Transform: 2D
548+
549+ Parameters
550+ ----------
551+
552+ signal: af.Array
553+ A 2 dimensional signal or a batch of 2 dimensional signals.
554+
555+ dim0: optional: int. default: None.
556+ - Specifies the size of the output.
557+ - If None, dim0 is calculated to be the first dimension of `signal`.
558+
559+ dim1: optional: int. default: None.
560+ - Specifies the size of the output.
561+ - If None, dim1 is calculated to be the second dimension of `signal`.
562+
563+ scale: optional: scalar. default: None.
564+ - Specifies the scaling factor.
565+ - If None, scale is set to 1.
566+
567+ Returns
568+ -------
569+
570+ output: af.Array
571+ A complex af.Array containing the non-redundant parts of the full FFT.
572+
573+ """
574+ if dim0 is None :
575+ dim0 = 0
576+
577+ if dim1 is None :
578+ dim1 = 0
579+
580+ if scale is None :
581+ scale = 1.0
582+
583+ output = Array ()
584+ safe_call (backend .get ().af_fft2_r2c (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ),
585+ ct .c_longlong (dim0 ), ct .c_longlong (dim1 )))
586+ return output
587+
588+ def fft3_r2c (signal , dim0 = None , dim1 = None , dim2 = None , scale = None ):
589+ """
590+ Real to Complex Fast Fourier Transform: 3D
591+
592+ Parameters
593+ ----------
594+
595+ signal: af.Array
596+ A 3 dimensional signal or a batch of 3 dimensional signals.
597+
598+ dim0: optional: int. default: None.
599+ - Specifies the size of the output.
600+ - If None, dim0 is calculated to be the first dimension of `signal`.
601+
602+ dim1: optional: int. default: None.
603+ - Specifies the size of the output.
604+ - If None, dim1 is calculated to be the second dimension of `signal`.
605+
606+ dim2: optional: int. default: None.
607+ - Specifies the size of the output.
608+ - If None, dim2 is calculated to be the third dimension of `signal`.
609+
610+ scale: optional: scalar. default: None.
611+ - Specifies the scaling factor.
612+ - If None, scale is set to 1.
613+
614+ Returns
615+ -------
616+
617+ output: af.Array
618+ A complex af.Array containing the non-redundant parts of the full FFT.
619+
620+ """
621+ if dim0 is None :
622+ dim0 = 0
623+
624+ if dim1 is None :
625+ dim1 = 0
626+
627+ if dim2 is None :
628+ dim2 = 0
629+
630+ if scale is None :
631+ scale = 1.0
632+
633+ output = Array ()
634+ safe_call (backend .get ().af_fft3_r2c (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ),
635+ ct .c_longlong (dim0 ), ct .c_longlong (dim1 ), ct .c_longlong (dim2 )))
636+ return output
637+
638+ def _get_c2r_dim (dim , is_odd ):
639+ return 2 * (dim - 1 ) + int (is_odd )
640+
641+ def fft_c2r (signal , is_odd = False , scale = None ):
642+ """
643+ Real to Complex Fast Fourier Transform: 1D
644+
645+ Parameters
646+ ----------
647+
648+ signal: af.Array
649+ A 1 dimensional signal or a batch of 1 dimensional signals.
650+
651+ is_odd: optional: Boolean. default: False.
652+ - Specifies if the first dimension of output should be even or odd.
653+
654+ scale: optional: scalar. default: None.
655+ - Specifies the scaling factor.
656+ - If None, scale is set to 1 / (signal.dims()[0]).
657+
658+ Returns
659+ -------
660+
661+ output: af.Array
662+ A real af.Array containing the full output of the fft.
663+
664+ """
665+
666+
667+ if scale is None :
668+ dim0 = _get_c2r_dim (signal .dims ()[0 ], is_odd )
669+ scale = 1.0 / float (dim0 )
670+
671+ output = Array ()
672+ safe_call (backend .get ().af_fft_c2r (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ), is_odd ))
673+ return output
674+
675+ def fft2_c2r (signal , is_odd = False , scale = None ):
676+ """
677+ Real to Complex Fast Fourier Transform: 2D
678+
679+ Parameters
680+ ----------
681+
682+ signal: af.Array
683+ A 2 dimensional signal or a batch of 2 dimensional signals.
684+
685+ is_odd: optional: Boolean. default: False.
686+ - Specifies if the first dimension of output should be even or odd.
687+
688+ scale: optional: scalar. default: None.
689+ - Specifies the scaling factor.
690+ - If None, scale is set to 1 / (signal.dims()[0] * signal.dims()[1]).
691+
692+ Returns
693+ -------
694+
695+ output: af.Array
696+ A real af.Array containing the full output of the fft.
697+
698+ """
699+ dims = signal .dims ()
700+
701+ if scale is None :
702+ dim0 = _get_c2r_dim (dims [0 ], is_odd )
703+ dim1 = dims [1 ]
704+ scale = 1.0 / float (dim0 * dim1 )
705+
706+ output = Array ()
707+ safe_call (backend .get ().af_fft2_c2r (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ), is_odd ))
708+ return output
709+
710+ def fft3_c2r (signal , is_odd = False , scale = None ):
711+ """
712+ Real to Complex Fast Fourier Transform: 3D
713+
714+ Parameters
715+ ----------
716+
717+ signal: af.Array
718+ A 3 dimensional signal or a batch of 3 dimensional signals.
719+
720+ is_odd: optional: Boolean. default: False.
721+ - Specifies if the first dimension of output should be even or odd.
722+
723+ scale: optional: scalar. default: None.
724+ - Specifies the scaling factor.
725+ - If None, scale is set to 1 / (signal.dims()[0] * signal.dims()[1] * signal.dims()[2]).
726+
727+ Returns
728+ -------
729+
730+ output: af.Array
731+ A real af.Array containing the full output of the fft.
732+
733+ """
734+ dims = signal .dims ()
735+
736+ if scale is None :
737+ dim0 = _get_c2r_dim (dims [0 ], is_odd )
738+ dim1 = dims [1 ]
739+ dim2 = dims [2 ]
740+ scale = 1.0 / float (dim0 * dim1 * dim2 )
741+
742+ output = Array ()
743+ safe_call (backend .get ().af_fft3_c2r (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ), is_odd ))
744+ return output
745+
746+
382747def dft (signal , odims = (None , None , None , None ), scale = None ):
383748
384749 """
0 commit comments