def test_invert(self): with self.assertRaises(TypeError): env = {'x': {NDArray[float, pentyping.Tuple[int, int]]}} penty.type_eval('~x', env) self.assertIsType('~x', NDArray[int, pentyping.Tuple[int, int]], env={'x': NDArray[int, pentyping.Tuple[int, int]]})
def assertIsType(self, stmt, expr, ty, env={}): if not isinstance(ty, set): ty = {ty} type_env = penty.type_exec(dedent(stmt), {}) type_env.update({k: v if isinstance(v, set) else {v} for k, v in env.items()}) self.assertEqual(penty.type_eval(expr, type_env), ty)
def test_matmul(self): with self.assertRaises(TypeError): env = {'x': {NDArray[int, pentyping.Tuple[int, int]]}} penty.type_eval('x @ 1', env) self.assertIsType('x @ x[1]', NDArray[int, pentyping.Tuple[int, int]], env={'x': NDArray[int, pentyping.Tuple[int, int]]}) self.assertIsType( 'x @ x[1]', NDArray[int, pentyping.Tuple[int, pentyping.Cst[1]]], env={'x': NDArray[int, pentyping.Tuple[int, pentyping.Cst[1]]]}) self.assertIsType('x @ x[1]', NDArray[int, pentyping.Tuple[pentyping.Cst[5], pentyping.Cst[1]]], env={ 'x': NDArray[int, pentyping.Tuple[pentyping.Cst[5], pentyping.Cst[1]]] })
def test_and(self): self.assertIsType('x & 1', NDArray[int, pentyping.Tuple[int, int]], env={'x': NDArray[int, pentyping.Tuple[int, int]]}) self.assertIsType('x & x[1]', NDArray[int, pentyping.Tuple[int, int]], env={'x': NDArray[int, pentyping.Tuple[int, int]]}) self.assertIsType( 'x & x[1]', NDArray[int, pentyping.Tuple[int, pentyping.Cst[1]]], env={'x': NDArray[int, pentyping.Tuple[int, pentyping.Cst[1]]]}) self.assertIsType('x & x[1]', NDArray[int, pentyping.Tuple[pentyping.Cst[5], pentyping.Cst[1]]], env={ 'x': NDArray[int, pentyping.Tuple[pentyping.Cst[5], pentyping.Cst[1]]] }) with self.assertRaises(TypeError): env = {'x': {NDArray[float, pentyping.Tuple[int, int]]}} penty.type_eval('x & 1', env)
def assertIsType(self, expr, ty, env={}): if not isinstance(ty, set): ty = {ty} env = {k: v if isinstance(v, set) else {v} for k, v in env.items()} self.assertTypesEqual(penty.type_eval(expr, env), ty)
def assertIsType(self, expr, ty, env={}): if not isinstance(ty, set): ty = {ty} env = {k: v if isinstance(v, set) else {v} for k, v in env.items()} env = penty.type_exec("import numpy as np", env) self.assertEqual(penty.type_eval(expr, env), ty)