code: def test_no_make_node(self):
      class DoubleOp(Op):
          """An Op without make_node"""
  
          __props__ = ()
  
          itypes = [T.dmatrix]
          otypes = [T.dmatrix]
  
          def perform(self, node, inputs, outputs):
              inp = inputs[0]
              output = outputs[0]
              output[0] = inp * 2
  
      x_input = T.dmatrix("x_input")
      f = theano.function([x_input], DoubleOp()(x_input))
      inp = np.random.rand(5, 4)
      out = f(inp)
      assert np.allclose(inp * 2, out)
  
imports: from __future__ import absolute_import, print_function, division
  import unittest
  from nose.plugins.skip import SkipTest
  import numpy
  import theano
  import theano.gof.op
  from six import string_types
  from theano.gof.type import Type, Generic
  from theano.gof.graph import Apply, Variable
  import theano.tensor
  from theano import scalar
  from theano import shared
label_desc: Use image node_id 3 for calling the TestMakeThunk obj's underlying member method code with example usage: obj.test_no_make_node() without return types