code: def test_descending_points(self):
      def value_func_4d(x, y, z, a):
          return 2 * x**3 + 3 * y**2 - z - a
  
      x1 = cp.array([0, 1, 2, 3])
      x2 = cp.array([0, 10, 20, 30])
      x3 = cp.array([0, 10, 20, 30])
      x4 = cp.array([0, 0.1, 0.2, 0.30])
      points = (x1, x2, x3, x4)
      values = value_func_4d(
          *cp.meshgrid(*points, indexing="ij", sparse=True)
      )
      pts = (
          cp.array(0.1),
          cp.array(0.3),
          cp.transpose(cp.linspace(0, 30, 4)),
          cp.linspace(0, 0.3, 4),
      )
      correct_result = interpn(points, values, pts)
  
      x1_descend = x1[::-1]
      x2_descend = x2[::-1]
      x3_descend = x3[::-1]
      x4_descend = x4[::-1]
      points_shuffled = (x1_descend, x2_descend, x3_descend, x4_descend)
      values_shuffled = value_func_4d(
          *cp.meshgrid(*points_shuffled, indexing="ij", sparse=True)
      )
      test_result = interpn(points_shuffled, values_shuffled, pts)
  
      assert_array_equal(correct_result, test_result)
  
imports: import pytest
  import cupy
  from cupy.testing import assert_allclose, assert_array_equal, assert_array_almost_equal
  from cupy_backends.cuda.api import runtime
  from pytest import raises
  from cupyx.scipy.interpolate import RegularGridInterpolator, interpn
label_desc: Use image node_id 14 for calling the TestInterpN obj's underlying member method code with example usage: obj.test_descending_points() and returns: unknown