code: def test_no_perform(self):
      class IncOneC(Op):
          """An Op with only a C (c_code) implementation"""
  
          __props__ = ()
  
          def make_node(self, input):
              input = scalar.as_scalar(input)
              output = input.type()
              return Apply(self, [input], [output])
  
          def c_code(self, node, name, inputs, outputs, sub):
              (x,) = inputs
              (z,) = outputs
              return "%(z)s = %(x)s + 1;" % locals()
  
      i = scalar.int32("i")
      o = IncOneC()(i)
  
      # Check that the perform function is not implemented
      self.assertRaises(
          (NotImplementedError, utils.MethodNotDefined),
          o.owner.op.perform,
          o.owner,
          0,
          [None],
      )
  
      storage_map = {i: [np.int32(3)], o: [None]}
      compute_map = {i: [True], o: [False]}
  
      thunk = o.owner.op.make_thunk(
          o.owner, storage_map, compute_map, no_recycling=[]
      )
      if theano.config.cxx:
          required = thunk()
          # Check everything went OK
          assert not required  # We provided all inputs
          assert compute_map[o][0]
          assert storage_map[o][0] == 4
      else:
          self.assertRaises(
              (NotImplementedError, utils.MethodNotDefined), thunk
          )
  
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 2 for calling the TestMakeThunk obj's underlying member method code with example usage: obj.test_no_perform() and returns: Apply, unknown