Spaces:
Running
Running
from functools import singledispatch | |
from sympy.external import import_module | |
from sympy.stats.crv_types import BetaDistribution, CauchyDistribution, ChiSquaredDistribution, ExponentialDistribution, \ | |
GammaDistribution, LogNormalDistribution, NormalDistribution, ParetoDistribution, UniformDistribution, \ | |
GaussianInverseDistribution | |
from sympy.stats.drv_types import PoissonDistribution, GeometricDistribution, NegativeBinomialDistribution | |
from sympy.stats.frv_types import BinomialDistribution, BernoulliDistribution | |
try: | |
import pymc | |
except ImportError: | |
pymc = import_module('pymc3') | |
def do_sample_pymc(dist): | |
return None | |
# CRV: | |
def _(dist: BetaDistribution): | |
return pymc.Beta('X', alpha=float(dist.alpha), beta=float(dist.beta)) | |
def _(dist: CauchyDistribution): | |
return pymc.Cauchy('X', alpha=float(dist.x0), beta=float(dist.gamma)) | |
def _(dist: ChiSquaredDistribution): | |
return pymc.ChiSquared('X', nu=float(dist.k)) | |
def _(dist: ExponentialDistribution): | |
return pymc.Exponential('X', lam=float(dist.rate)) | |
def _(dist: GammaDistribution): | |
return pymc.Gamma('X', alpha=float(dist.k), beta=1 / float(dist.theta)) | |
def _(dist: LogNormalDistribution): | |
return pymc.Lognormal('X', mu=float(dist.mean), sigma=float(dist.std)) | |
def _(dist: NormalDistribution): | |
return pymc.Normal('X', float(dist.mean), float(dist.std)) | |
def _(dist: GaussianInverseDistribution): | |
return pymc.Wald('X', mu=float(dist.mean), lam=float(dist.shape)) | |
def _(dist: ParetoDistribution): | |
return pymc.Pareto('X', alpha=float(dist.alpha), m=float(dist.xm)) | |
def _(dist: UniformDistribution): | |
return pymc.Uniform('X', lower=float(dist.left), upper=float(dist.right)) | |
# DRV: | |
def _(dist: GeometricDistribution): | |
return pymc.Geometric('X', p=float(dist.p)) | |
def _(dist: NegativeBinomialDistribution): | |
return pymc.NegativeBinomial('X', mu=float((dist.p * dist.r) / (1 - dist.p)), | |
alpha=float(dist.r)) | |
def _(dist: PoissonDistribution): | |
return pymc.Poisson('X', mu=float(dist.lamda)) | |
# FRV: | |
def _(dist: BernoulliDistribution): | |
return pymc.Bernoulli('X', p=float(dist.p)) | |
def _(dist: BinomialDistribution): | |
return pymc.Binomial('X', n=int(dist.n), p=float(dist.p)) | |