class_docstr: Compressed Sparse Column matrix.
  
  This can be instantiated in several ways.
  
  ``csc_matrix(D)``
      ``D`` is a rank-2 :class:`cupy.ndarray`.
  ``csc_matrix(S)``
      ``S`` is another sparse matrix. It is equivalent to ``S.tocsc()``.
  ``csc_matrix((M, N), [dtype])``
      It constructs an empty matrix whose shape is ``(M, N)``. Default dtype
      is float64.
  ``csc_matrix((data, (row, col)))``
      All ``data``, ``row`` and ``col`` are one-dimenaional
      :class:`cupy.ndarray`.
  ``csc_matrix((data, indices, indptr))``
      All ``data``, ``indices`` and ``indptr`` are one-dimenaional
      :class:`cupy.ndarray`.
  
  Args:
      arg1: Arguments for the initializer.
      shape (tuple): Shape of a matrix. Its length must be two.
      dtype: Data type. It must be an argument of :class:`numpy.dtype`.
      copy (bool): If ``True``, copies of given arrays are always used.
  
  .. seealso::
      :class:`scipy.sparse.csc_matrix`
class_docstr_tok: ["Compressed","Sparse","Column","matrix",".","This","can","be","instantiated","in","several","ways",".","``","csc_matrix","(","D",")","``","``","D","``","is","a","rank-2",":","class",":","`","cupy.ndarray","`",".","``","csc_matrix","(","S",")","``","``","S","``","is","another","sparse","matrix",".","It","is","equivalent","to","``","S.tocsc","(",")","``",".","``","csc_matrix","(","(","M",",","N",")",",","[","dtype","]",")","``","It","constructs","an","empty","matrix","whose","shape","is","``","(","M",",","N",")","``",".","Default","dtype","is","float64",".","``","csc_matrix","(","(","data",",","(","row",",","col",")",")",")","``","All","``","data","``",",","``","row","``","and","``","col","``","are","one-dimenaional",":","class",":","`","cupy.ndarray","`",".","``","csc_matrix","(","(","data",",","indices",",","indptr",")",")","``","All","``","data","``",",","``","indices","``","and","``","indptr","``","are","one-dimenaional",":","class",":","`","cupy.ndarray","`",".","Args",":","arg1",":","Arguments","for","the","initializer",".","shape","(","tuple",")",":","Shape","of","a","matrix",".","Its","length","must","be","two",".","dtype",":","Data","type",".","It","must","be","an","argument","of",":","class",":","`","numpy.dtype","`",".","copy","(","bool",")",":","If","``","True","``",",","copies","of","given","arrays","are","always","used",".","..","seealso",":",":",":","class",":","`","scipy.sparse.csc_matrix","`"]
code: def __mul__(self, other):
      from cupyx import cusparse
  
      if cupy.isscalar(other):
          self.sum_duplicates()
          return self._with_data(self.data * other)
      elif cupyx.scipy.sparse.isspmatrix_csr(other):
          self.sum_duplicates()
          other.sum_duplicates()
          if cusparse.check_availability("spgemm"):
              a = self.tocsr()
              a.sum_duplicates()
              return cusparse.spgemm(a, other)
          elif (
              cusparse.check_availability("csrgemm")
              and not runtime.is_hip
          ):
              # trans=True is still buggy as of ROCm 4.2.0
              a = self.T
              return cusparse.csrgemm(a, other, transa=True)
          elif cusparse.check_availability("csrgemm2"):
              a = self.tocsr()
              a.sum_duplicates()
              return cusparse.csrgemm2(a, other)
          else:
              raise AssertionError
      elif isspmatrix_csc(other):
          self.sum_duplicates()
          other.sum_duplicates()
          if (
              cusparse.check_availability("csrgemm")
              and not runtime.is_hip
          ):
              # trans=True is still buggy as of ROCm 4.2.0
              a = self.T
              b = other.T
              return cusparse.csrgemm(a, b, transa=True, transb=True)
          elif cusparse.check_availability("csrgemm2"):
              a = self.tocsr()
              b = other.tocsr()
              a.sum_duplicates()
              b.sum_duplicates()
              return cusparse.csrgemm2(a, b)
          elif cusparse.check_availability("spgemm"):
              a = self.tocsr()
              b = other.tocsr()
              a.sum_duplicates()
              b.sum_duplicates()
              return cusparse.spgemm(a, b)
          else:
              raise AssertionError
      elif cupyx.scipy.sparse.isspmatrix(other):
          return self * other.tocsr()
      elif _base.isdense(other):
          if other.ndim == 0:
              self.sum_duplicates()
              return self._with_data(self.data * other)
          elif other.ndim == 1:
              self.sum_duplicates()
              if cusparse.check_availability("csrmv") and (
                  not runtime.is_hip
                  or driver.get_build_version() >= 5_00_00000
              ):
                  # trans=True is buggy as of ROCm 4.2.0
                  csrmv = cusparse.csrmv
              elif (
                  cusparse.check_availability("spmv")
                  and not runtime.is_hip
              ):
                  # trans=True is buggy as of ROCm 4.2.0
                  # (I got HIPSPARSE_STATUS_INTERNAL_ERROR...)
                  csrmv = cusparse.spmv
              else:
                  raise AssertionError
              return csrmv(
                  self.T, cupy.asfortranarray(other), transa=True
              )
          elif other.ndim == 2:
              self.sum_duplicates()
              if cusparse.check_availability("csrmm2") and (
                  not runtime.is_hip
                  or driver.get_build_version() >= 5_00_00000
              ):
                  # trans=True is buggy as of ROCm 4.2.0
                  csrmm = cusparse.csrmm2
              elif cusparse.check_availability("spmm"):
                  csrmm = cusparse.spmm
              else:
                  raise AssertionError
              return csrmm(
                  self.T, cupy.asfortranarray(other), transa=True
              )
          else:
              raise ValueError("could not interpret dimensions")
      else:
          return NotImplemented
  
imports: import cupy
  from cupy_backends.cuda.api import driver
  from cupy_backends.cuda.api import runtime
  import cupyx.scipy.sparse
  from cupyx.scipy.sparse import _base
  from cupyx.scipy.sparse import _compressed
label_desc: Use image node_id 4 for calling the csc_matrix obj's underlying member method code with example usage: obj.__mul__(other) and returns: self, cusparse, cusparse, cusparse, unknown, cusparse, cusparse, NotImplemented, cusparse, self, csrmv, csrmm