# -*- 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]