def sym_difference(self, sym_var): """ :type sym_var: SymVariable """ # return SymVariable.shift(sym_var, {self.axis_name: 1}) - sym_var return ( SymVariable.shift(sym_var, {self.axis_name: 1}) - SymVariable.shift(sym_var, {self.axis_name: -1})).__truediv__(2.0)
def setUp(self): self.domain = Domain(lower_limits_dict={ "x": 0, "y": 0 }, upper_limits_dict={ "x": 5, "y": 6 }, step_width_dict={ "x": 1, "y": 1 }) self.f = np.zeros( (self.domain.get_shape("x")["x"], self.domain.get_shape("y")["y"])) self.g = np.zeros( (self.domain.get_shape("x")["x"], self.domain.get_shape("y")["y"])) for i, x in enumerate(self.domain.get_range("x")["x"]): for j, y in enumerate(self.domain.get_range("y")["y"]): self.f[i, j] = x**y self.g[i, j] = self.f[i, j] self.v = Variable(self.f, self.domain, domain2axis={ "x": 0, "y": 1 }, variable_name="v") self.w = Variable(self.g, self.domain, domain2axis={ "x": 0, "y": 1 }, variable_name="w") self.x = Variable(self.domain.get_range("x")["x"], self.domain.get_subdomain("x"), domain2axis={"x": 0}, variable_name="x") self.y = Variable(self.domain.get_range("y")["y"], self.domain.get_subdomain("y"), domain2axis={"y": 0}, variable_name="y") self.sym_v = SymVariable( *SymVariable.get_init_info_from_variable(self.v)) self.sym_x = SymVariable( *SymVariable.get_init_info_from_variable(self.x))
def setUp(self): self.domain = Domain(lower_limits_dict={"x": -10}, upper_limits_dict={"x": 10}, step_width_dict={"x": 0.001}) self.v = Variable(np.sin(self.domain.get_range("x")["x"]), self.domain, domain2axis={"x": 0}, variable_name="v") self.x = Variable(self.domain.get_range("x")["x"], self.domain, domain2axis={"x": 0}, variable_name="x") self.sym_v = SymVariable( *SymVariable.get_init_info_from_variable(self.v))
def test_shift(self): sym_v2 = copy.deepcopy(self.sym_v) sym_v2 = SymVariable.shift(sym_v2, {"x": -1, "y": 2}) assert str(sym_v2) == "v(x - 1, y + 2)".replace(' ', '') assert sym_v2.evaluate({"x": 3, "y": 0}) == 4 assert str(self.sym_v) == "v(x, y)".replace(' ', '') assert self.sym_v.evaluate({"x": 3, "y": 0}) == 1
def test_mul(self): sym_v2 = copy.deepcopy(self.sym_v) sym_v2 = SymVariable.shift(sym_v2, {"x": -1, "y": 2}) sym_new = sym_v2 * self.sym_v assert str(sym_new) == "v(x, y)*v(x - 1, y + 2)".replace(' ', '') assert sym_new.evaluate({"x": 3, "y": 0}) == 4 sym_new = self.sym_v * self.sym_x assert str(sym_new) == "v(x, y)*x(x)".replace(' ', '')
class TestSymVariables(unittest.TestCase): def setUp(self): self.domain = Domain(lower_limits_dict={ "x": 0, "y": 0 }, upper_limits_dict={ "x": 5, "y": 6 }, step_width_dict={ "x": 1, "y": 1 }) self.f = np.zeros( (self.domain.get_shape("x")["x"], self.domain.get_shape("y")["y"])) self.g = np.zeros( (self.domain.get_shape("x")["x"], self.domain.get_shape("y")["y"])) for i, x in enumerate(self.domain.get_range("x")["x"]): for j, y in enumerate(self.domain.get_range("y")["y"]): self.f[i, j] = x**y self.g[i, j] = self.f[i, j] self.v = Variable(self.f, self.domain, domain2axis={ "x": 0, "y": 1 }, variable_name="v") self.w = Variable(self.g, self.domain, domain2axis={ "x": 0, "y": 1 }, variable_name="w") self.x = Variable(self.domain.get_range("x")["x"], self.domain.get_subdomain("x"), domain2axis={"x": 0}, variable_name="x") self.y = Variable(self.domain.get_range("y")["y"], self.domain.get_subdomain("y"), domain2axis={"y": 0}, variable_name="y") self.sym_v = SymVariable( *SymVariable.get_init_info_from_variable(self.v)) self.sym_w = SymVariable( *SymVariable.get_init_info_from_variable(self.w)) self.sym_x = SymVariable( *SymVariable.get_init_info_from_variable(self.x)) def test_init(self): assert str(self.sym_v) == "v(x, y)".replace(' ', '') assert self.sym_v.evaluate({"x": 0, "y": 0}) == 1 def test_shift(self): sym_v2 = copy.deepcopy(self.sym_v) sym_v2 = SymVariable.shift(sym_v2, {"x": -1, "y": 2}) assert str(sym_v2) == "v(x - 1, y + 2)".replace(' ', '') assert sym_v2.evaluate({"x": 3, "y": 0}) == 4 assert str(self.sym_v) == "v(x, y)".replace(' ', '') assert self.sym_v.evaluate({"x": 3, "y": 0}) == 1 def test_add(self): sym_v2 = copy.deepcopy(self.sym_v) sym_v2 = SymVariable.shift(sym_v2, {"x": -1, "y": 2}) sym_new = sym_v2 + self.sym_v assert str(sym_new) == "v(x, y) + v(x - 1, y + 2)".replace(' ', '') assert sym_new.evaluate({"x": 3, "y": 0}) == 5 sym_new = self.sym_v - self.sym_x assert str(sym_new) == "v(x, y) - x(x)".replace(' ', '') def test_sub(self): a = (self.sym_v - self.sym_w) assert str(a) == "v(x, y) - w(x, y)".replace(' ', '') assert str(self.sym_v - 2) == "v(x, y) - 2".replace(' ', '') def test_mul(self): sym_v2 = copy.deepcopy(self.sym_v) sym_v2 = SymVariable.shift(sym_v2, {"x": -1, "y": 2}) sym_new = sym_v2 * self.sym_v assert str(sym_new) == "v(x, y)*v(x - 1, y + 2)".replace(' ', '') assert sym_new.evaluate({"x": 3, "y": 0}) == 4 sym_new = self.sym_v * self.sym_x assert str(sym_new) == "v(x, y)*x(x)".replace(' ', '') def test_simplify(self): b = copy.deepcopy(self.sym_v) b.simplify() assert b == self.sym_v def test_pow(self): a = self.sym_v**self.sym_w assert str(a) == "v(x, y)**w(x, y)".replace(' ', '') a = self.sym_v**2 assert str(a) == "v(x, y)**2".replace(' ', '') a = 2**self.sym_v assert str(a) == "2**v(x, y)".replace(' ', '') def test_evaluate(self): a = copy.deepcopy(self.sym_v) assert a.evaluate({"x": 4, "y": 5}) == 4**5 assert str(a.evaluate({"x": 5, "y": 5})) == "v(5, 5)" assert len(sympy.solve(a.evaluate({"x": 5, "y": 5})**2 - 10)) == 2 if __name__ == '__main__': unittest.main()
def get_Xy_eq(self): X = self.get_X() X = SymField([SymVariable(x.name, SymVariable.get_init_info_from_variable(x)[1], x.domain) for x in X.data]) Y = self.get_y() Y = SymField([SymVariable(y.name, SymVariable.get_init_info_from_variable(y)[1], y.domain) for y in Y.data]) return X, Y
def sym_var_operator_func(self, sym_var): return SymVariable.shift(sym_var, {self.axis_name: -self.delay})