| from sympy.core.basic import Basic |
| from sympy.stats.joint_rv import ProductPSpace |
| from sympy.stats.rv import ProductDomain, _symbol_converter, Distribution |
|
|
|
|
| class StochasticPSpace(ProductPSpace): |
| """ |
| Represents probability space of stochastic processes |
| and their random variables. Contains mechanics to do |
| computations for queries of stochastic processes. |
| |
| Explanation |
| =========== |
| |
| Initialized by symbol, the specific process and |
| distribution(optional) if the random indexed symbols |
| of the process follows any specific distribution, like, |
| in Bernoulli Process, each random indexed symbol follows |
| Bernoulli distribution. For processes with memory, this |
| parameter should not be passed. |
| """ |
|
|
| def __new__(cls, sym, process, distribution=None): |
| sym = _symbol_converter(sym) |
| from sympy.stats.stochastic_process_types import StochasticProcess |
| if not isinstance(process, StochasticProcess): |
| raise TypeError("`process` must be an instance of StochasticProcess.") |
| if distribution is None: |
| distribution = Distribution() |
| return Basic.__new__(cls, sym, process, distribution) |
|
|
| @property |
| def process(self): |
| """ |
| The associated stochastic process. |
| """ |
| return self.args[1] |
|
|
| @property |
| def domain(self): |
| return ProductDomain(self.process.index_set, |
| self.process.state_space) |
|
|
| @property |
| def symbol(self): |
| return self.args[0] |
|
|
| @property |
| def distribution(self): |
| return self.args[2] |
|
|
| def probability(self, condition, given_condition=None, evaluate=True, **kwargs): |
| """ |
| Transfers the task of handling queries to the specific stochastic |
| process because every process has their own logic of handling such |
| queries. |
| """ |
| return self.process.probability(condition, given_condition, evaluate, **kwargs) |
|
|
| def compute_expectation(self, expr, condition=None, evaluate=True, **kwargs): |
| """ |
| Transfers the task of handling queries to the specific stochastic |
| process because every process has their own logic of handling such |
| queries. |
| """ |
| return self.process.expectation(expr, condition, evaluate, **kwargs) |
|
|