class_docstr: Code printer which creates Aesara symbolic expression graphs.
  
  Parameters
  ==========
  
  cache : dict
      Cache dictionary to use. If None (default) will use
      the global cache. To create a printer which does not depend on or alter
      global state pass an empty dictionary. Note: the dictionary is not
      copied on initialization of the printer and will be updated in-place,
      so using the same dict object when creating multiple printers or making
      multiple calls to :func:`.aesara_code` or :func:`.aesara_function` means
      the cache is shared between all these applications.
  
  Attributes
  ==========
  
  cache : dict
      A cache of Aesara variables which have been created for SymPy
      symbol-like objects (e.g. :class:`sympy.core.symbol.Symbol` or
      :class:`sympy.matrices.expressions.MatrixSymbol`). This is used to
      ensure that all references to a given symbol in an expression (or
      multiple expressions) are printed as the same Aesara variable, which is
      created only once. Symbols are differentiated only by name and type. The
      format of the cache's contents should be considered opaque to the user.
class_docstr_tok: ["Code","printer","which","creates","Aesara","symbolic","expression","graphs",".","Parameters","==========","cache",":","dict","Cache","dictionary","to","use",".","If","None","(","default",")","will","use","the","global","cache",".","To","create","a","printer","which","does","not","depend","on","or","alter","global","state","pass","an","empty","dictionary",".","Note",":","the","dictionary","is","not","copied","on","initialization","of","the","printer","and","will","be","updated","in-place",",","so","using","the","same","dict","object","when","creating","multiple","printers","or","making","multiple","calls","to",":","func",":","`",".aesara_code","`","or",":","func",":","`",".aesara_function","`","means","the","cache","is","shared","between","all","these","applications",".","Attributes","==========","cache",":","dict","A","cache","of","Aesara","variables","which","have","been","created","for","SymPy","symbol-like","objects","(","e.g",".",":","class",":","`","sympy.core.symbol.Symbol","`","or",":","class",":","`","sympy.matrices.expressions.MatrixSymbol","`",")",".","This","is","used","to","ensure","that","all","references","to","a","given","symbol","in","an","expression","(","or","multiple","expressions",")","are","printed","as","the","same","Aesara","variable",",","which","is","created","only","once",".","Symbols","are","differentiated","only","by","name","and","type",".","The","format","of","the","cache","'s","contents","should","be","considered","opaque","to","the","user","."]
code: def __init__(self, *args, **kwargs):
      self.cache = kwargs.pop("cache", {})
      super().__init__(*args, **kwargs)
  
imports: from __future__ import annotations
  from typing import Any
  from sympy.external import import_module
  from sympy.printing.printer import Printer
  from sympy.utilities.iterables import is_sequence
  import sympy
  from functools import partial
label_desc: Use image node_id 1 to create a new AesaraPrinter object from inherited base classes: Printer with example: obj = AesaraPrinter()