pybamm.
Symbol
(name, children=None, domain=None, auxiliary_domains=None)[source]¶Base node class for the expression tree
Parameters: |
|
---|
__abs__
()[source]¶return an AbsoluteValue
object
__ge__
(other)[source]¶return a EqualHeaviside
object
__gt__
(other)[source]¶return a NotEqualHeaviside
object
__init__
(name, children=None, domain=None, auxiliary_domains=None)[source]¶Initialize self. See help(type(self)) for accurate signature.
__le__
(other)[source]¶return a EqualHeaviside
object
__lt__
(other)[source]¶return a NotEqualHeaviside
object
__matmul__
(other)[source]¶return a MatrixMultiplication
object
__mul__
(other)[source]¶return a Multiplication
object
__rmatmul__
(other)[source]¶return a MatrixMultiplication
object
__rmul__
(other)[source]¶return a Multiplication
object
__rsub__
(other)[source]¶return a Subtraction
object
__sub__
(other)[source]¶return a Subtraction
object
auxiliary_domains
¶Returns domains that are not the primary domain
children
¶returns the cached children of this node.
Note: it is assumed that children of a node are not modified after initial creation
diff
(variable)[source]¶Differentiate a symbol with respect to a variable. For any symbol that can be differentiated, return 1 if differentiating with respect to yourself, self._diff(variable) if variable is in the expression tree of the symbol, and zero otherwise.
Parameters: | variable (pybamm.Symbol ) – The variable with respect to which to differentiate |
---|
domain
¶list of applicable domains
Returns: | |
---|---|
Return type: | iterable of str |
evaluate
(t=None, y=None, y_dot=None, inputs=None, known_evals=None)[source]¶Evaluate expression tree (wrapper to allow using dict of known values).
If the dict ‘known_evals’ is provided, the dict is searched for self.id; if
self.id is in the keys, return that value; otherwise, evaluate using
_base_evaluate()
and add that value to known_evals
Parameters: |
|
---|---|
Returns: |
|
evaluate_for_shape
()[source]¶Evaluate expression tree to find its shape. For symbols that cannot be
evaluated directly (e.g. Variable or Parameter), a vector of the appropriate
shape is returned instead, using the symbol’s domain.
See pybamm.Symbol.evaluate()
evaluate_ignoring_errors
(t=0)[source]¶Evaluates the expression. If a node exists in the tree that cannot be evaluated as a scalar or vector (e.g. Time, Parameter, Variable, StateVector), then None is returned. If there is an InputParameter in the tree then a 1 is returned. Otherwise the result of the evaluation is given.
See also
evaluate()
evaluates_on_edges
(dimension)[source]¶Returns True if a symbol evaluates on an edge, i.e. symbol contains a gradient operator, but not a divergence operator, and is not an IndefiniteIntegral.
Parameters: | dimension (str) – The dimension (primary, secondary, etc) in which to query evaluation on edges |
---|---|
Returns: | Whether the symbol evaluates on edges (in the finite volume discretisation sense) |
Return type: | bool |
evaluates_to_number
()[source]¶Returns True if evaluating the expression returns a number. Returns False otherwise, including if NotImplementedError or TyperError is raised. !Not to be confused with isinstance(self, pybamm.Scalar)!
See also
evaluate()
get_children_auxiliary_domains
(children)[source]¶Combine auxiliary domains from children, at all levels
has_symbol_of_classes
(symbol_classes)[source]¶Returns True if equation has a term of the class(es) symbol_class.
Parameters: | symbol_classes (pybamm class or iterable of classes) – The classes to test the symbol against |
---|
is_constant
()[source]¶returns true if evaluating the expression is not dependent on t or y or u
See also
evaluate()
jac
(variable, known_jacs=None, clear_domain=True)[source]¶Differentiate a symbol with respect to a (slice of) a StateVector
or StateVectorDot.
See pybamm.Jacobian
.
name
¶name of the node
new_copy
()[source]¶Make a new copy of a symbol, to avoid Tree corruption errors while bypassing copy.deepcopy(), which is slow.
orphans
¶Returning new copies of the children, with parents removed to avoid corrupting the expression tree internal data
pre_order
()[source]¶returns an iterable that steps through the tree in pre-order fashion
Examples
>>> import pybamm
>>> a = pybamm.Symbol('a')
>>> b = pybamm.Symbol('b')
>>> for node in (a*b).pre_order():
... print(node.name)
*
a
b
relabel_tree
(symbol, counter)[source]¶Finds all children of a symbol and assigns them a new id so that they can be visualised properly using the graphviz output
secondary_domain
¶Helper function to get the secondary domain of a symbol
set_id
()[source]¶Set the immutable “identity” of a variable (e.g. for identifying y_slices).
This is identical to what we’d put in a __hash__ function However, implementing __hash__ requires also implementing __eq__, which would then mess with loop-checking in the anytree module.
Hashing can be slow, so we set the id when we create the node, and hence only need to hash once.
shape
¶Shape of an object, found by evaluating it with appropriate t and y.
shape_for_testing
¶Shape of an object for cases where it cannot be evaluated directly. If a symbol cannot be evaluated directly (e.g. it is a Variable or Parameter), it is instead given an arbitrary domain-dependent shape.
simplify
(simplified_symbols=None)[source]¶Simplify the expression tree. See pybamm.Simplification
.
size
¶Size of an object, found by evaluating it with appropriate t and y
size_for_testing
¶Size of an object, based on shape for testing
test_shape
()[source]¶Check that the discretised self has a pybamm shape, i.e. can be evaluated
Raises: | pybamm.ShapeError – If the shape of the object cannot be found |
---|
to_casadi
(t=None, y=None, y_dot=None, inputs=None, casadi_symbols=None)[source]¶Convert the expression tree to a CasADi expression tree.
See pybamm.CasadiConverter
.