Source code for momba.model.distributions

# -*- coding:utf-8 -*-
#
# Copyright (C) 2019-2021, Saarland University
# Copyright (C) 2019-2021, Maximilian Köhl <koehl@cs.uni-saarland.de>

from __future__ import annotations

import typing as t

import enum

from . import types


_JANI_NAME_MAP: t.Dict[str, DistributionType] = {}


[docs] class DistributionType(enum.Enum): """ An enum of distribution type. """ DISCRETE_UNIFORM = ( "DiscreteUniform", ( types.INT, types.INT, ), types.INT, ) """ Discrete uniform distribution. """ BERNOULLI = "Bernoulli", (types.REAL,) """ Bernoulli distribution. """ BINOMIAL = "Binomial", (types.REAL,) """ Binomial distribution. """ NEGATIVE_BINOMIAL = ( "NegativeBinomial", ( types.REAL, types.REAL, ), ) """ Negative binomial distribution. """ POISSON = "Poisson", (types.REAL,) """ Poisson distribution. """ GEOMETRIC = "Geometric", (types.REAL,) """ Geometric distribution. """ HYPERGEOMETRIC = ( "Hypergeometric", ( types.INT, types.INT, types.INT, ), ) """ Hypergeometric distribution. """ CONWAY_MAXWELL_POISSON = ( "ConwayMaxwellPoisson", ( types.REAL, types.REAL, ), ) """ Conway Maxwell Poisson distribution. """ ZIPF = "ZipF", (types.REAL,) """ ZipF distribution. """ UNIFORM = ( "Uniform", ( types.REAL, types.REAL, ), ) """ Uniform distribution. """ NORMAL = ( "Normal", ( types.REAL, types.REAL, ), ) """ Normal distribution. """ LOG_NORMAL = ( "LogNormal", ( types.REAL, types.REAL, ), ) """ Logarithmic normal distribution. """ BETA = ( "Beta", ( types.REAL, types.REAL, ), ) """ Beta distribution. """ CAUCHY = ( "Cauchy", ( types.REAL, types.REAL, ), ) """ Cauchy distribution. """ CHI = "Chi", (types.INT,) """ Chi distribution. """ CHI_SQUARED = "ChiSquared", (types.INT,) """ Chi squared distribution. """ ERLANG = ( "Erlang", ( types.INT, types.REAL, ), ) """ Erlang distribution. """ EXPONENTIAL = "Exponential", (types.REAL,) """ Exponential distribution. """ FISHER_SNEDECOR = ( "FisherSnedecor", ( types.REAL, types.REAL, ), ) """ Fisher Snedecor distribution. """ GAMMA = ( "Gamma", ( types.REAL, types.REAL, ), ) """ Gamma distribution. """ INVERSE_GAMMA = ( "InverseGamma", ( types.REAL, types.REAL, ), ) """ Inverse gamma distribution. """ LAPLACE = ( "Laplace", ( types.REAL, types.REAL, ), ) """ Laplace distribution. """ PARETO = ( "Pareto", ( types.REAL, types.REAL, ), ) """ Pareto distribution. """ RAYLEIGH = "Rayleigh", (types.REAL,) """ Rayleigh distribution. """ STABLE = ( "Stable", ( types.REAL, types.REAL, types.REAL, types.REAL, ), ) """ Stable distribution. """ STUDENT_T = ( "StudentT", ( types.REAL, types.REAL, types.REAL, ), ) """ StudentT distribution. """ WEIBULL = ( "Weibull", ( types.REAL, types.REAL, ), ) """ Weibull distribution. """ TRIANGULAR = ( "Triangular", ( types.REAL, types.REAL, types.REAL, ), ) """ Triangular distribution. """ jani_name: str parameter_types: t.Tuple[types.Type, ...] result_type: types.Type def __init__( self, jani_name: str, parameter_types: t.Tuple[types.Type, ...], result_type: types.Type = types.REAL, ) -> None: _JANI_NAME_MAP[jani_name] = self self.jani_name = jani_name self.parameter_types = parameter_types self.result_type = result_type @property def arity(self) -> int: return len(self.parameter_types) @staticmethod def by_name(jani_name: str) -> DistributionType: return _JANI_NAME_MAP[jani_name]