code: def test_gesvda(self):
      a = cupy.array(self.a)
      u, s, v = cusolver.gesvda(a)
      if a.ndim == 2:
          batch_size = 1
          a = a.reshape((1,) + a.shape)
          u = u.reshape((1,) + u.shape)
          s = s.reshape((1,) + s.shape)
          v = v.reshape((1,) + v.shape)
      else:
          batch_size = a.shape[0]
      for i in range(batch_size):
          sigma = cupy.diag(s[i])
          vh = v[i].T.conjugate()
          aa = cupy.matmul(cupy.matmul(u[i], sigma), vh)
          if self.dtype in (numpy.float32, numpy.complex64):
              decimal = 5
          else:
              decimal = 10
          testing.assert_array_almost_equal(aa, a[i], decimal=decimal)
  
imports: import numpy
  import pytest
  import cupy
  from cupyx import cusolver
  from cupy import testing
  from cupy._core import _routines_linalg
  import cupyx
label_desc: Use image node_id 2 for calling the TestGesvda obj's underlying member method code with example usage: obj.test_gesvda() without return types