code: def process(self, output, pstate):
      if output in pstate.memo:
          return pstate.memo[output]
      pprinter = pstate.pprinter
      node = output.owner
      if node is None:
          raise TypeError(
              "function %s cannot represent a variable that is "
              "not the result of an operation" % self.names
          )
      idx = node.outputs.index(output)
      name = self.names[idx]
      new_precedence = -1000
      try:
          old_precedence = getattr(pstate, "precedence", None)
          pstate.precedence = new_precedence
          r = "%s(%s)" % (
              name,
              ", ".join(
                  [
                      pprinter.process(input, pstate)
                      for input in node.inputs
                  ]
              ),
          )
      finally:
          pstate.precedence = old_precedence
  
      pstate.memo[output] = r
      return r
  
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 2 for calling the FunctionPrinter obj's underlying member method code with example usage: obj.process(output, pstate) and returns: r, pstate