def verify_sparse_to_dense(sparse_indices, sparse_values, default_value, output_shape, xpected): sparse_indices_data = np.array(sparse_indices) sparse_values_data = np.array(sparse_values) default_value_data = np.array(default_value) a = relay.var("a", relay.TensorType(sparse_indices_data.shape, str(sparse_indices_data.dtype))) b = relay.var("b", relay.TensorType(sparse_values_data.shape, str(sparse_values_data.dtype))) if default_value is None: args = [a, b] d = relay.sparse_to_dense(a, output_shape, b) else: c = relay.var("c", relay.TensorType(default_value_data.shape, str(default_value_data.dtype))) args = [a, b, c] d = relay.sparse_to_dense(a, output_shape, b, c) zz = run_infer_type(d) assert zz.checked_type == relay.ty.TensorType(output_shape, str(sparse_values_data.dtype)) func = relay.Function(args, d) for target, ctx in tvm.testing.enabled_targets(): for kind in ["graph", "debug"]: intrp = relay.create_executor(kind, ctx=ctx, target=target) if default_value is None: op_res = intrp.evaluate(func)(sparse_indices_data, sparse_values_data) else: op_res = intrp.evaluate(func)( sparse_indices_data, sparse_values_data, default_value_data ) tvm.testing.assert_allclose(op_res.asnumpy(), xpected, rtol=1e-5)
def verify_sparse_to_dense(sparse_indices, sparse_values, default_value, output_shape, xpected): sparse_indices_data = np.array(sparse_indices) sparse_values_data = np.array(sparse_values) default_value_data = np.array(default_value) output_shape_data = np.array(output_shape) a = relay.var( "a", relay.TensorType(sparse_indices_data.shape, str(sparse_indices_data.dtype))) b = relay.var( "b", relay.TensorType(sparse_values_data.shape, str(sparse_values_data.dtype))) output_shape_var = relay.var( "output_shape", relay.TensorType(output_shape_data.shape, str(output_shape_data.dtype))) if default_value is None: args = [a, b, output_shape_var] d = relay.sparse_to_dense(a, output_shape_var, b) else: c = relay.var( "c", relay.TensorType(default_value_data.shape, str(default_value_data.dtype))) args = [a, b, c, output_shape_var] d = relay.sparse_to_dense(a, output_shape_var, b, c) zz = run_infer_type(d) assert len(zz.checked_type.shape) == len(output_shape) func = relay.Function(args, d) if default_value is None: arguments = [ sparse_indices_data, sparse_values_data, output_shape_data ] else: arguments = [ sparse_indices_data, sparse_values_data, default_value_data, output_shape_data, ] verify_func(executor_kind, func, arguments, xpected)
def verify_sparse_to_dense(sparse_indices, sparse_values, default_value, output_shape, xpected): sparse_indices_data = np.array(sparse_indices) sparse_values_data = np.array(sparse_values) default_value_data = np.array(default_value) output_shape_data = np.array(output_shape) a = relay.var( "a", relay.TensorType(sparse_indices_data.shape, str(sparse_indices_data.dtype))) b = relay.var( "b", relay.TensorType(sparse_values_data.shape, str(sparse_values_data.dtype))) output_shape_const = relay.const(output_shape_data) if default_value is None: args = [a, b] d = relay.sparse_to_dense(a, output_shape_const, b) else: c = relay.var( "c", relay.TensorType(default_value_data.shape, str(default_value_data.dtype))) args = [a, b, c] d = relay.sparse_to_dense(a, output_shape_const, b, c) zz = run_infer_type(d) assert len(zz.checked_type.shape) == len(output_shape) func = relay.Function(args, d) func2 = run_opt_pass(run_opt_pass(func, transform.DynamicToStatic()), transform.InferType()) assert isinstance(func2.body, relay.Call) assert func2.body.op == relay.op.get("sparse_to_dense") if default_value is None: arguments = [sparse_indices_data, sparse_values_data] else: arguments = [ sparse_indices_data, sparse_values_data, default_value_data ] verify_func(func2, arguments, xpected)