def test_ifft2(self):
     x = random((30, 20)) + 1j * random((30, 20))
     assert_allclose(np.fft.ifft(np.fft.ifft(x, axis=1), axis=0),
                     np.fft.ifft2(x),
                     atol=1e-6)
     assert_allclose(np.fft.ifft2(x) * np.sqrt(30 * 20),
                     np.fft.ifft2(x, norm="ortho"),
                     atol=1e-6)
 def test_identity(self):
     maxlen = 512
     x = random(maxlen) + 1j * random(maxlen)
     # xr = random(maxlen)  # local variable 'xr' is assigned to but never used
     for i in range(1, maxlen):
         assert_allclose(np.fft.ifft(np.fft.fft(x[0:i])),
                         x[0:i],
                         atol=1e-12)
 def test_fftn(self):
     x = random((30, 20, 10)) + 1j * random((30, 20, 10))
     assert_allclose(np.fft.fft(np.fft.fft(np.fft.fft(x, axis=2), axis=1),
                                axis=0),
                     np.fft.fftn(x),
                     atol=1e-6)
     assert_allclose(np.fft.fftn(x) / np.sqrt(30 * 20 * 10),
                     np.fft.fftn(x, norm="ortho"),
                     atol=1e-6)
 def test_ifft(self, norm):
     x = random(30) + 1j * random(30)
     assert_allclose(x,
                     np.fft.ifft(np.fft.fft(x, norm=norm), norm=norm),
                     atol=1e-6)
     # Ensure we get the correct error message
     with pytest.raises(ValueError):
         # ,match='Invalid number of FFT data points'):
         np.fft.ifft([], norm=norm)
 def test_hfft(self):
     x = random(14) + 1j * random(14)
     x_herm = np.concatenate((random(1), x, random(1)))
     # x = np.concatenate((x_herm, x[::-1].conj()))
     x = np.concatenate((x_herm, np.conj(x[::-1])))
     assert_allclose(np.fft.fft(x), np.fft.hfft(x_herm), atol=1e-6)
     assert_allclose(np.fft.hfft(x_herm) / np.sqrt(30),
                     np.fft.hfft(x_herm, norm="ortho"),
                     atol=1e-6)
 def test_irfftn(self):
     x = random((30, 20, 10))
     assert_allclose(x, np.fft.irfftn(np.fft.rfftn(x)), atol=1e-6)
     assert_allclose(x,
                     np.fft.irfftn(np.fft.rfftn(x, norm="ortho"),
                                   norm="ortho"),
                     atol=1e-6)
 def test_irfft(self):
     x = random(30)
     assert_allclose(x, np.fft.irfft(np.fft.rfft(x)), atol=1e-6)
     assert_allclose(x,
                     np.fft.irfft(np.fft.rfft(x, norm="ortho"),
                                  norm="ortho"),
                     atol=1e-6)
 def _test_axes(self, op):
     x = random((30, 20, 10))
     axes = [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1),
             (2, 1, 0)]
     for a in axes:
         op_tr = op(np.transpose(x, a))
         tr_op = np.transpose(op(x, axes=a), a)
         assert_allclose(op_tr, tr_op, atol=1e-6)
 def test_rfft(self):
     x = random(30)
     for n in [x.size, 2 * x.size]:
         for norm in [None, 'ortho']:
             assert_allclose(np.fft.fft(x, n=n, norm=norm)[:(n // 2 + 1)],
                             np.fft.rfft(x, n=n, norm=norm),
                             atol=1e-6)
         assert_allclose(np.fft.rfft(x, n=n) / np.sqrt(n),
                         np.fft.rfft(x, n=n, norm="ortho"),
                         atol=1e-6)
 def test_all_1d_norm_preserving(self):
     # verify that round-trip transforms are norm-preserving
     x = random(30)
     # x_norm = np.linalg.norm(x)
     x_norm = numpy.linalg.norm(x)
     n = x.size * 2
     func_pairs = [
         (np.fft.fft, np.fft.ifft),
         # (np.fft.rfft, np.fft.irfft),
         # hfft: order so the first function takes x.size samples
         #       (necessary for comparison to x_norm above)
         # (np.fft.ihfft, np.fft.hfft),
     ]
     for forw, back in func_pairs:
         for n in [x.size, 2 * x.size]:
             for norm in [None, 'ortho']:
                 tmp = forw(x, n=n, norm=norm)
                 tmp = back(tmp, n=n, norm=norm)
                 assert_allclose(
                     x_norm,
                     # np.linalg.norm(tmp),
                     numpy.linalg.norm(tmp),
                     atol=1e-6)
 def test_fft(self):
     x = random(30) + 1j * random(30)
     assert_allclose(fft1(x), np.fft.fft(x), atol=1e-6)
     assert_allclose(fft1(x) / np.sqrt(30),
                     np.fft.fft(x, norm="ortho"),
                     atol=1e-6)
 def test_dtypes(self, dtype):
     # make sure that all input precisions are accepted and internally
     # converted to 64bit
     # x = random(30).astype(dtype)
     x = random(30).astype(dtype)
     assert_allclose(np.fft.ifft(np.fft.fft(x)), x, atol=1e-6)
 def test_rfftn(self):
     x = random((30, 20, 10))
     assert_allclose(np.fft.fftn(x)[:, :, :6], np.fft.rfftn(x), atol=1e-6)
     assert_allclose(np.fft.rfftn(x) / np.sqrt(30 * 20 * 10),
                     np.fft.rfftn(x, norm="ortho"),
                     atol=1e-6)