123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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)
|