Skip to content

Commit

Permalink
#1259 coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
valentinsulzer committed Feb 8, 2021
1 parent a8e7e86 commit cbe448a
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 40 deletions.
20 changes: 5 additions & 15 deletions pybamm/expression_tree/binary_operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,7 @@ def _binary_jac(self, left_jac, right_jac):
""" See :meth:`pybamm.BinaryOperator._binary_jac()`. """
# apply chain rule and power rule
left, right = self.orphans
if left.evaluates_to_constant_number() and right.evaluates_to_constant_number():
return pybamm.Scalar(0)
elif right.evaluates_to_constant_number():
if right.evaluates_to_constant_number():
return (right * left ** (right - 1)) * left_jac
elif left.evaluates_to_constant_number():
return (left ** right * pybamm.log(left)) * right_jac
Expand Down Expand Up @@ -292,9 +290,7 @@ def _binary_jac(self, left_jac, right_jac):
""" See :meth:`pybamm.BinaryOperator._binary_jac()`. """
# apply product rule
left, right = self.orphans
if left.evaluates_to_constant_number() and right.evaluates_to_constant_number():
return pybamm.Scalar(0)
elif left.evaluates_to_constant_number():
if left.evaluates_to_constant_number():
return left * right_jac
elif right.evaluates_to_constant_number():
return right * left_jac
Expand Down Expand Up @@ -375,9 +371,7 @@ def _binary_jac(self, left_jac, right_jac):
""" See :meth:`pybamm.BinaryOperator._binary_jac()`. """
# apply quotient rule
left, right = self.orphans
if left.evaluates_to_constant_number() and right.evaluates_to_constant_number():
return pybamm.Scalar(0)
elif left.evaluates_to_constant_number():
if left.evaluates_to_constant_number():
return -left / right ** 2 * right_jac
elif right.evaluates_to_constant_number():
return left_jac / right
Expand Down Expand Up @@ -430,9 +424,7 @@ def _binary_jac(self, left_jac, right_jac):
""" See :meth:`pybamm.BinaryOperator._binary_jac()`. """
# apply product rule
left, right = self.orphans
if left.evaluates_to_constant_number() and right.evaluates_to_constant_number():
return pybamm.Scalar(0)
elif left.evaluates_to_constant_number():
if left.evaluates_to_constant_number():
return left * right_jac
elif right.evaluates_to_constant_number():
return right * left_jac
Expand Down Expand Up @@ -573,9 +565,7 @@ def _binary_jac(self, left_jac, right_jac):
""" See :meth:`pybamm.BinaryOperator._binary_jac()`. """
# apply chain rule and power rule
left, right = self.orphans
if left.evaluates_to_constant_number() and right.evaluates_to_constant_number():
return pybamm.Scalar(0)
elif right.evaluates_to_constant_number():
if right.evaluates_to_constant_number():
return left_jac
elif left.evaluates_to_constant_number():
return -right_jac * pybamm.Floor(left / right)
Expand Down
4 changes: 0 additions & 4 deletions pybamm/expression_tree/broadcasts.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,6 @@ def __init__(
self.broadcast_domain = broadcast_domain
super().__init__(name, child, domain, auxiliary_domains)

def _unary_simplify(self, simplified_child):
""" See :meth:`pybamm.UnaryOperator.simplify()`. """
return self._unary_new_copy(simplified_child)


class PrimaryBroadcast(Broadcast):
"""A node in the expression tree representing a primary broadcasting operator.
Expand Down
22 changes: 1 addition & 21 deletions pybamm/expression_tree/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,22 +225,6 @@ def _function_new_copy(self, children):
),
)

def _function_simplify(self, simplified_children):
"""
Simplifies the function.
Inputs
------
simplified_children: : list
A list of simplified children of the function
Returns
-------
:: pybamm.Scalar() if no children
:: pybamm.Function if there are children
"""
return self._function_new_copy(simplified_children)


class SpecificFunction(Function):
"""
Expand All @@ -261,11 +245,7 @@ def __init__(self, function, child):

def _function_new_copy(self, children):
""" See :meth:`pybamm.Function._function_new_copy()` """
return self.__class__(*children)

def _function_simplify(self, simplified_children):
""" See :meth:`pybamm.Function._function_simplify()` """
return self.__class__(*simplified_children)
return pybamm.simplify_if_constant(self.__class__(*children))


class Arcsinh(SpecificFunction):
Expand Down
3 changes: 3 additions & 0 deletions tests/unit/test_expression_tree/test_binary_operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,9 @@ def test_binary_simplifications(self):
# division with matrix one
self.assertIsInstance((e / v1), pybamm.Array)
np.testing.assert_array_equal((e / v1).evaluate(), 2 * np.ones((10, 1)))
# division by zero
with self.assertRaises(ZeroDivisionError):
b / a

def test_advanced_binary_simplifications(self):
# MatMul simplifications that often appear when discretising spatial operators
Expand Down
8 changes: 8 additions & 0 deletions tests/unit/test_expression_tree/test_unary_operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,15 @@ def test_delta_function(self):
delta_a = pybamm.DeltaFunction(a, "right", "some domain")
self.assertEqual(delta_a.side, "right")
self.assertEqual(delta_a.child.id, a.id)
self.assertEqual(delta_a.domain, ["some domain"])
self.assertFalse(delta_a.evaluates_on_edges("primary"))

a = pybamm.Symbol("a", domain="some domain")
delta_a = pybamm.DeltaFunction(a, "left", "another domain")
self.assertEqual(delta_a.side, "left")
self.assertEqual(delta_a.domain, ["another domain"])
self.assertEqual(delta_a.auxiliary_domains, {"secondary": ["some domain"]})

with self.assertRaisesRegex(
pybamm.DomainError, "Delta function domain cannot be None"
):
Expand Down

0 comments on commit cbe448a

Please sign in to comment.