code: def test_msdki_predict():
      dkiM = msdki.MeanDiffusionKurtosisModel(gtab_3s)
  
      # single voxel
      pred = dkiM.predict(params_single, S0=100)
      assert_array_almost_equal(pred, signal_sph)
  
      # multi-voxel
      pred = dkiM.predict(params_multi, S0=100)
      assert_array_almost_equal(pred[:, :, 0, :], DWI[:, :, 0, :])
  
      # check the function predict of the DiffusionKurtosisFit object
      dkiF = dkiM.fit(signal_sph)
      pred_single = dkiF.predict(gtab_3s, S0=100)
      assert_array_almost_equal(pred_single, signal_sph)
      dkiF = dkiM.fit(DWI)
      pred_multi = dkiF.predict(gtab_3s, S0=100)
      assert_array_almost_equal(pred_multi[:, :, 0, :], DWI[:, :, 0, :])
  
      # No S0
      dkiF = dkiM.fit(signal_sph)
      pred_single = dkiF.predict(gtab_3s)
      assert_array_almost_equal(100 * pred_single, signal_sph)
      dkiF = dkiM.fit(DWI)
      pred_multi = dkiF.predict(gtab_3s)
      assert_array_almost_equal(
          100 * pred_multi[:, :, 0, :], DWI[:, :, 0, :]
      )
  
      # SO volume
      dkiF = dkiM.fit(DWI)
      pred_multi = dkiF.predict(gtab_3s, 100 * np.ones(DWI.shape[:-1]))
      assert_array_almost_equal(pred_multi[:, :, 0, :], DWI[:, :, 0, :])
  
file_path: dipy/dipy/reconst/tests/test_msdki.py
imports: import numpy
  import random
  from numpy.testing import assert_array_almost_equal, assert_raises, assert_almost_equal, assert_
  from dipy.sims.voxel import single_tensor, multi_tensor_dki
  from dipy.io.gradients import read_bvals_bvecs
  from dipy.core.gradients import gradient_table, unique_bvals_magnitude, round_bvals
  from dipy.data import get_fnames
  import dipy.reconst.msdki
  from dipy.reconst.msdki import msk_from_awf, awf_from_msk
label_desc: Use image node_id 3 for calling a global function with example usage: test_msdki_predict() without return types