Source code for stream.substances.mocks

"""
Mock Substances, whose properties are mostly just 1's
"""

from functools import partial

import numpy as np

from stream.calculations.heat_diffusion import Solid
from stream.substances import Liquid, LiquidFuncs
from stream.units import Celsius, Pascal
from stream.utilities import uniform_dataclass

mock_liquid_funcs = uniform_dataclass(LiquidFuncs, np.ones_like)
mock_liquid = uniform_dataclass(Liquid, 1.0)
mock_solid = uniform_dataclass(Solid, 1.0)


[docs] def constant_LiquidFuncs(fluid: LiquidFuncs, T: Celsius, p: Pascal) -> LiquidFuncs: r"""Create a constant-valued :class:`.LiquidFuncs` based on a given instance at a (T, p) phase-space point. T, p are taken as at_least1d to allow compatibility with vector operations. Parameters ---------- fluid: LiquidFuncs Model fluid to be evaluated. T: Celsius Temperature. p: Pascal Pressure. Returns ------- const_fluid: LiquidFuncs A LiquidFuncs which always returns the same value for each parameter. Examples -------- >>> from stream.substances import light_water >>> clf = constant_LiquidFuncs(light_water, T=20., p=1e5) >>> bool(clf.density(20.) == clf.density(80.) == light_water.density(20.)) True >>> clf.density(np.zeros(4)) / clf.density(20) array([1., 1., 1., 1.]) """ evaluated = fluid.to_properties(np.atleast_1d(T), np.atleast_1d(p)) # noinspection PyUnresolvedReferences return LiquidFuncs( **{ fld: partial(np.full_like, fill_value=getattr(evaluated, fld), dtype=float) for fld in LiquidFuncs.__dataclass_fields__ } )