code: def test_untangent_space_ndarray(metric, rndstate):
      """Test untangent space projection"""
      n_matrices, n_channels = 10, 3
      n_ts = (n_channels * (n_channels + 1)) // 2
      T = rndstate.randn(n_matrices, n_ts)
      X = untangent_space(T, np.eye(n_channels), metric=metric)
      assert X.shape == (n_matrices, n_channels, n_channels)
  
      n_sets = 2
      T_4d = np.asarray([T for _ in range(n_sets)])
      X = untangent_space(T_4d, np.eye(n_channels), metric=metric)
      assert X.shape == (n_sets, n_matrices, n_channels, n_channels)
  
file_path: pyRiemann/tests/test_utils_tangent_space.py
imports: from conftest import get_metrics
  import numpy
  import pytest
  from pytest import approx
  from pyriemann.utils.distance import distance_riemann
  from pyriemann.utils.tangentspace import exp_map_euclid, exp_map_logeuclid, exp_map_riemann, log_map_euclid, log_map_logeuclid, log_map_riemann, upper, unupper, tangent_space, untangent_space, transport
label_desc: Use image node_id 7 for calling a global function with example usage: test_untangent_space_ndarray(metric, rndstate) without return types