code: def _inject(self, conn):
          
          # provide PAPY_DEFAULTS remotely
          # provide PAPY_RUNTIME remotely
          if not 'PAPY_INJECTED' in conn.namespace:
              _inject_func(get_defaults, conn)
              _inject_func(get_runtime, conn)
              conn.execute('PAPY_DEFAULTS = get_defaults()')
              conn.execute('PAPY_RUNTIME = get_runtime()')
              conn.execute('PAPY_INJECTED = True')
          # inject all functions
          for func in self.task:
              _inject_func(func, conn)
          # create list of functions called TASK
          # and inject a function comp_task which 
          _inject_func(_comp_task, conn)
          conn.execute('TASK = %s' % \
                     str(tuple([i.__name__ for i in self.task])).replace("'", ""))
                      # ['func1', 'func2'] -> "(func1, func2)"
          # inject compose function, will ...
          self.task = [conn.namespace['_comp_task']]
          self.args = [[self.args]]
          self.kwargs = [{'kwargs':self.kwargs}]
          # instead of multiple remote back and the combined functions is
          # evaluated remotely.
          return self
docs: (internal) inject/replace all functions into a rpyc connection object.