code: def test_non_square_infomax():
      """Test non-square infomax."""
      rng = np.random.RandomState(0)
  
      n_samples = 200
      # Generate two sources:
      t = np.linspace(0, 100, n_samples)
      s1 = np.sin(t)
      s2 = np.ceil(np.sin(np.pi * t))
      s = np.c_[s1, s2].T
      center_and_norm(s)
      s1, s2 = s
  
      # Mixing matrix
      n_observed = 6
      mixing = rng.randn(n_observed, 2)
      for add_noise in (False, True):
          m = np.dot(mixing, s)
  
          if add_noise:
              m += 0.1 * rng.randn(n_observed, n_samples)
  
          center_and_norm(m)
          m = m.T
          m = _get_pca(rng).fit_transform(m)
          # we need extended since input signals are sub-gaussian
          unmixing_ = infomax(m, random_state=rng, extended=True)
          s_ = np.dot(unmixing_, m.T)
          # Check that the mixing model described in the docstring holds:
          mixing_ = linalg.pinv(unmixing_.T)
  
          assert_almost_equal(m, s_.T.dot(mixing_))
  
          center_and_norm(s_)
          s1_, s2_ = s_
          # Check to see if the sources have been estimated
          # in the wrong order
          if abs(np.dot(s1_, s2)) > abs(np.dot(s1_, s1)):
              s2_, s1_ = s_
          s1_ *= np.sign(np.dot(s1_, s1))
          s2_ *= np.sign(np.dot(s2_, s2))
  
          # Check that we have estimated the original sources
          if not add_noise:
              assert_almost_equal(
                  np.dot(s1_, s1) / n_samples, 1, decimal=2
              )
              assert_almost_equal(
                  np.dot(s2_, s2) / n_samples, 1, decimal=2
              )
  
file_path: mne-python/mne/preprocessing/tests/test_infomax.py
imports: import numpy
  import pytest
  from numpy.testing import assert_almost_equal
  from scipy import linalg, stats
  from mne.preprocessing.infomax_ import infomax
label_desc: Use image node_id 5 for calling a global function with example usage: test_non_square_infomax() without return types