code: def test_fft2(self):
      x = random((30, 20)) + 1j * random((30, 20))
      expect = fft.fft(fft.fft(x, axis=1), axis=0)
      assert_array_almost_equal(expect, fft.fft2(x))
      assert_array_almost_equal(expect, fft.fft2(x, norm="backward"))
      assert_array_almost_equal(
          expect / np.sqrt(30 * 20), fft.fft2(x, norm="ortho")
      )
      assert_array_almost_equal(
          expect / (30 * 20), fft.fft2(x, norm="forward")
      )
  
imports: import queue
  import threading
  import multiprocessing
  import numpy
  import pytest
  from numpy.random import random
  from numpy.testing import assert_array_almost_equal, assert_array_equal, assert_allclose
  from pytest import raises
  import scipy.fft
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