def test_op_with_enumlist(self): a = aes.int32() b = aes.int32() c_add = MyOpEnumList("+")(a, b) c_sub = MyOpEnumList("-")(a, b) c_multiply = MyOpEnumList("*")(a, b) c_divide = MyOpEnumList("/")(a, b) f = aesara.function([a, b], [c_add, c_sub, c_multiply, c_divide]) va = 12 vb = 15 ref = [va + vb, va - vb, va * vb, va // vb] out = f(va, vb) assert ref == out, (ref, out)
def test_no_c_code(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
def test_no_c_code(self): class IncOnePython(Op): """ An Op with only a Python (perform) implementation """ __props__ = () def make_node(self, input): input = scalar.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 = scalar.int32("i") i.tag.test_value = 3 o = IncOnePython()(i) # Check that the c_code function is not implemented with pytest.raises((NotImplementedError, utils.MethodNotDefined)): o.owner.op.c_code(o.owner, "o", ["x"], "z", {"fail": ""}) assert hasattr(o.tag, "test_value") assert o.tag.test_value == 4
def test_no_perform(self): i = scalar.int32("i") i.tag.test_value = 3 # Class IncOneC is defined outside of the TestComputeTestValue # so it can be pickled and unpickled o = IncOneC()(i) # Check that the perform function is not implemented with pytest.raises((NotImplementedError, utils.MethodNotDefined)): o.owner.op.perform(o.owner, 0, [None]) assert hasattr(o.tag, "test_value") assert o.tag.test_value == 4
def test_no_perform(self): class IncOneC(COp): """An Op with only a C (c_code) implementation""" __props__ = () def make_node(self, input): input = aes.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 f"{z} = {x} + 1;" def perform(self, *args, **kwargs): raise NotImplementedError( "No Python implementation available.") i = aes.int32("i") o = IncOneC()(i) # Check that the perform function is not implemented with pytest.raises((NotImplementedError, 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 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: with pytest.raises((NotImplementedError, MethodNotDefined)): thunk()