45
45
46
46
from dpnp .dpnp_utils import *
47
47
from dpnp .fft .dpnp_algo_fft import *
48
+ from enum import Enum
48
49
49
50
50
51
__all__ = [
69
70
]
70
71
71
72
73
+ class Norm (Enum ):
74
+ backward = 0
75
+ forward = 1
76
+ ortho = 2
77
+
78
+ def get_validated_norm (norm ):
79
+ if norm is None or norm == "backward" :
80
+ return Norm .backward
81
+ if norm == "forward" :
82
+ return Norm .forward
83
+ if norm == "ortho" :
84
+ return Norm .ortho
85
+ raise ValueError ("Unknown norm value." )
86
+
87
+
72
88
def fft (x1 , n = None , axis = - 1 , norm = None ):
73
89
"""
74
90
Compute the one-dimensional discrete Fourier Transform.
@@ -86,10 +102,8 @@ def fft(x1, n=None, axis=-1, norm=None):
86
102
87
103
x1_desc = dpnp .get_dpnp_descriptor (x1 )
88
104
if x1_desc :
89
- # if norm is None or norm is 'backward':
90
- # norm_val = 0
91
- # else:
92
- # norm_val = 1
105
+ norm_ = get_validated_norm (norm )
106
+
93
107
if axis is None :
94
108
axis_param = - 1 # the most right dimension (default value)
95
109
else :
@@ -108,9 +122,11 @@ def fft(x1, n=None, axis=-1, norm=None):
108
122
pass
109
123
elif axis != - 1 :
110
124
pass
125
+ elif x1_desc .dtype not in (numpy .complex128 , numpy .complex64 ):
126
+ pass
111
127
else :
112
128
output_boundarie = input_boundarie
113
- return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False , 0 ).get_pyobj ()
129
+ return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False , norm_ . value ).get_pyobj ()
114
130
return call_origin (numpy .fft .fft , x1 , n , axis , norm )
115
131
116
132
@@ -219,6 +235,9 @@ def fftshift(x1, axes=None):
219
235
220
236
x1_desc = dpnp .get_dpnp_descriptor (x1 )
221
237
if x1_desc and 0 :
238
+
239
+ norm_ = Norm .backward
240
+
222
241
if axis is None :
223
242
axis_param = - 1 # the most right dimension (default value)
224
243
else :
@@ -227,7 +246,7 @@ def fftshift(x1, axes=None):
227
246
if x1_desc .size < 1 :
228
247
pass # let fallback to handle exception
229
248
else :
230
- return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False ).get_pyobj ()
249
+ return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False , norm_ . value ).get_pyobj ()
231
250
232
251
return call_origin (numpy .fft .fftshift , x1 , axes )
233
252
@@ -248,6 +267,8 @@ def hfft(x1, n=None, axis=-1, norm=None):
248
267
249
268
x1_desc = dpnp .get_dpnp_descriptor (x1 )
250
269
if x1_desc and 0 :
270
+ norm_ = get_validated_norm (norm )
271
+
251
272
if axis is None :
252
273
axis_param = - 1 # the most right dimension (default value)
253
274
else :
@@ -267,7 +288,7 @@ def hfft(x1, n=None, axis=-1, norm=None):
267
288
else :
268
289
output_boundarie = input_boundarie
269
290
270
- return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False ).get_pyobj ()
291
+ return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False , norm_ . value ).get_pyobj ()
271
292
272
293
return call_origin (numpy .fft .hfft , x1 , n , axis , norm )
273
294
@@ -287,7 +308,9 @@ def ifft(x1, n=None, axis=-1, norm=None):
287
308
"""
288
309
289
310
x1_desc = dpnp .get_dpnp_descriptor (x1 )
290
- if x1_desc :
311
+ if x1_desc and 0 :
312
+ norm_ = get_validated_norm (norm )
313
+
291
314
if axis is None :
292
315
axis_param = - 1 # the most right dimension (default value)
293
316
else :
@@ -307,7 +330,7 @@ def ifft(x1, n=None, axis=-1, norm=None):
307
330
else :
308
331
output_boundarie = input_boundarie
309
332
310
- return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , True ).get_pyobj ()
333
+ return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , True , norm_ . value ).get_pyobj ()
311
334
312
335
return call_origin (numpy .fft .ifft , x1 , n , axis , norm )
313
336
@@ -354,6 +377,9 @@ def ifftshift(x1, axes=None):
354
377
355
378
x1_desc = dpnp .get_dpnp_descriptor (x1 )
356
379
if x1_desc and 0 :
380
+
381
+ norm_ = Norm .backward
382
+
357
383
if axis is None :
358
384
axis_param = - 1 # the most right dimension (default value)
359
385
else :
@@ -362,7 +388,7 @@ def ifftshift(x1, axes=None):
362
388
if x1_desc .size < 1 :
363
389
pass # let fallback to handle exception
364
390
else :
365
- return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False ).get_pyobj ()
391
+ return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False , norm_ . value ).get_pyobj ()
366
392
367
393
return call_origin (numpy .fft .ifftshift , x1 , axes )
368
394
@@ -384,7 +410,7 @@ def ifftn(x1, s=None, axes=None, norm=None):
384
410
"""
385
411
386
412
x1_desc = dpnp .get_dpnp_descriptor (x1 )
387
- if x1_desc :
413
+ if x1_desc and 0 :
388
414
if s is None :
389
415
boundaries = tuple ([x1_desc .shape [i ] for i in range (x1_desc .ndim )])
390
416
else :
@@ -432,6 +458,8 @@ def ihfft(x1, n=None, axis=-1, norm=None):
432
458
433
459
x1_desc = dpnp .get_dpnp_descriptor (x1 )
434
460
if x1_desc and 0 :
461
+ norm_ = get_validated_norm (norm )
462
+
435
463
if axis is None :
436
464
axis_param = - 1 # the most right dimension (default value)
437
465
else :
@@ -451,7 +479,7 @@ def ihfft(x1, n=None, axis=-1, norm=None):
451
479
else :
452
480
output_boundarie = input_boundarie
453
481
454
- return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False ).get_pyobj ()
482
+ return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False , norm_ . value ).get_pyobj ()
455
483
456
484
return call_origin (numpy .fft .ihfft , x1 , n , axis , norm )
457
485
@@ -472,6 +500,8 @@ def irfft(x1, n=None, axis=-1, norm=None):
472
500
473
501
x1_desc = dpnp .get_dpnp_descriptor (x1 )
474
502
if x1_desc and 0 :
503
+ norm_ = get_validated_norm (norm )
504
+
475
505
if axis is None :
476
506
axis_param = - 1 # the most right dimension (default value)
477
507
else :
@@ -491,7 +521,7 @@ def irfft(x1, n=None, axis=-1, norm=None):
491
521
else :
492
522
output_boundarie = 2 * (input_boundarie - 1 )
493
523
494
- result = dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , True ).get_pyobj ()
524
+ result = dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , True , norm_ . value ).get_pyobj ()
495
525
# TODO tmp = utils.create_output_array(result_shape, result_c_type, out)
496
526
# tmp = dparray(result.shape, dtype=dpnp.float64)
497
527
# for it in range(tmp.size):
@@ -592,6 +622,8 @@ def rfft(x1, n=None, axis=-1, norm=None):
592
622
593
623
x1_desc = dpnp .get_dpnp_descriptor (x1 )
594
624
if x1_desc :
625
+ norm_ = get_validated_norm (norm )
626
+
595
627
if axis is None :
596
628
axis_param = - 1 # the most right dimension (default value)
597
629
else :
@@ -608,10 +640,14 @@ def rfft(x1, n=None, axis=-1, norm=None):
608
640
pass # let fallback to handle exception
609
641
elif norm is not None :
610
642
pass
643
+ elif x1_desc .ndim > 1 :
644
+ pass
645
+ elif x1_desc .dtype not in (numpy .complex128 , numpy .complex64 ):
646
+ pass
611
647
else :
612
648
output_boundarie = input_boundarie // 2 + 1 # rfft specific requirenment
613
649
614
- return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False ).get_pyobj ()
650
+ return dpnp_fft (x1_desc , input_boundarie , output_boundarie , axis_param , False , norm_ . value ).get_pyobj ()
615
651
616
652
return call_origin (numpy .fft .rfft , x1 , n , axis , norm )
617
653
@@ -674,7 +710,7 @@ def rfftn(x1, s=None, axes=None, norm=None):
674
710
"""
675
711
676
712
x1_desc = dpnp .get_dpnp_descriptor (x1 )
677
- if x1_desc :
713
+ if x1_desc and 0 :
678
714
if s is None :
679
715
boundaries = tuple ([x1_desc .shape [i ] for i in range (x1_desc .ndim )])
680
716
else :
0 commit comments