Exemplo n.º 1
0
 def probability(self, condition, **kwargs):
     cond_inv = False
     if isinstance(condition, Ne):
         condition = Eq(condition.args[0], condition.args[1])
         cond_inv = True
     elif isinstance(condition, And):  # they are independent
         return Mul(*[self.probability(arg) for arg in condition.args])
     elif isinstance(condition, Or):  # they are independent
         return Add(*[self.probability(arg) for arg in condition.args])
     expr = condition.lhs - condition.rhs
     rvs = random_symbols(expr)
     dens = self.compute_density(expr)
     if any([pspace(rv).is_Continuous for rv in rvs]):
         from sympy.stats.crv import SingleContinuousPSpace
         from sympy.stats.crv_types import ContinuousDistributionHandmade
         if expr in self.values:
             # Marginalize all other random symbols out of the density
             randomsymbols = tuple(set(self.values) - frozenset([expr]))
             symbols = tuple(rs.symbol for rs in randomsymbols)
             pdf = self.domain.integrate(self.pdf, symbols, **kwargs)
             return Lambda(expr.symbol, pdf)
         dens = ContinuousDistributionHandmade(dens)
         z = Dummy('z', real=True)
         space = SingleContinuousPSpace(z, dens)
         result = space.probability(condition.__class__(space.value, 0))
     else:
         from sympy.stats.drv import SingleDiscretePSpace
         from sympy.stats.drv_types import DiscreteDistributionHandmade
         dens = DiscreteDistributionHandmade(dens)
         z = Dummy('z', integer=True)
         space = SingleDiscretePSpace(z, dens)
         result = space.probability(condition.__class__(space.value, 0))
     return result if not cond_inv else S.One - result
Exemplo n.º 2
0
 def __new__(cls, sym, dist):
     sym = sympify(sym)
     if isinstance(dist, SingleContinuousDistribution):
         return SingleContinuousPSpace(sym, dist)
     if isinstance(dist, SingleDiscreteDistribution):
         return SingleDiscretePSpace(sym, dist)
     return Basic.__new__(cls, sym, dist)
Exemplo n.º 3
0
 def __new__(cls, sym, dist):
     if isinstance(dist, SingleContinuousDistribution):
         return SingleContinuousPSpace(sym, dist)
     if isinstance(dist, SingleDiscreteDistribution):
         return SingleDiscretePSpace(sym, dist)
     sym = _symbol_converter(sym)
     return Basic.__new__(cls, sym, dist)
Exemplo n.º 4
0
def rv(symbol, cls, *args):
    args = list(map(sympify, args))
    dist = cls(*args)
    dist.check(*args)
    pspace = SingleDiscretePSpace(symbol, dist)
    if any(isinstance(arg, RandomSymbol) for arg in args):
        pspace = JointPSpace(symbol, CompoundDistribution(dist))
    return pspace.value
Exemplo n.º 5
0
 def pdf(self, *x):
     dist = self.args[0]
     z = Dummy('z')
     if isinstance(dist, ContinuousDistribution):
         rv = SingleContinuousPSpace(z, dist).value
     elif isinstance(dist, DiscreteDistribution):
         rv = SingleDiscretePSpace(z, dist).value
     return MarginalDistribution(self, (rv,)).pdf(*x)
Exemplo n.º 6
0
def rv(symbol, cls, *args):
    args = list(map(sympify, args))
    dist = cls(*args)
    dist.check(*args)
    pspace = SingleDiscretePSpace(symbol, dist)
    if any(is_random(arg) for arg in args):
        from sympy.stats.compound_rv import CompoundPSpace, CompoundDistribution
        pspace = CompoundPSpace(symbol, CompoundDistribution(dist))
    return pspace.value
Exemplo n.º 7
0
 def __new__(cls, sym, dist):
     if isinstance(dist, SingleContinuousDistribution):
         return SingleContinuousPSpace(sym, dist)
     if isinstance(dist, SingleDiscreteDistribution):
         return SingleDiscretePSpace(sym, dist)
     if isinstance(sym, str):
         sym = Symbol(sym)
     if not isinstance(sym, Symbol):
         raise TypeError("s should have been string or Symbol")
     return Basic.__new__(cls, sym, dist)
Exemplo n.º 8
0
 def __new__(cls, s, distribution):
     s = _symbol_converter(s)
     if isinstance(distribution, ContinuousDistribution):
         return SingleContinuousPSpace(s, distribution)
     if isinstance(distribution, DiscreteDistribution):
         return SingleDiscretePSpace(s, distribution)
     if isinstance(distribution, SingleFiniteDistribution):
         return SingleFinitePSpace(s, distribution)
     if not isinstance(distribution, CompoundDistribution):
         raise ValueError("%s should be an isinstance of "
                     "CompoundDistribution"%(distribution))
     return Basic.__new__(cls, s, distribution)
Exemplo n.º 9
0
 def _transform_pspace(self, sym, dist, pdf):
     """
     This function returns the new pspace of the distribution using handmade
     Distributions and their corresponding pspace.
     """
     pdf = Lambda(sym, pdf(sym))
     _set = dist.set
     if isinstance(dist, ContinuousDistribution):
         return SingleContinuousPSpace(sym, ContinuousDistributionHandmade(pdf, _set))
     elif isinstance(dist, DiscreteDistribution):
         return SingleDiscretePSpace(sym, DiscreteDistributionHandmade(pdf, _set))
     elif isinstance(dist, SingleFiniteDistribution):
         dens = dict((k, pdf(k)) for k in _set)
         return SingleFinitePSpace(sym, FiniteDistributionHandmade(dens))
Exemplo n.º 10
0
def rv(symbol, cls, *args):
    args = list(map(sympify, args))
    dist = cls(*args)
    dist.check(*args)
    return SingleDiscretePSpace(symbol, dist).value