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: Perform the output-to-input updates and return the output values.
docstr_tok: ["Perform","the","output-to-input","updates","and","return","the","output","values","."]
code: def perform_updates(self) -> list[Any]:
      """Perform the output-to-input updates and return the output values."""
  
      # The outputs need to be collected *before* the updates that follow
      outputs = [cell[0] for cell in self.output_storage]
  
      for inp_storage, out_idx in self.inp_storage_and_out_idx:
          inp_storage[0] = outputs[out_idx]
  
      return outputs
  
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 2 for calling the UpdatingVM obj's underlying member method code with example usage: obj.perform_updates() and returns: outputs