def test_signature_parser(self, space): class Ufunc(object): def __init__(self, nin, nout): self.nin = nin self.nout = nout self.nargs = nin + nout self.core_enabled = True self.core_num_dim_ix = 0 self.core_num_dims = [0] * self.nargs self.core_offsets = [0] * self.nargs self.core_dim_ixs = [] u = Ufunc(2, 1) _parse_signature(space, u, "(m,n), (n,r)->(m,r)") assert u.core_dim_ixs == [0, 1, 1, 2, 0, 2] assert u.core_num_dims == [2, 2, 2] assert u.core_offsets == [0, 2, 4]
def test_signature_parser(self, space): class Ufunc(object): def __init__(self, nin, nout): self.nin = nin self.nout = nout self.nargs = nin + nout self.core_enabled = True self.core_num_dim_ix = 0 self.core_num_dims = [0] * self.nargs self.core_offsets = [0] * self.nargs self.core_dim_ixs = [] u = Ufunc(2, 1) _parse_signature(space, u, '(m,n), (n,r)->(m,r)') assert u.core_dim_ixs == [0, 1, 1, 2, 0, 2] assert u.core_num_dims == [2, 2, 2] assert u.core_offsets == [0, 2, 4]
def test_signature_basic(self): space = self.space funcs = [None] name = 'dummy ufunc' identity = None dtypes = [int, int, int] nin = 2 nout = 1 signature = '(), () -> ( ) ' ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature) # make sure no attributes are added attribs = set(ufunc.__dict__.keys()) support._parse_signature(space, ufunc, ufunc.signature) new_attribs = set(ufunc.__dict__.keys()) assert attribs == new_attribs assert sum(ufunc.core_num_dims) == 0 assert ufunc.core_enabled == 0 nin = 2 nout = 1 signature = '(i),(i)->()' ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature) support._parse_signature(space, ufunc, ufunc.signature) assert ufunc.core_enabled == 1 nin = 2 nout = 1 signature = '(i1, i2),(J_1)->(_kAB)' ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature) support._parse_signature(space, ufunc, ufunc.signature) assert ufunc.core_enabled == 1 nin = 2 nout = 1 signature = '(i1 i2),(J_1)->(_kAB)' ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature) exc = raises(OperationError, support._parse_signature, space, ufunc, ufunc.signature) assert "expect dimension name" in exc.value.errorstr(space) nin = 2 nout = 1 signature = '(i),i(->()' ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature) exc = raises(OperationError, support._parse_signature, space, ufunc, ufunc.signature) assert "expect '(' at 4" in exc.value.errorstr(space)