class_docstr: A class that models and constructs operations in a graph.
  
  A `Op` instance has several responsibilities:
  
  * construct `Apply` nodes via :meth:`Op.make_node` method,
  * perform the numeric calculation of the modeled operation via the
    :meth:`Op.perform` method,
  * and (optionally) build the gradient-calculating sub-graphs via the
    :meth:`Op.grad` method.
  
  To see how `Op`, `Type`, `Variable`, and `Apply` fit together see the
  page on :doc:`graph`.
  
  For more details regarding how these methods should behave: see the `Op
  Contract` in the sphinx docs (advanced tutorial on `Op` making).
class_docstr_tok: ["A","class","that","models","and","constructs","operations","in","a","graph",".","A","`","Op","`","instance","has","several","responsibilities",":","*","construct","`","Apply","`","nodes","via",":","meth",":","`","Op.make_node","`","method",",","*","perform","the","numeric","calculation","of","the","modeled","operation","via","the",":","meth",":","`","Op.perform","`","method",",","*","and","(","optionally",")","build","the","gradient-calculating","sub-graphs","via","the",":","meth",":","`","Op.grad","`","method",".","To","see","how","`","Op","`",",","`","Type","`",",","`","Variable","`",",","and","`","Apply","`","fit","together","see","the","page","on",":","doc",":","`","graph","`",".","For","more","details","regarding","how","these","methods","should","behave",":","see","the","`","Op","Contract","`","in","the","sphinx","docs","(","advanced","tutorial","on","`","Op","`","making",")","."]
docstr: Construct a graph for the L-operator.
  
  The L-operator computes a row vector times the Jacobian.
  
  This method dispatches to :meth:`Op.grad` by default.  In one sense,
  this method provides the original outputs when they're needed to
  compute the return value, whereas `Op.grad` doesn't.
  
  See `Op.grad` for a mathematical explanation of the inputs and outputs
  of this method.
  
  Parameters
  ----------
  inputs
      The inputs of the `Apply` node using this `Op`.
  outputs
      The outputs of the `Apply` node using this `Op`
  output_grads
      The gradients with respect to each `Variable` in `inputs`.
docstr_tok: ["Construct","a","graph","for","the","L-operator",".","The","L-operator","computes","a","row","vector","times","the","Jacobian",".","This","method","dispatches","to",":","meth",":","`","Op.grad","`","by","default",".","In","one","sense",",","this","method","provides","the","original","outputs","when","they","'re","needed","to","compute","the","return","value",",","whereas","`","Op.grad","`","does","n't",".","See","`","Op.grad","`","for","a","mathematical","explanation","of","the","inputs","and","outputs","of","this","method",".","Parameters","--","--","--","--","--","inputs","The","inputs","of","the","`","Apply","`","node","using","this","`","Op","`",".","outputs","The","outputs","of","the","`","Apply","`","node","using","this","`","Op","`","output_grads","The","gradients","with","respect","to","each","`","Variable","`","in","`","inputs","`","."]
code: def L_op(
      self,
      inputs: Sequence[Variable],
      outputs: Sequence[Variable],
      output_grads: Sequence[Variable],
  ) -> list[Variable]:
      r"""Construct a graph for the L-operator.
  
      The L-operator computes a row vector times the Jacobian.
  
      This method dispatches to :meth:`Op.grad` by default.  In one sense,
      this method provides the original outputs when they're needed to
      compute the return value, whereas `Op.grad` doesn't.
  
      See `Op.grad` for a mathematical explanation of the inputs and outputs
      of this method.
  
      Parameters
      ----------
      inputs
          The inputs of the `Apply` node using this `Op`.
      outputs
          The outputs of the `Apply` node using this `Op`
      output_grads
          The gradients with respect to each `Variable` in `inputs`.
  
      """
      return self.grad(inputs, output_grads)
  
imports: import copy
  import sys
  import warnings
  from abc import ABC, abstractmethod
  from collections.abc import Sequence
  from typing import TYPE_CHECKING, Any, Callable, Optional, Protocol, TypeVar, Union, cast
  import pytensor
  from pytensor.configdefaults import config
  from pytensor.graph.basic import Apply, Variable
  from pytensor.graph.utils import MetaObject, TestValueError, add_tag_trace, get_variable_trace_string
label_desc: Use image node_id 5 for calling the Op obj's underlying member method code with example usage: obj.L_op(inputs, outputs, output_grads) and returns: self