class_docstr: Interface definition for `Op` subclasses compiled by `CLinker`.
class_docstr_tok: ["Interface","definition","for","`","Op","`","subclasses","compiled","by","`","CLinker","`","."]
docstr: Return the C implementation of an ``Op``.
  
  Returns C code that does the computation associated to this ``Op``,
  given names for the inputs and outputs.
  
  Parameters
  ----------
  node : Apply instance
      The node for which we are compiling the current C code.
      The same ``Op`` may be used in more than one node.
  name : str
      A name that is automatically assigned and guaranteed to be
      unique.
  inputs : list of strings
      There is a string for each input of the function, and the
      string is the name of a C variable pointing to that input.
      The type of the variable depends on the declared type of
      the input.  There is a corresponding python variable that
      can be accessed by prepending ``"py_"`` to the name in the
      list.
  outputs : list of strings
      Each string is the name of a C variable where the `Op` should
      store its output.  The type depends on the declared type of
      the output.  There is a corresponding Python variable that
      can be accessed by prepending ``"py_"`` to the name in the
      list.  In some cases the outputs will be preallocated and
      the value of the variable may be pre-filled.  The value for
      an unallocated output is type-dependent.
  sub : dict of strings
      Extra symbols defined in `CLinker` sub symbols (such as ``'fail'``).
code: def c_code(
      self,
      node: Apply,
      name: str,
      inputs: list[str],
      outputs: list[str],
      sub: dict[str, str],
  ) -> str:
      """Return the C implementation of an ``Op``.
  
      Returns C code that does the computation associated to this ``Op``,
      given names for the inputs and outputs.
  
      Parameters
      ----------
      node : Apply instance
          The node for which we are compiling the current C code.
          The same ``Op`` may be used in more than one node.
      name : str
          A name that is automatically assigned and guaranteed to be
          unique.
      inputs : list of strings
          There is a string for each input of the function, and the
          string is the name of a C variable pointing to that input.
          The type of the variable depends on the declared type of
          the input.  There is a corresponding python variable that
          can be accessed by prepending ``"py_"`` to the name in the
          list.
      outputs : list of strings
          Each string is the name of a C variable where the `Op` should
          store its output.  The type depends on the declared type of
          the output.  There is a corresponding Python variable that
          can be accessed by prepending ``"py_"`` to the name in the
          list.  In some cases the outputs will be preallocated and
          the value of the variable may be pre-filled.  The value for
          an unallocated output is type-dependent.
      sub : dict of strings
          Extra symbols defined in `CLinker` sub symbols (such as ``'fail'``).
  
      """
      raise NotImplementedError()
  
imports: import typing
  import warnings
  from abc import abstractmethod
  from typing import Callable, Optional
  from pytensor.graph.basic import Apply, Constant
  from pytensor.graph.utils import MethodNotDefined
label_desc: Use image node_id 1 for calling the CLinkerOp obj's underlying member method code with example usage: obj.c_code(node, name, inputs, outputs, sub) without return types