code: def process(self, r, pstate=None):
      if pstate is None:
          pstate = PrinterState(pprinter=self)
      elif isinstance(pstate, dict):
          pstate = PrinterState(pprinter=self, **pstate)
      if getattr(r, "owner", None) is not None:
          if r.owner.op in self.printers_dict:
              return self.printers_dict[r.owner.op].process(r, pstate)
          if type(r.owner.op) in self.printers_dict:
              return self.printers_dict[type(r.owner.op)].process(
                  r, pstate
              )
      for condition, printer in self.printers:
          if condition(pstate, r):
              return printer.process(r, pstate)
  
imports: from __future__ import absolute_import, print_function, division
  from copy import copy
  import logging
  import os
  import sys
  import hashlib
  import numpy
  from six import string_types, integer_types, iteritems
  from six.moves import StringIO, reduce
  import theano
  from theano import gof
  from theano import config
  from theano.gof import Op, Apply
  from theano.compile import Function, debugmode, SharedVariable
label_desc: Use image node_id 3 for calling the PPrinter obj's underlying member method code with example usage: obj.process(r, pstate) and returns: self, self, printer