code: def test_copy(self):
      r1, r2, r5 = MyVariable(1), MyVariable(2), MyVariable(5)
      node = MyOp.make_node(r1, r2)
      node2 = MyOp.make_node(node.outputs[0], r5)
      _, new = clone([r1, r2, r5], node2.outputs, False)
      assert (
          node2.outputs[0].type == new[0].type
          and node2.outputs[0] is not new[0]
      )  # the new output is like the old one but not the same object
      assert node2 is not new[0].owner  # the new output has a new owner
      assert new[0].owner.inputs[1] is r5  # the inputs are not copied
      assert (
          new[0].owner.inputs[0].type == node.outputs[0].type
          and new[0].owner.inputs[0] is not node.outputs[0]
      )
  
imports: from __future__ import absolute_import, print_function, division
  from itertools import count
  import pickle
  import unittest
  from nose.plugins.skip import SkipTest
  import numpy
  from theano import sparse, shared, tensor
  from theano.gof.graph import Apply, as_string, clone, general_toposort, inputs, io_toposort, is_same_graph, Variable
  from theano.gof.op import Op
  from theano.gof.type import Type
label_desc: Use image node_id 2 for calling the TestClone obj's underlying member method code with example usage: obj.test_copy() without return types