コード例 #1
0
    def test_negation(self):
        a = pybamm.Symbol("a")
        nega = pybamm.Negate(a)
        self.assertEqual(nega.name, "-")
        self.assertEqual(nega.children[0].name, a.name)

        b = pybamm.Scalar(4)
        negb = pybamm.Negate(b)
        self.assertEqual(negb.evaluate(), -4)

        # Test broadcast gets switched
        broad_a = pybamm.PrimaryBroadcast(a, "test")
        neg_broad = -broad_a
        self.assertEqual(neg_broad.id,
                         pybamm.PrimaryBroadcast(nega, "test").id)

        broad_a = pybamm.FullBroadcast(a, "test", "test2")
        neg_broad = -broad_a
        self.assertEqual(neg_broad.id,
                         pybamm.FullBroadcast(nega, "test", "test2").id)

        # Test recursion
        broad_a = pybamm.PrimaryBroadcast(pybamm.PrimaryBroadcast(a, "test"),
                                          "test2")
        neg_broad = -broad_a
        self.assertEqual(
            neg_broad.id,
            pybamm.PrimaryBroadcast(pybamm.PrimaryBroadcast(nega, "test"),
                                    "test2").id,
        )
コード例 #2
0
    def test_negation(self):
        a = pybamm.Symbol("a")
        nega = pybamm.Negate(a)
        self.assertEqual(nega.name, "-")
        self.assertEqual(nega.children[0].name, a.name)

        b = pybamm.Scalar(4)
        negb = pybamm.Negate(b)
        self.assertEqual(negb.evaluate(), -4)
コード例 #3
0
    def test_to_equation(self):
        a = pybamm.Symbol("a", domain="negative particle")
        b = pybamm.Symbol("b", domain="current collector")
        c = pybamm.Symbol("c", domain="test")

        # Test print_name
        pybamm.Floor.print_name = "test"
        self.assertEqual(pybamm.Floor(-2.5).to_equation(), sympy.symbols("test"))

        # Test Negate
        self.assertEqual(pybamm.Negate(4).to_equation(), -4.0)

        # Test AbsoluteValue
        self.assertEqual(pybamm.AbsoluteValue(-4).to_equation(), 4.0)

        # Test Gradient
        self.assertEqual(pybamm.Gradient(a).to_equation(), sympy_Gradient("a"))

        # Test Divergence
        self.assertEqual(
            pybamm.Divergence(pybamm.Gradient(a)).to_equation(),
            sympy_Divergence(sympy_Gradient(a)),
        )

        # Test BoundaryValue
        self.assertEqual(
            pybamm.BoundaryValue(a, "right").to_equation(), sympy.symbols("a^{surf}")
        )
        self.assertEqual(
            pybamm.BoundaryValue(b, "positive tab").to_equation(), sympy.symbols(str(b))
        )
        self.assertEqual(
            pybamm.BoundaryValue(c, "left").to_equation(), sympy.symbols("c^{left}")
        )
コード例 #4
0
 def __neg__(self):
     """return a :class:`Negate` object."""
     if isinstance(self, pybamm.Negate):
         # Double negative is a positive
         return self.orphans[0]
     elif isinstance(self, pybamm.Broadcast):
         # Move negation inside the broadcast
         # Apply recursively
         return self._unary_new_copy(-self.orphans[0])
     elif isinstance(self, pybamm.Concatenation) and all(
             child.is_constant() for child in self.children):
         return pybamm.concatenation(*[-child for child in self.orphans])
     else:
         return pybamm.simplify_if_constant(pybamm.Negate(self))
コード例 #5
0
ファイル: symbol.py プロジェクト: soroscaliban/PyBaMM
 def __neg__(self):
     """return a :class:`Negate` object"""
     return pybamm.simplify_if_constant(pybamm.Negate(self),
                                        keep_domains=True)
コード例 #6
0
 def __neg__(self):
     """return a :class:`Negate` object"""
     return pybamm.Negate(self)