Skip to content

Discrete

Univariate distributions over {0, 1}, the non-negative integers, or a fixed-size category set.

Bernoulli(*, probs=None, logits=None, name)

Bases: TFPDistribution

Bernoulli distribution.

Parameters:

Name Type Description Default
probs array - like

Probability of a 1 outcome. Exactly one of probs or logits must be provided.

None
logits array - like

Log-odds of a 1 outcome.

None
name str

Distribution name.

required
Source code in probpipe/distributions/discrete.py
def __init__(
    self,
    *,
    probs: ArrayLike | None = None,
    logits: ArrayLike | None = None,
    name: str,
):
    if (probs is None) == (logits is None):
        raise ValueError("Exactly one of probs or logits must be provided.")
    if probs is not None:
        self._probs = _as_float_array(probs)
        self._logits = None
        self._tfp_dist = tfd.Bernoulli(probs=self._probs)
    else:
        self._logits = _as_float_array(logits)
        self._probs = None
        self._tfp_dist = tfd.Bernoulli(logits=self._logits)
    super().__init__(name=name)

Binomial(total_count, *, probs=None, logits=None, name)

Bases: TFPDistribution

Binomial distribution.

Parameters:

Name Type Description Default
total_count array - like

Number of trials.

required
probs array - like

Probability of success per trial. Exactly one of probs or logits must be provided.

None
logits array - like

Log-odds of success per trial.

None
name str

Distribution name.

required
Source code in probpipe/distributions/discrete.py
def __init__(
    self,
    total_count: ArrayLike,
    *,
    probs: ArrayLike | None = None,
    logits: ArrayLike | None = None,
    name: str,
):
    if (probs is None) == (logits is None):
        raise ValueError("Exactly one of probs or logits must be provided.")
    if probs is not None:
        _, (self._total_count, self._probs) = _promote_floats(total_count, probs)
        self._logits = None
        self._tfp_dist = tfd.Binomial(
            total_count=self._total_count, probs=self._probs
        )
    else:
        _, (self._total_count, self._logits) = _promote_floats(total_count, logits)
        self._probs = None
        self._tfp_dist = tfd.Binomial(
            total_count=self._total_count, logits=self._logits
        )
    super().__init__(name=name)

Poisson(rate, *, name)

Bases: TFPDistribution

Poisson distribution.

Parameters:

Name Type Description Default
rate array - like

Rate parameter (must be positive).

required
name str

Distribution name.

required
Source code in probpipe/distributions/discrete.py
def __init__(
    self,
    rate: ArrayLike,
    *,
    name: str,
):
    self._rate = _as_float_array(rate)
    self._tfp_dist = tfd.Poisson(rate=self._rate)
    super().__init__(name=name)

Categorical(*, probs=None, logits=None, name)

Bases: TFPDistribution

Categorical distribution over k classes.

Parameters:

Name Type Description Default
probs array - like

Probabilities for each category. Exactly one of probs or logits must be provided.

None
logits array - like

Unnormalized log-probabilities for each category.

None
name str

Distribution name.

required
Source code in probpipe/distributions/discrete.py
def __init__(
    self,
    *,
    probs: ArrayLike | None = None,
    logits: ArrayLike | None = None,
    name: str,
):
    if (probs is None) == (logits is None):
        raise ValueError("Exactly one of probs or logits must be provided.")
    if probs is not None:
        self._probs = _as_float_array(probs)
        self._logits = None
        self._tfp_dist = tfd.Categorical(probs=self._probs)
    else:
        self._logits = _as_float_array(logits)
        self._probs = None
        self._tfp_dist = tfd.Categorical(logits=self._logits)
    super().__init__(name=name)

NegativeBinomial(total_count, *, probs=None, logits=None, name)

Bases: TFPDistribution

Negative binomial distribution.

Parameters:

Name Type Description Default
total_count array - like

Number of successes before stopping.

required
probs array - like

Probability of success per trial. Exactly one of probs or logits must be provided.

None
logits array - like

Log-odds of success per trial.

None
name str

Distribution name.

required
Source code in probpipe/distributions/discrete.py
def __init__(
    self,
    total_count: ArrayLike,
    *,
    probs: ArrayLike | None = None,
    logits: ArrayLike | None = None,
    name: str,
):
    if (probs is None) == (logits is None):
        raise ValueError("Exactly one of probs or logits must be provided.")
    if probs is not None:
        _, (self._total_count, self._probs) = _promote_floats(total_count, probs)
        self._logits = None
        self._tfp_dist = tfd.NegativeBinomial(
            total_count=self._total_count, probs=self._probs
        )
    else:
        _, (self._total_count, self._logits) = _promote_floats(total_count, logits)
        self._probs = None
        self._tfp_dist = tfd.NegativeBinomial(
            total_count=self._total_count, logits=self._logits
        )
    super().__init__(name=name)