code: def test_elastic_GCV_CV(radial_order=4, time_order=2, rng=None):
      gtab_4d = generate_gtab4D()
      l1, l2, l3 = [0.0015, 0.0003, 0.0003]
      S = generate_signal_crossing(gtab_4d, l1, l2, l3)
      S_noise = add_noise(S, S0=1.0, snr=10, rng=rng)
      qtdmri_mod_elastic = qtdmri.QtdmriModel(
          gtab_4d,
          radial_order=radial_order,
          time_order=time_order,
          l1_regularization=True,
          l1_weighting="CV",
          laplacian_regularization=True,
          laplacian_weighting="GCV",
      )
      qtdmri_fit_noise = qtdmri_mod_elastic.fit(S_noise)
      assert_(qtdmri_fit_noise.lopt >= 0)
      assert_(qtdmri_fit_noise.alpha >= 0)
  
imports: import warnings
  import numpy
  import scipy.integrate
  from numpy.testing import assert_, assert_almost_equal, assert_array_almost_equal, assert_equal, assert_raises
  import pytest
  from dipy.core.gradients import gradient_table_from_qvals_bvecs
  from dipy.data import get_gtab_taiwan_dsi, get_sphere
  from dipy.reconst import qtdmri, mapmri
  from dipy.reconst.shm import descoteaux07_legacy_msg
  from dipy.sims.voxel import multi_tensor, add_noise
  from dipy.testing.decorators import set_random_number_generator
label_desc: Use image node_id 20 for calling a global function with example usage: test_elastic_GCV_CV(radial_order, time_order, rng) without return types