Exemple #1
0
    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()
Exemple #7
0
 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
Exemple #8
0
 def sym_var_operator_func(self, sym_var):
     return SymVariable.shift(sym_var, {self.axis_name: -self.delay})