class_docstr: An abstract class for evaluating PyTensor programs.
  
  The `VM.__call__` method evaluates an PyTensor program.
  
  `Stack` should be considered the reference `VM`/`Linker` implementation.
  It can correctly evaluate all graphs and is the easiest to read. The `CVM`
  is a port of `Stack` and should have the same behavior, but run faster.
  The `CVM`'s code is harder to read though.
  
  The other python `VM`\s are perhaps not necessary anymore, and don't take
  advantage of lazy computation, although they still produce the correct
  output for lazy nodes.
  
  Attributes
  ----------
  call_counts
      List of integers, one for each thunk. ``call_count[i]`` is the number
      of times ``thunks[i]`` was called in the course of computations
      performed by `call_with_timers`.
  call_times
      List of floats, one for each thunk. ``call_times[i]`` is the amount of
      runtime spent on ``thunks[i]`` in the course of computations performed
      by `call_with_timers`.
  
  need_update_inputs : bool
      ``True`` indicates that `Function.__call__` must implement the feedback
      from output storage to input storage. ``False`` means it *must not*
      repeat that feedback.
class_docstr_tok: ["An","abstract","class","for","evaluating","PyTensor","programs",".","The","`","VM.__call__","`","method","evaluates","an","PyTensor","program",".","`","Stack","`","should","be","considered","the","reference","`","VM","`","\/","`","Linker","`","implementation",".","It","can","correctly","evaluate","all","graphs","and","is","the","easiest","to","read",".","The","`","CVM","`","is","a","port","of","`","Stack","`","and","should","have","the","same","behavior",",","but","run","faster",".","The","`","CVM","`","'s","code","is","harder","to","read","though",".","The","other","python","`","VM","`","\\s","are","perhaps","not","necessary","anymore",",","and","do","n't","take","advantage","of","lazy","computation",",","although","they","still","produce","the","correct","output","for","lazy","nodes",".","Attributes","--","--","--","--","--","call_counts","List","of","integers",",","one","for","each","thunk",".","``","call_count","[","i","]","``","is","the","number","of","times","``","thunks","[","i","]","``","was","called","in","the","course","of","computations","performed","by","`","call_with_timers","`",".","call_times","List","of","floats",",","one","for","each","thunk",".","``","call_times","[","i","]","``","is","the","amount","of","runtime","spent","on","``","thunks","[","i","]","``","in","the","course","of","computations","performed","by","`","call_with_timers","`",".","need_update_inputs",":","bool","``","True","``","indicates","that","`","Function.__call__","`","must","implement","the","feedback","from","output","storage","to","input","storage",".","``","False","``","means","it","*","must","not","*","repeat","that","feedback","."]
docstr: Free any internal references to temporary variables.
  
  Essentially, free as much memory as possible without interfering with
  the ability to evaluate subsequent calls.
docstr_tok: ["Free","any","internal","references","to","temporary","variables",".","Essentially",",","free","as","much","memory","as","possible","without","interfering","with","the","ability","to","evaluate","subsequent","calls","."]
code: def clear_storage(self):
      """Free any internal references to temporary variables.
  
      Essentially, free as much memory as possible without interfering with
      the ability to evaluate subsequent calls.
      """
  
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 3 for calling the VM obj's underlying member method code with example usage: obj.clear_storage() without return types