code: def test_fft2(self):
      x = random((30, 20)) + 1j * random((30, 20))
      assert_allclose(
          np.fft.fft(np.fft.fft(x, axis=1), axis=0),
          np.fft.fft2(x),
          atol=1e-6,
      )
      assert_allclose(
          np.fft.fft2(x), np.fft.fft2(x, norm="backward"), atol=1e-6
      )
      assert_allclose(
          np.fft.fft2(x) / np.sqrt(30 * 20),
          np.fft.fft2(x, norm="ortho"),
          atol=1e-6,
      )
      assert_allclose(
          np.fft.fft2(x) / (30.0 * 20.0),
          np.fft.fft2(x, norm="forward"),
          atol=1e-6,
      )
  
imports: import numpy
  import pytest
  from numpy.random import random
  from numpy.testing import assert_array_equal, assert_raises, assert_allclose, IS_WASM
  import threading
  import queue
label_desc: Use image node_id 4 for calling the TestFFT1D obj's underlying member method code with example usage: obj.test_fft2() without return types