Source code for pyna.withparam

import sympy

[docs] class WithParam: def __init__(self, param_dict: dict = None) -> None: if param_dict is None: self.param_dict = dict() else: self.param_dict = param_dict # NOTE: pure virtual method @property
[docs] def free_symbols(self) -> sympy.sets.sets.FiniteSet: # Reference Implementation # from functools import reduce # from operator import or_ # return reduce(or_, [sympy.FiniteSet(*func.free_symbols) for func in self.diff_xi_exprs]) raise NotImplementedError()
# NOTE: pure virtual method @property
[docs] def free_params(self) -> sympy.sets.sets.FiniteSet: # Reference Implementation # return self.free_symbols - sympy.FiniteSet(*self.xi_syms) raise NotImplementedError()
@property
[docs] def param_dict(self): return self._param_dict
@param_dict.setter def param_dict(self, param_dict_:dict): # you can update the parameter dict, but must as a whole. if not isinstance(param_dict_, dict): raise ValueError("The param_dict arg must be a python dict object.") for key in param_dict_.keys(): if not key in self.free_symbols: raise ValueError("Your input `param_dict` contains some weird symbol(s) which do(es)n't appear in the function sympy expressions.") self._param_dict = param_dict_
[docs] def param_dict_cover_free_symbols(self) -> bool: if (self.free_params - sympy.FiniteSet( *self.param_dict.keys() )).is_empty: return True else: return False
from sympy.tensor.array import ImmutableDenseNDimArray
[docs] class ImmutableDenseNDimArrayWithParam(ImmutableDenseNDimArray, WithParam): def __new__(cls, arr: ImmutableDenseNDimArray, param_dict:dict = None) -> None: return ImmutableDenseNDimArray.__new__(cls, arr) def __init__(self, arr: ImmutableDenseNDimArray, param_dict:dict = None) -> None: WithParam.__init__(self, param_dict) @property
[docs] def free_symbols(self) -> sympy.sets.sets.FiniteSet: return ImmutableDenseNDimArray.free_symbols.fget(self)
@property
[docs] def free_params(self) -> sympy.sets.sets.FiniteSet: return self.free_symbols