Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion pytensor_distributions/asymmetriclaplace.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,9 @@ def isf(x, mu, b, kappa):


def rvs(mu, b, kappa, size=None, random_state=None):
random_samples = pt.random.uniform(-kappa, 1 / kappa, size=size, rng=random_state)
random_samples = pt.random.uniform(
-kappa, 1 / kappa, size=size, rng=random_state, return_next_rng=True
)[1]
sgn = pt.sign(random_samples)
return mu - (1 / (1 / b * sgn * pt.power(kappa, sgn))) * pt.log(
1 - random_samples * sgn * pt.power(kappa, sgn)
Expand Down
6 changes: 3 additions & 3 deletions pytensor_distributions/bernoulli.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytensor.tensor as pt
from pytensor.tensor.xlogx import xlogx
from pytensor.tensor.special import xlogy

from pytensor_distributions.helper import cdf_bounds, ppf_bounds_disc

Expand Down Expand Up @@ -51,11 +51,11 @@ def lmoment4(p):

def entropy(p):
q = 1 - p
return -xlogx(p) - xlogx(q)
return -xlogy(p, p) - xlogy(q, q)


def rvs(p, size=None, random_state=None):
return pt.random.binomial(1, p, size=size, rng=random_state)
return pt.random.binomial(1, p, size=size, rng=random_state, return_next_rng=True)[1]


def cdf(x, p):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/beta.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def sf(x, alpha, beta):


def rvs(alpha, beta, size=None, random_state=None):
return pt.random.beta(alpha, beta, rng=random_state, size=size)
return pt.random.beta(alpha, beta, rng=random_state, size=size, return_next_rng=True)[1]


def logcdf(x, alpha, beta):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/betabinomial.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def isf(x, n, alpha, beta):


def rvs(n, alpha, beta, size=None, random_state=None):
return pt.random.betabinom(n, alpha, beta, size=size, rng=random_state)
return pt.random.betabinom(n, alpha, beta, size=size, rng=random_state, return_next_rng=True)[1]


def logcdf(x, n, alpha, beta):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/betascaled.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def sf(x, alpha, beta, lower, upper):


def rvs(alpha, beta, lower, upper, size=None, random_state=None):
beta_samples = pt.random.beta(alpha, beta, rng=random_state, size=size)
beta_samples = pt.random.beta(alpha, beta, rng=random_state, size=size, return_next_rng=True)[1]
return beta_samples * (upper - lower) + lower


Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/binomial.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def isf(q, n, p):


def rvs(n, p, size=None, random_state=None):
return pt.random.binomial(n, p, size=size, rng=random_state)
return pt.random.binomial(n, p, size=size, rng=random_state, return_next_rng=True)[1]


def logpdf(x, n, p):
Expand Down
6 changes: 3 additions & 3 deletions pytensor_distributions/categorical.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytensor.tensor as pt
from pytensor.tensor.xlogx import xlogx
from pytensor.tensor.special import xlogy

from pytensor_distributions.helper import cdf_bounds, ppf_bounds_disc

Expand Down Expand Up @@ -54,7 +54,7 @@ def kurtosis(p):

def entropy(p):
p = _normalize_p(p)
return -pt.sum(xlogx(p), axis=-1)
return -pt.sum(xlogy(p, p), axis=-1)


def pdf(x, p):
Expand Down Expand Up @@ -114,4 +114,4 @@ def isf(q, p):

def rvs(p, size=None, random_state=None):
p = _normalize_p(p)
return pt.random.categorical(p, size=size, rng=random_state)
return pt.random.categorical(p, size=size, rng=random_state, return_next_rng=True)[1]
2 changes: 1 addition & 1 deletion pytensor_distributions/cauchy.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def sf(x, alpha, beta):


def rvs(alpha, beta, size=None, random_state=None):
return pt.random.cauchy(alpha, beta, rng=random_state, size=size)
return pt.random.cauchy(alpha, beta, rng=random_state, size=size, return_next_rng=True)[1]


def logcdf(x, alpha, beta):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/chisquared.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def pdf(x, nu):


def rvs(nu, size=None, random_state=None):
return pt.random.chisquare(nu, rng=random_state, size=size)
return pt.random.chisquare(nu, rng=random_state, size=size, return_next_rng=True)[1]


def logcdf(x, nu):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/dirichlet.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,4 @@ def logpdf(x, alpha):


def rvs(alpha, size=None, random_state=None):
return pt.random.dirichlet(alpha, size=size, rng=random_state)
return pt.random.dirichlet(alpha, size=size, rng=random_state, return_next_rng=True)[1]
4 changes: 2 additions & 2 deletions pytensor_distributions/dirichletmultinomial.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,5 @@ def logpdf(x, n, a):


def rvs(n, a, size=None, random_state=None):
p = pt.random.dirichlet(a, size=size, rng=random_state)
return pt.random.multinomial(n, p, rng=random_state)
next_rng, p = pt.random.dirichlet(a, size=size, rng=random_state, return_next_rng=True)
return pt.random.multinomial(n, p, rng=next_rng, return_next_rng=True)[1]
4 changes: 3 additions & 1 deletion pytensor_distributions/discreteuniform.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,9 @@ def isf(q, lower, upper):


def rvs(lower, upper, size=None, random_state=None):
return pt.random.integers(lower, upper + 1, size=size, rng=random_state)
return pt.random.integers(lower, upper + 1, size=size, rng=random_state, return_next_rng=True)[
1
]


def logpdf(x, lower, upper):
Expand Down
4 changes: 3 additions & 1 deletion pytensor_distributions/discreteweibull.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ def sf(x, q, beta):


def rvs(q, beta, size=None, random_state=None):
return ppf(pt.random.uniform(0, 1, rng=random_state, size=size), q, beta)
return ppf(
pt.random.uniform(0, 1, rng=random_state, size=size, return_next_rng=True)[1], q, beta
)


def logcdf(x, q, beta):
Expand Down
4 changes: 2 additions & 2 deletions pytensor_distributions/exgaussian.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ def sf(x, mu, sigma, nu):


def rvs(mu, sigma, nu, size=None, random_state=None):
next_rng, exp_rvs = pt.random.exponential(nu, rng=random_state, size=size).owner.outputs
normal_rvs = pt.random.normal(mu, sigma, rng=next_rng, size=size)
next_rng, exp_rvs = pt.random.exponential(nu, rng=random_state, size=size, return_next_rng=True)
normal_rvs = pt.random.normal(mu, sigma, rng=next_rng, size=size, return_next_rng=True)[1]
return normal_rvs + exp_rvs


Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/exponential.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def sf(x, lam):


def rvs(lam, size=None, random_state=None):
return pt.random.exponential(1.0 / lam, rng=random_state, size=size)
return pt.random.exponential(1.0 / lam, rng=random_state, size=size, return_next_rng=True)[1]


def logcdf(x, lam):
Expand Down
4 changes: 3 additions & 1 deletion pytensor_distributions/gamma.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ def isf(x, alpha, beta):


def rvs(alpha, beta, size=None, random_state=None):
return pt.random.gamma(shape=alpha, scale=1 / beta, rng=random_state, size=size)
return pt.random.gamma(
shape=alpha, scale=1 / beta, rng=random_state, size=size, return_next_rng=True
)[1]


def logcdf(x, alpha, beta):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/geometric.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def isf(q, p):


def rvs(p, size=None, random_state=None):
return pt.random.geometric(p, size=size, rng=random_state)
return pt.random.geometric(p, size=size, rng=random_state, return_next_rng=True)[1]


def logpdf(x, p):
Expand Down
4 changes: 3 additions & 1 deletion pytensor_distributions/gumbel.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,9 @@ def sf(x, mu, beta):


def rvs(mu, beta, size=None, random_state=None):
return ppf(pt.random.uniform(0, 1, rng=random_state, size=size), mu, beta)
return ppf(
pt.random.uniform(0, 1, rng=random_state, size=size, return_next_rng=True)[1], mu, beta
)


def logcdf(x, mu, beta):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/halfcauchy.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def sf(x, beta):


def rvs(beta, size=None, random_state=None):
uniform_samples = pt.random.uniform(0, 1, rng=random_state, size=size)
uniform_samples = pt.random.uniform(0, 1, rng=random_state, size=size, return_next_rng=True)[1]
return beta * pt.tan(pt.pi / 2 * uniform_samples)


Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/halfnormal.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def sf(x, sigma):


def rvs(sigma, size=None, random_state=None):
return pt.abs(pt.random.normal(0, sigma, rng=random_state, size=size))
return pt.abs(pt.random.normal(0, sigma, rng=random_state, size=size, return_next_rng=True)[1])


def logpdf(x, sigma):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/halfstudentt.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def sf(x, nu, sigma):


def rvs(nu, sigma, size=None, random_state=None):
t_samples = pt.random.t(nu, rng=random_state, size=size)
t_samples = pt.random.t(nu, rng=random_state, size=size, return_next_rng=True)[1]
return pt.abs(t_samples * sigma)


Expand Down
4 changes: 3 additions & 1 deletion pytensor_distributions/hypergeometric.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,6 @@ def isf(q, N, k, n):


def rvs(N, k, n, size=None, random_state=None):
return pt.random.hypergeometric(k, N - k, n, size=size, rng=random_state)
return pt.random.hypergeometric(k, N - k, n, size=size, rng=random_state, return_next_rng=True)[
1
]
2 changes: 1 addition & 1 deletion pytensor_distributions/inversegamma.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def sf(x, alpha, beta):


def rvs(alpha, beta, size=None, random_state=None):
return 1.0 / pt.random.gamma(alpha, beta, rng=random_state, size=size)
return 1.0 / pt.random.gamma(alpha, beta, rng=random_state, size=size, return_next_rng=True)[1]


def logcdf(x, alpha, beta):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/kumaraswamy.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def isf(x, a, b):


def rvs(a, b, size=None, random_state=None):
u = pt.random.uniform(0, 1, size=size, rng=random_state)
u = pt.random.uniform(0, 1, size=size, rng=random_state, return_next_rng=True)[1]
return ppf(u, a, b)


Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/laplace.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def isf(q, mu, b):


def rvs(mu, b, size=None, random_state=None):
return pt.random.laplace(mu, b, rng=random_state, size=size)
return pt.random.laplace(mu, b, rng=random_state, size=size, return_next_rng=True)[1]


def logpdf(x, mu, b):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/logistic.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def sf(x, mu, s):


def rvs(mu, s, size=None, random_state=None):
return pt.random.logistic(mu, s, rng=random_state, size=size)
return pt.random.logistic(mu, s, rng=random_state, size=size, return_next_rng=True)[1]


def logcdf(x, mu, s):
Expand Down
4 changes: 3 additions & 1 deletion pytensor_distributions/logitnormal.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,4 +204,6 @@ def isf(q, mu, sigma):


def rvs(mu, sigma, size=None, random_state=None):
return pt.sigmoid(pt.random.normal(mu, sigma, rng=random_state, size=size))
return pt.sigmoid(
pt.random.normal(mu, sigma, rng=random_state, size=size, return_next_rng=True)[1]
)
2 changes: 1 addition & 1 deletion pytensor_distributions/loglogistic.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,5 +133,5 @@ def isf(q, alpha, beta):


def rvs(alpha, beta, size=None, random_state=None):
u = pt.random.uniform(size=size, rng=random_state)
u = pt.random.uniform(size=size, rng=random_state, return_next_rng=True)[1]
return alpha * (u / (1 - u)) ** (1 / beta)
2 changes: 1 addition & 1 deletion pytensor_distributions/lognormal.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def sf(x, mu, sigma):


def rvs(mu, sigma, size=None, random_state=None):
return pt.exp(pt.random.normal(mu, sigma, rng=random_state, size=size))
return pt.exp(pt.random.normal(mu, sigma, rng=random_state, size=size, return_next_rng=True)[1])


def logcdf(x, mu, sigma):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/matrixnormal.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,5 +120,5 @@ def rvs(mu, rowcov, colcov, size=None, random_state=None):
else:
full_shape = base_shape

Z = pt.random.normal(0, 1, size=full_shape, rng=random_state)
Z = pt.random.normal(0, 1, size=full_shape, rng=random_state, return_next_rng=True)[1]
return target + L_row @ Z @ pt.swapaxes(L_col, -1, -2)
2 changes: 1 addition & 1 deletion pytensor_distributions/moyal.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def isf(x, mu, sigma):


def rvs(mu, sigma, size=None, random_state=None):
u = pt.random.uniform(size=size, rng=random_state)
u = pt.random.uniform(size=size, rng=random_state, return_next_rng=True)[1]
return ppf(u, mu, sigma)


Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/multinomial.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,4 @@ def logpdf(x, n, p):


def rvs(n, p, size=None, random_state=None):
return pt.random.multinomial(n, p, size=size, rng=random_state)
return pt.random.multinomial(n, p, size=size, rng=random_state, return_next_rng=True)[1]
4 changes: 3 additions & 1 deletion pytensor_distributions/mvnormal.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,6 @@ def logpdf(x, mu, cov):

def rvs(mu, cov, size=None, random_state=None):
mu = pt.broadcast_to(mu, cov.shape[:-1])
return pt.random.multivariate_normal(mu, cov, size=size, rng=random_state)
return pt.random.multivariate_normal(
mu, cov, size=size, rng=random_state, return_next_rng=True
)[1]
8 changes: 6 additions & 2 deletions pytensor_distributions/mvstudentt.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,12 @@ def logpdf(x, nu, mu, cov):

def rvs(nu, mu, cov, size=None, random_state=None):
mu = pt.broadcast_to(mu, cov.shape[:-1])
z = pt.random.multivariate_normal(pt.zeros_like(mu), cov, size=size, rng=random_state)
chi2 = pt.random.chisquare(nu, size=size if size is not None else 1, rng=random_state)
z = pt.random.multivariate_normal(
pt.zeros_like(mu), cov, size=size, rng=random_state, return_next_rng=True
)[1]
chi2 = pt.random.chisquare(
nu, size=size if size is not None else 1, rng=random_state, return_next_rng=True
)[1]
if size is None:
chi2 = chi2[None]
return mu + z / pt.sqrt(chi2[..., None] / nu)
2 changes: 1 addition & 1 deletion pytensor_distributions/negativebinomial.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def isf(q, n, p):


def rvs(n, p, size=None, random_state=None):
return pt.random.negative_binomial(n, p, rng=random_state, size=size)
return pt.random.negative_binomial(n, p, rng=random_state, size=size, return_next_rng=True)[1]


def logpdf(x, n, p):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/normal.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def sf(x, mu, sigma):


def rvs(mu, sigma, size=None, random_state=None):
return pt.random.normal(mu, sigma, rng=random_state, size=size)
return pt.random.normal(mu, sigma, rng=random_state, size=size, return_next_rng=True)[1]


def logcdf(x, mu, sigma):
Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/pareto.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def isf(x, alpha, m):


def rvs(alpha, m, size=None, random_state=None):
u = pt.random.uniform(size=size, rng=random_state)
u = pt.random.uniform(size=size, rng=random_state, return_next_rng=True)[1]
return m / (1 - u) ** (1 / alpha)


Expand Down
2 changes: 1 addition & 1 deletion pytensor_distributions/poisson.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def isf(q, mu):


def rvs(mu, size=None, random_state=None):
return pt.random.poisson(mu, rng=random_state, size=size)
return pt.random.poisson(mu, rng=random_state, size=size, return_next_rng=True)[1]


def logpdf(x, mu):
Expand Down
4 changes: 3 additions & 1 deletion pytensor_distributions/polyagamma.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,9 @@ def rvs(h, z, size=None, random_state=None):
else:
gamma_size = (K, *size)

gamma_draws = pt.random.gamma(h, scale=1.0, size=gamma_size, rng=random_state)
gamma_draws = pt.random.gamma(
h, scale=1.0, size=gamma_size, rng=random_state, return_next_rng=True
)[1]

z2_term = z**2 / (4 * pt.pi**2)
k_bc = k.reshape((-1,) + (1,) * (gamma_draws.ndim - 1))
Expand Down
4 changes: 2 additions & 2 deletions pytensor_distributions/rice.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,8 @@ def isf(q, nu, sigma):


def rvs(nu, sigma, size=None, random_state=None):
next_rng, x = pt.random.normal(nu, sigma, size=size, rng=random_state).owner.outputs
y = pt.random.normal(0, sigma, size=size, rng=next_rng)
next_rng, x = pt.random.normal(nu, sigma, size=size, rng=random_state, return_next_rng=True)
next_rng, y = pt.random.normal(0, sigma, size=size, rng=next_rng, return_next_rng=True)
return pt.sqrt(x**2 + y**2)


Expand Down
Loading
Loading