code: def test_local_csm_properties_csm():
      data = vector()
      indices, indptr, shape = (ivector(), ivector(), ivector())
      mode = get_default_mode()
      mode = mode.including("specialize", "local_csm_properties_csm")
      for CS, cast in [
          (sparse.CSC, sp.sparse.csc_matrix),
          (sparse.CSR, sp.sparse.csr_matrix),
      ]:
          f = pytensor.function(
              [data, indices, indptr, shape],
              sparse.csm_properties(CS(data, indices, indptr, shape)),
              mode=mode,
          )
          assert not any(
              isinstance(node.op, (sparse.CSM, sparse.CSMProperties))
              for node in f.maker.fgraph.toposort()
          )
          v = cast(random_lil((10, 40), config.floatX, 3))
          f(v.data, v.indices, v.indptr, v.shape)
  
imports: import numpy
  import pytest
  import scipy
  import pytensor
  from pytensor import sparse
  from pytensor.compile.mode import Mode, get_default_mode
  from pytensor.configdefaults import config
  from pytensor.sparse.rewriting import SamplingDotCSR, sd_csc
  from pytensor.tensor.basic import as_tensor_variable
  from pytensor.tensor.math import sum
  from pytensor.tensor.type import ivector, matrix, vector
  from tests import unittest_tools
  from tests.sparse.test_basic import random_lil
label_desc: Use image node_id 1 for calling a global function with example usage: test_local_csm_properties_csm() without return types