code: def _populate_kernel_cache(
      np_type, blocks, dim_x, dim_z, dim_u, max_tpb
  ):
      # Check in np_type is a supported option
      if np_type not in _SUPPORTED_TYPES:
          raise ValueError(
              "Datatype {} not found for Kalman Filter".format(np_type)
          )
  
      if np_type == "float32":
          c_type = "float"
      else:
          c_type = "double"
  
      #     Check CuPy version
      # Update to only check for v8.X in cuSignal 0.16
      # Instantiate the cupy kernel for this type and compile
      specializations = (
          "_cupy_predict<{}, {}, {}, {}, {}>".format(
              c_type, blocks, dim_x, dim_u, max_tpb
          ),
          "_cupy_update<{}, {}, {}, {}, {}>".format(
              c_type, blocks, dim_x, dim_z, max_tpb
          ),
      )
      module = cp.RawModule(
          code=cuda_code_kalman,
          options=(
              "-std=c++11",
              "-fmad=true",
          ),
          name_expressions=specializations,
      )
  
      _cupy_kernel_cache[
          (str(np_type), "predict")
      ] = module.get_function(specializations[0])
  
      _cupy_kernel_cache[
          (str(np_type), "update")
      ] = module.get_function(specializations[1])
  
file_path: cusignal/python/cusignal/estimation/_filters_cuda.py
imports: import cupy
  from ..utils._caches import _cupy_kernel_cache
label_desc: Use image node_id 1 for calling a global function with example usage: _populate_kernel_cache(np_type, blocks, dim_x, dim_z, dim_u, max_tpb) without return types