code: def test_can_use_cub_non_contiguous(self, axis):
      # array is contiguous, but reduce_axis is not
      dim = len(self.shape)
      r_dim = len(axis)
      non_contiguous_axes = [
          i for i in combinations(range(dim), r_dim) if i != axis
      ]
  
      i_shape = self.shape
      for r_axis in non_contiguous_axes:
          o_axis = tuple(i for i in range(dim) if i not in r_axis)
          o_shape = tuple(self.shape[i] for i in o_axis)
          self._test_can_use(
              i_shape, o_shape, r_axis, o_axis, self.order, False
          )
  
imports: from itertools import combinations
  import unittest
  import sys
  import cupy
  from cupy import _environment
  from cupy import testing
  from cupy._core import _accelerator
  from cupy._core import _cub_reduction
  from cupy.cuda import memory
label_desc: Use image node_id 2 for calling the TestSimpleCubReductionKernelContiguity obj's underlying member method code with example usage: obj.test_can_use_cub_non_contiguous(axis) without return types