class_docstr: WRITEME
docstr: Returns a function that takes values corresponding to the inputs of the
  fgraph used by this L{Linker} and returns values corresponding the the
  outputs of that fgraph. If inplace is True, the calculations will
  operate in the same storage the fgraph uses, else independent storage
  will be allocated for the function.
  
  Example
  -------
  e = x + y
  fgraph = FunctionGraph([x, y], [e])
  fn = MyLinker(fgraph).make_function(inplace)
  print fn(1.0, 2.0) # 3.0
  print e.data # 3.0 iff inplace == True (else unknown)
  
  If unpack_single is True (default) and that the function has only one
  output, then that output will be returned. Else, a list or tuple of
  length 1 will be returned.
docstr_tok: ["Returns","a","function","that","takes","values","corresponding","to","the","inputs","of","the","fgraph","used","by","this","L","{","Linker","}","and","returns","values","corresponding","the","the","outputs","of","that","fgraph",".","If","inplace","is","True",",","the","calculations","will","operate","in","the","same","storage","the","fgraph","uses",",","else","independent","storage","will","be","allocated","for","the","function",".","Example","--","--","--","-","e","=","x","+","y","fgraph","=","FunctionGraph","(","[","x",",","y","]",",","[","e","]",")","fn","=","MyLinker","(","fgraph",")",".make_function","(","inplace",")","print","fn","(","1.0",",","2.0",")","#","3.0","print","e.data","#","3.0","iff","inplace","==","True","(","else","unknown",")","If","unpack_single","is","True","(","default",")","and","that","the","function","has","only","one","output",",","then","that","output","will","be","returned",".","Else",",","a","list","or","tuple","of","length","1","will","be","returned","."]
code: def make_function(self, unpack_single=True, **kwargs):
      """
      Returns a function that takes values corresponding to the inputs of the
      fgraph used by this L{Linker} and returns values corresponding the the
      outputs of that fgraph. If inplace is True, the calculations will
      operate in the same storage the fgraph uses, else independent storage
      will be allocated for the function.
  
      Example
      -------
      e = x + y
      fgraph = FunctionGraph([x, y], [e])
      fn = MyLinker(fgraph).make_function(inplace)
      print fn(1.0, 2.0) # 3.0
      print e.data # 3.0 iff inplace == True (else unknown)
  
      If unpack_single is True (default) and that the function has only one
      output, then that output will be returned. Else, a list or tuple of
      length 1 will be returned.
  
      """
      thunk, inputs, outputs = self.make_thunk(**kwargs)
  
      def execute(*args):
          def e_arity(takes, got):
              return "Function call takes exactly %i %s (%i given)" % (
                  takes,
                  ["argument", "arguments"][takes > 1],
                  got,
              )
  
          if len(args) != len(inputs):
              raise TypeError(e_arity(len(inputs), len(args)))
          for arg, variable in izip(args, inputs):
              variable.data = arg
          thunk()
          if unpack_single:
              return utils.to_return_values(
                  [variable.data for variable in outputs]
              )
          else:
              return [variable.data for variable in outputs]
  
      execute.thunk = thunk
      execute.inputs = inputs
      execute.outputs = outputs
  
      return execute
  
imports: from __future__ import absolute_import, print_function, division
  from copy import copy, deepcopy
  from sys import getsizeof
  import sys
  import traceback
  import numpy
  import theano
  from theano.compat import izip
  from six import reraise
  from six.moves import StringIO
  from theano.gof import utils
  from theano.gof import graph
  from theano.gof.type import Type
  from .utils import undef
label_desc: Use image node_id 3 for calling the Linker obj's underlying member method code with example usage: obj.make_function(unpack_single) and returns: execute, unknown, utils, unknown