def to_ops_stencil(param, accesses): dims = len(accesses[0]) pts = len(accesses) stencil_name = namespace['ops_stencil_name'](dims, param.name, pts) stencil_array = Array( name=stencil_name, dimensions=(DefaultDimension(name='len', default_value=dims * pts), ), dtype=np.int32, ) ops_stencil = OpsStencil(stencil_name.upper()) return ops_stencil, [ Expression( ClusterizedEq( Eq(stencil_array, ListInitializer(list(itertools.chain(*accesses)))))), Expression( ClusterizedEq( Eq( ops_stencil, namespace['ops_decl_stencil']( dims, pts, Symbol(stencil_array.name), Literal('"%s"' % stencil_name.upper()))))) ]
def test_create_ops_arg_function(self, read): u = OpsAccessible('u', np.float32, read) dat = OpsDat('u_dat') stencil = OpsStencil('stencil') info = AccessibleInfo(u, None, None) res = create_ops_arg(u, {'u': info}, {'u': dat}, {u: stencil}) assert type(res) == namespace['ops_arg_dat'] assert res.args == (dat, 1, stencil, Literal('"%s"' % dtype_to_cstr(u.dtype)), namespace['ops_read'] if read else namespace['ops_write'])
def test_create_ops_arg_function(self, read): u = OpsAccessible('u', dtype=np.float32, read_only=read) dat = OpsDat('u_dat') stencil = OpsStencil('stencil') info = AccessibleInfo(u, None, None) ops_arg = create_ops_arg(u, {'u': info}, {'u': dat}, {u: stencil}) assert ops_arg.ops_type == namespace['ops_arg_dat'] assert ops_arg.ops_name == OpsDat('u_dat') assert ops_arg.elements_per_point == 1 assert ops_arg.dtype == Literal('"%s"' % dtype_to_cstr(u.dtype)) assert ops_arg.rw_flag == \ namespace['ops_read'] if read else namespace['ops_write']