From 0c626ab46274b954d6b74188fc63dad6db68df79 Mon Sep 17 00:00:00 2001 From: Lucas Eckes Date: Fri, 26 Sep 2025 15:22:54 +0200 Subject: [PATCH 1/2] Add icdf functions for Inverse Gamma distribution --- pymc/distributions/continuous.py | 10 ++++++++++ tests/distributions/test_continuous.py | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/pymc/distributions/continuous.py b/pymc/distributions/continuous.py index dc98ed3144..b29762afac 100644 --- a/pymc/distributions/continuous.py +++ b/pymc/distributions/continuous.py @@ -2530,6 +2530,16 @@ def logcdf(value, alpha, beta): beta > 0, msg="alpha > 0, beta > 0", ) + + def icdf(value, alpha, beta): + res = 1 / Gamma.icdf(value=1-value, alpha=alpha, scale=1 / beta) + res = check_icdf_value(res, value) + return check_icdf_parameters( + res, + alpha > 0, + beta > 0, + msg="alpha > 0, beta > 0", + ) class ChiSquared: diff --git a/tests/distributions/test_continuous.py b/tests/distributions/test_continuous.py index 7209382666..342b53eca0 100644 --- a/tests/distributions/test_continuous.py +++ b/tests/distributions/test_continuous.py @@ -705,6 +705,13 @@ def test_fun(value, mu, sigma): decimal=select_by_precision(float64=4, float32=3), ) + def test_inverse_gamma_icdf(self): + check_icdf( + pm.InverseGamma, + {"alpha": Rplusbig, "beta": Rplusbig}, + lambda q, alpha, beta: st.invgamma.ppf(q, alpha, scale=beta), + ) + def test_pareto(self): check_logp( pm.Pareto, From 45b0b36876ca3532e44bdf28bc4c69e663190ae2 Mon Sep 17 00:00:00 2001 From: Lucas Eckes Date: Fri, 26 Sep 2025 16:03:38 +0200 Subject: [PATCH 2/2] pre-commit linting --- pymc/distributions/continuous.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pymc/distributions/continuous.py b/pymc/distributions/continuous.py index b29762afac..67124fa359 100644 --- a/pymc/distributions/continuous.py +++ b/pymc/distributions/continuous.py @@ -2530,9 +2530,9 @@ def logcdf(value, alpha, beta): beta > 0, msg="alpha > 0, beta > 0", ) - + def icdf(value, alpha, beta): - res = 1 / Gamma.icdf(value=1-value, alpha=alpha, scale=1 / beta) + res = 1 / Gamma.icdf(value=1 - value, alpha=alpha, scale=1 / beta) res = check_icdf_value(res, value) return check_icdf_parameters( res,