code: def shore_matrix_odf(radial_order, zeta, sphere_vertices):
      r"""Compute the SHORE ODF matrix [1]_"
  
      Parameters
      ----------
      radial_order : unsigned int,
          an even integer that represent the order of the basis
      zeta : unsigned int,
          scale factor
      sphere_vertices : array, shape (N,3)
          vertices of the odf sphere
  
      References
      ----------
      .. [1] Merlet S. et al., "Continuous diffusion signal, EAP and
      ODF estimation via Compressive Sensing in diffusion MRI", Medical
      Image Analysis, 2013.
      """
  
      r, theta, phi = cart2sphere(
          sphere_vertices[:, 0],
          sphere_vertices[:, 1],
          sphere_vertices[:, 2],
      )
      theta[np.isnan(theta)] = 0
      F = radial_order / 2
      n_c = int(np.round(1 / 6.0 * (F + 1) * (F + 2) * (4 * F + 3)))
      upsilon = np.zeros((len(sphere_vertices), n_c))
      counter = 0
      for l in range(0, radial_order + 1, 2):
          for n in range(l, int((radial_order + l) / 2) + 1):
              for m in range(-l, l + 1):
                  upsilon[:, counter] = (
                      (-1) ** (n - l / 2.0)
                      * _kappa_odf(zeta, n, l)
                      * hyp2f1(l - n, l / 2.0 + 1.5, l + 1.5, 2.0)
                      * real_sh_descoteaux_from_index(m, l, theta, phi)
                  )
                  counter += 1
  
      return upsilon
  
imports: from warnings import warn
  from math import factorial
  import numpy
  from scipy.special import genlaguerre, gamma, hyp2f1
  from dipy.reconst.cache import Cache
  from dipy.reconst.multi_voxel import multi_voxel_fit
  from dipy.reconst.shm import real_sh_descoteaux_from_index
  from dipy.core.geometry import cart2sphere
  from dipy.utils.optpkg import optional_package
label_desc: Use image node_id 5 for calling a global function with example usage: shore_matrix_odf(radial_order, zeta, sphere_vertices) and returns: upsilon