class_docstr: A `VM` that performs updates on its graph's inputs.
class_docstr_tok: ["A","`","VM","`","that","performs","updates","on","its","graph","'s","inputs","."]
docstr: Parameters
  ----------
  storage_map
      A ``dict`` mapping `Variable`\s to single-element lists where a
      computed value for each `Variable` may be found.
  input_storage
      Storage cells for each input.
  output_storage
      Storage cells for each output.
  update_vars
      A ``dict`` from input to output variables that specify
      output-to-input in-place storage updates that occur after
      evaluation of the entire graph (i.e. all the thunks).
docstr_tok: ["Parameters","--","--","--","--","--","storage_map","A","``","dict","``","mapping","`","Variable","`","\\s","to","single-element","lists","where","a","computed","value","for","each","`","Variable","`","may","be","found",".","input_storage","Storage","cells","for","each","input",".","output_storage","Storage","cells","for","each","output",".","update_vars","A","``","dict","``","from","input","to","output","variables","that","specify","output-to-input","in-place","storage","updates","that","occur","after","evaluation","of","the","entire","graph","(","i.e",".","all","the","thunks",")","."]
code: def __init__(
      self,
      fgraph,
      nodes,
      thunks,
      pre_call_clear,
      storage_map: "StorageMapType",
      input_storage: list["StorageCellType"],
      output_storage: list["StorageCellType"],
      update_vars: dict[Variable, Variable],
  ):
      r"""
      Parameters
      ----------
      storage_map
          A ``dict`` mapping `Variable`\s to single-element lists where a
          computed value for each `Variable` may be found.
      input_storage
          Storage cells for each input.
      output_storage
          Storage cells for each output.
      update_vars
          A ``dict`` from input to output variables that specify
          output-to-input in-place storage updates that occur after
          evaluation of the entire graph (i.e. all the thunks).
      """
      super().__init__(fgraph, nodes, thunks, pre_call_clear)
  
      self.storage_map = storage_map
      self.input_storage = input_storage
      self.output_storage = output_storage
      self.inp_storage_and_out_idx = tuple(
          (inp_storage, self.fgraph.outputs.index(update_vars[inp]))
          for inp, inp_storage in zip(
              self.fgraph.inputs, self.input_storage
          )
          if inp in update_vars
      )
  
imports: import platform
  import sys
  import time
  import warnings
  from abc import ABC, abstractmethod
  from collections import defaultdict
  from collections.abc import Sequence
  from itertools import zip_longest
  from typing import TYPE_CHECKING, Any, Optional
  from pytensor.configdefaults import config
  from pytensor.graph.basic import Apply, Constant, Variable
  from pytensor.link.basic import Container, LocalLinker
  from pytensor.link.c.exceptions import MissingGXX
  from pytensor.link.utils import gc_helper, get_destroy_dependencies, map_storage, raise_with_op
label_desc: Use image node_id 1 to create a new UpdatingVM object from inherited base classes: VM with example: obj = UpdatingVM(fgraph, nodes, thunks, pre_call_clear, storage_map, input_storage, output_storage, update_vars)