Source code for pybamm.expression_tree.scalar

#
# Scalar class
#
from __future__ import annotations
import numpy as np
import sympy
from typing import Literal

import pybamm
from pybamm.type_definitions import Numeric


[docs] class Scalar(pybamm.Symbol): """ A node in the expression tree representing a scalar value. Parameters ---------- value : numeric the value returned by the node when evaluated name : str, optional the name of the node. Defaulted to ``str(value)`` if not provided """ def __init__( self, value: Numeric, name: str | None = None, ) -> None: # set default name if not provided self.value = value if name is None: name = str(self.value) super().__init__(name) @classmethod def _from_json(cls, snippet: dict): return cls(snippet["value"], name=snippet["name"]) def __str__(self): return str(self.value) @property def value(self): """The value returned by the node when evaluated.""" return self._value # address numpy 1.25 deprecation warning: array should have ndim=0 before conversion @value.setter def value(self, value): self._value = ( np.float64(value.item()) if isinstance(value, np.ndarray) else np.float64(value) )
[docs] def set_id(self): """See :meth:`pybamm.Symbol.set_id()`.""" # We must include the value in the hash, since different scalars can be # indistinguishable by class and name alone self._id = hash((self.__class__, str(self.value)))
def _base_evaluate( self, t: float | None = None, y: np.ndarray | None = None, y_dot: np.ndarray | None = None, inputs: dict | str | None = None, ): """See :meth:`pybamm.Symbol._base_evaluate()`.""" return self._value def _jac(self, variable: pybamm.Variable) -> pybamm.Scalar: """See :meth:`pybamm.Symbol._jac()`.""" return pybamm.Scalar(0)
[docs] def create_copy(self): """See :meth:`pybamm.Symbol.new_copy()`.""" return Scalar(self.value, self.name)
[docs] def is_constant(self) -> Literal[True]: """See :meth:`pybamm.Symbol.is_constant()`.""" return True
[docs] def to_equation(self): """Returns the value returned by the node when evaluated.""" if self.print_name is not None: return sympy.Symbol(self.print_name) else: return self.value
[docs] def to_json(self): """ Method to serialise a Symbol object into JSON. """ json_dict = {"name": self.name, "id": self.id, "value": self.value} return json_dict