def METHOD_NAME(self):
    class IncOnePython(COp):
        """An Op with only a Python (perform) implementation"""
        __props__ = ()
        def make_node(self, input):
            input = aes.as_scalar(input)
            output = input.type()
            return Apply(self, [input], [output])
        def perform(self, node, inputs, outputs):
            (input,) = inputs
            (output,) = outputs
            output[0] = input + 1
    i = aes.int32("i")
    o = IncOnePython()(i)
    # Check that the c_code function is not implemented
    with pytest.raises(NotImplementedError):
        o.owner.op.c_code(o.owner, "o", ["x"], "z", {"fail": ""})
    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=[]
    )
    required = thunk()
    # Check everything went OK
    assert not required  # We provided all inputs
    assert compute_map[o][0]
    assert storage_map[o][0] == 4