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, )
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)
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}") )
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))
def __neg__(self): """return a :class:`Negate` object""" return pybamm.simplify_if_constant(pybamm.Negate(self), keep_domains=True)
def __neg__(self): """return a :class:`Negate` object""" return pybamm.Negate(self)