class_docstr: CPU correlation implementation using Matrix Multiplication.
  
  Parameters
  ----------
  border_mode
      The width of a border of implicit zeros to pad the
      input with. Must be a tuple with 2 elements giving the numbers of rows
      and columns to pad on each side, or a single integer to pad the same
      on all sides, or a string shortcut setting the padding at runtime:
      ``'valid'`` for ``(0, 0)`` (valid convolution, no padding), ``'full'``
      for ``(kernel_rows - 1, kernel_columns - 1)`` (full convolution),
      ``'half'`` for ``(kernel_rows // 2, kernel_columns // 2)`` (same
      convolution for odd-sized kernels).
      If it is a tuple containing 2 pairs of integers, then these specify
      the padding to be applied on each side ((left, right), (top, bottom)).
      Otherwise, each width is applied twice, once per side (left and right,
      top and bottom).
  subsample
      The subsample operation applied to each output image.
      Should be a tuple with 2 elements.
      `(sv, sh)` is equivalent to `CorrMM(...)(...)[:,:,::sv, ::sh]`,
      but faster.
      Set to `(1, 1)` to disable subsampling.
  filter_dilation
      The filter dilation operation applied to each input image.
      Should be a tuple with 2 elements.
      Set to `(1, 1)` to disable filter dilation.
  num_groups
      Divides the image, kernel and output tensors into num_groups
      separate groups. Each which carry out convolutions separately.
      Should be an integer.
  unshared
      Boolean value. If true, then a different filter will be applied to
      each region of the input image.
code: def c_code(self, node, nodename, inp, out_, sub):
      bottom, weights = inp
      (top,) = out_
      return super().c_code_helper(bottom, weights, top, sub)
  
imports: import logging
  import os
  from typing import Optional
  import pytensor
  from pytensor.configdefaults import config
  from pytensor.graph.basic import Apply
  from pytensor.graph.op import _NoPythonOp
  from pytensor.link.c.op import OpenMPOp
  from pytensor.link.c.params_type import ParamsType
  from pytensor.link.c.type import EnumList
  from pytensor.scalar import int8, int64
  from pytensor.tensor import blas_headers
  from pytensor.tensor.basic import as_tensor_variable
  from pytensor.tensor.blas import blas_header_version, ldflags
  from pytensor.tensor.conv.abstract_conv import get_conv_output_shape
  from pytensor.tensor.type import TensorType
label_desc: Use image node_id 3 for calling the CorrMM obj's underlying member method code with example usage: obj.c_code(node, nodename, inp, out_, sub) and returns: super