diff --git a/lmo/_poly.py b/lmo/_poly.py index 348bee1..6507a64 100644 --- a/lmo/_poly.py +++ b/lmo/_poly.py @@ -113,7 +113,8 @@ def eval_sh_jacobi( # noqa: C901 ) / 6 # don't use `eval_sh_jacobi`: https://github.com/scipy/scipy/issues/18988 - return sps.eval_jacobi(n, a, b, 2 * x - 1) + out = sps.eval_jacobi(n, a, b, 2 * x - 1) + return out.item() if isinstance(out, np.generic) or np.isscalar(x) else out def peaks_jacobi(n: int, a: float, b: float) -> onp.ArrayND[_Float]: diff --git a/lmo/distributions/_genlambda.py b/lmo/distributions/_genlambda.py index 591820e..5a167f3 100644 --- a/lmo/distributions/_genlambda.py +++ b/lmo/distributions/_genlambda.py @@ -1,6 +1,4 @@ -""" -Probability distributions, compatible with [`scipy.stats`][scipy.stats]. -""" +"""Probability distributions, compatible with [`scipy.stats`][scipy.stats].""" from __future__ import annotations @@ -62,6 +60,9 @@ def _genlambda_qdf(q: _XT, b: float, d: float, f: float) -> _XT: return (1 + f) * q ** (b - 1) + (1 - f) * (1 - q) ** (d - 1) # pyright: ignore[reportReturnType] +# pyright: reportIncompatibleMethodOverride=false + + def _genlambda_cdf0( # noqa: C901 x: float, b: float, @@ -133,7 +134,7 @@ def _genlambda_cdf0( # noqa: C901 class genlambda_gen(rv_continuous): @override - def _argcheck(self, /, b: _F8, d: _F8, f: _F8) -> np.bool_: # pyright: ignore[reportIncompatibleMethodOverride] + def _argcheck(self, /, b: _F8, d: _F8, f: _F8) -> np.bool_: return np.isfinite(b) & np.isfinite(d) & (f >= -1) & (f <= 1) @override @@ -153,23 +154,24 @@ def _fitstart( /, data: _ArrF8, args: tuple[float, float, float] | None = None, - ) -> tuple[float, float, float, float, float]: + ) -> tuple[_F8, _F8, _F8, _F8, _F8]: # Arbitrary, but the default f=1 is a bad start - return super()._fitstart(data, args or (1.0, 1.0, 0.0)) # pyright: ignore[reportReturnType] + loc, scale, b, d, f = super()._fitstart(data, args or (1.0, 1.0, 0.0)) + return loc, scale, b, d, f @override - def _pdf(self, /, x: _XT, b: float, d: float, f: float) -> _XT: # pyright: ignore[reportIncompatibleMethodOverride] + def _pdf(self, /, x: _XT, b: float, d: float, f: float) -> _XT: return 1 / self._qdf(self._cdf(x, b, d, f), b, d, f) # pyright: ignore[reportReturnType] @override - def _cdf(self, /, x: _XT, b: float, d: float, f: float) -> _XT: # pyright: ignore[reportIncompatibleMethodOverride] + def _cdf(self, /, x: _XT, b: float, d: float, f: float) -> _XT: return _genlambda_cdf(x, b, d, f) def _qdf(self, /, q: _XT, b: float, d: float, f: float) -> _XT: return _genlambda_qdf(q, b, d, f) @override - def _ppf(self, /, q: _XT, b: float, d: float, f: float) -> _XT: # pyright: ignore[reportIncompatibleMethodOverride] + def _ppf(self, /, q: _XT, b: float, d: float, f: float) -> _XT: return _genlambda_ppf(q, b, d, f) @override diff --git a/lmo/distributions/_kumaraswamy.py b/lmo/distributions/_kumaraswamy.py index 8497416..bb64df7 100644 --- a/lmo/distributions/_kumaraswamy.py +++ b/lmo/distributions/_kumaraswamy.py @@ -5,7 +5,6 @@ from typing import Any, Final, TypeAlias, final import numpy as np -import numpy.typing as npt import optype.numpy as onp import scipy.special as sps @@ -81,5 +80,11 @@ def _entropy(self, a: float, b: float) -> float: return (1 - 1 / b) + (1 - 1 / a) * harmonic(b) - math.log(a * b) @override - def _munp(self, /, n: int | npt.NDArray[np.intp], a: float, b: float) -> _FloatND: + def _munp( + self, + /, + n: int | onp.ArrayND[np.intp], + a: float, + b: float, + ) -> _Float | _FloatND: return b * sps.beta(1 + n / a, b) diff --git a/lmo/distributions/_wakeby.py b/lmo/distributions/_wakeby.py index c9fd41a..2aa8c56 100644 --- a/lmo/distributions/_wakeby.py +++ b/lmo/distributions/_wakeby.py @@ -173,9 +173,12 @@ def _wakeby_sf0(x: _F8, /, b: _F8, d: _F8, f: _F8) -> _F8: # noqa: C901 _wakeby_lm: Final = get_lm_func("wakeby") +# pyright: reportIncompatibleMethodOverride = false + + class wakeby_gen(lmt.rv_continuous): @override - def _argcheck(self, /, b: _F8, d: _F8, f: _F8) -> bool | np.bool_: # pyright: ignore[reportIncompatibleMethodOverride] + def _argcheck(self, /, b: _F8, d: _F8, f: _F8) -> bool | np.bool_: return ( np.isfinite(b) & np.isfinite(d) @@ -207,28 +210,29 @@ def _fitstart( /, data: _ArrF8, args: tuple[float, float, float] | None = None, - ) -> tuple[float, float, float, float, float]: + ) -> tuple[_F8, _F8, _F8, _F8, _F8]: # Arbitrary, but the default f=1 is a bad start - return super()._fitstart(data, args or (1.0, 1.0, 0.5)) # pyright: ignore[reportReturnType] + loc, scale, b, d, f = super()._fitstart(data, args or (1.0, 1.0, 0.5)) + return loc, scale, b, d, f @override - def _pdf(self, /, x: _XT, b: float, d: float, f: float) -> _XT: # pyright: ignore[reportIncompatibleMethodOverride] + def _pdf(self, /, x: _XT, b: float, d: float, f: float) -> _XT: # application of the inverse function theorem return 1 / self._qdf(self._cdf(x, b, d, f), b, d, f) # pyright: ignore[reportReturnType] @override - def _cdf(self, /, x: _XT, b: float, d: float, f: float) -> _XT: # pyright: ignore[reportIncompatibleMethodOverride] + def _cdf(self, /, x: _XT, b: float, d: float, f: float) -> _XT: return 1 - _wakeby_sf(x, b, d, f) def _qdf(self, /, q: _XT, b: float, d: float, f: float) -> _XT: return _wakeby_qdf(q, b, d, f) @override - def _ppf(self, /, q: _XT, b: float, d: float, f: float) -> _XT: # pyright: ignore[reportIncompatibleMethodOverride] + def _ppf(self, /, q: _XT, b: float, d: float, f: float) -> _XT: return _wakeby_isf(1 - q, b, d, f) @override - def _isf(self, /, q: _XT, b: float, d: float, f: float) -> _XT: # pyright: ignore[reportIncompatibleMethodOverride] + def _isf(self, /, q: _XT, b: float, d: float, f: float) -> _XT: return _wakeby_isf(q, b, d, f) @override diff --git a/lmo/ostats.py b/lmo/ostats.py index 7f02943..b1854bc 100644 --- a/lmo/ostats.py +++ b/lmo/ostats.py @@ -145,5 +145,5 @@ def from_cdf( msg = "F must lie between 0 and 1" raise ValueError(msg) - out = betainc(i + 1, n - i, p) + out = betainc(float(i + 1), float(n - i), p) return out.item() if out.ndim == 0 and np.isscalar(F) else out diff --git a/lmo/special.py b/lmo/special.py index 19f73bf..e55ec94 100644 --- a/lmo/special.py +++ b/lmo/special.py @@ -120,17 +120,19 @@ def gamma2( - [`scipy.special.gammaincc`][scipy.special.gammaincc] for the regularized gamma function \( Q(a,\ x) \). """ + x_ = np.asarray(x) if a == 0: - return sps.expm1(x, out=out) + out_ = np.expm1(x_, out=out) + return out_.item() if x_.ndim == 0 and np.isscalar(x) else out_ g = sps.gamma(a) if out is not None: - out = sps.gammaincc(a, x, out=out) + sps.gammaincc(a, x_, out=out) np.multiply(out, g, out=out) return out - res = sps.gammaincc(a, x) + res = sps.gammaincc(a, x_) res *= g return res diff --git a/lmo/theoretical/_utils.py b/lmo/theoretical/_utils.py index f0a0b1b..d83b523 100644 --- a/lmo/theoretical/_utils.py +++ b/lmo/theoretical/_utils.py @@ -13,11 +13,13 @@ import lmo.typing as lmt -__all__ = ("ALPHA", "QUAD_LIMIT", "l_coef_factor", "l_const", "tighten_cdf_support") +__all__ = "ALPHA", "QUAD_LIMIT", "l_coef_factor", "l_const", "tighten_cdf_support" +### _Tss = ParamSpec("_Tss") +### ALPHA: Final = 0.1 QUAD_LIMIT: Final = 100 @@ -36,17 +38,14 @@ def l_const(r: int, s: float, t: float, k: int = 0) -> float: return 1 / (r - 1) # math.lgamma is faster than scipy.special.loggamma. - if r + s + t <= 20: - v = gamma(r + s + t + 1) / (gamma(r + s) * gamma(r + t)) - elif r + s + t <= 128: - v = exp(lgamma(r + s + t + 1) - lgamma(r + s) - lgamma(r + t)) + rst = r + s + t + if rst <= 20: + v = gamma(rst + 1) / (gamma(r + s) * gamma(r + t)) + elif rst <= 128: + v = exp(lgamma(rst + 1) - lgamma(r + s) - lgamma(r + t)) else: return exp( - lgamma(r + s + t + 1) - - lgamma(r + s) - - lgamma(r + t) - + lgamma(r - k) - - log(r) + lgamma(rst + 1) - lgamma(r + s) - lgamma(r + t) + lgamma(r - k) - log(r) ) return factorial(r - 1 - k) / r * v @@ -57,15 +56,18 @@ def l_coef_factor( s: float = 0, t: float = 0, ) -> onp.ArrayND[npc.floating]: + r_ = r if isinstance(r, np.ndarray) else int(r) if s == t == 0: - return np.sqrt(2 * r - 1) + return np.sqrt(2 * r_ - 1) assert s + t > -1 import scipy.special as sps - rst = r + s + t - return np.sqrt((rst + r - 1) * sps.beta(r + s, r + t) / sps.beta(r, rst)) * r / rst + rs = r_ + s + rt = r_ + t + rst = rs + t + return np.sqrt((rs + rt - 1) * sps.beta(rs, rt) / sps.beta(r_, rst)) * r_ / rst def tighten_cdf_support( @@ -75,16 +77,12 @@ def tighten_cdf_support( """Attempt to tighten the support by checking some common bounds.""" a, b = (-np.inf, np.inf) if support is None else map(float, support) - # attempt to tighten the default support by checking some common bounds - if cdf(0) == 0: - # left-bounded at 0 (e.g. weibull) + if cdf(0) == 0: # left-bounded at 0 (e.g. weibull) a = 0 - if (u1 := cdf(1)) == 0: - # left-bounded at 1 (e.g. pareto) + if (u1 := cdf(1)) == 0: # left-bounded at 1 (e.g. pareto) a = 1 - elif u1 == 1: - # right-bounded at 1 (e.g. beta) + elif u1 == 1: # right-bounded at 1 (e.g. beta) b = 1 return a, b diff --git a/uv.lock b/uv.lock index 6f53c4b..e9cdf2c 100644 --- a/uv.lock +++ b/uv.lock @@ -2150,49 +2150,56 @@ wheels = [ [[package]] name = "scipy" -version = "1.14.1" +version = "1.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/62/11/4d44a1f274e002784e4dbdb81e0ea96d2de2d1045b2132d5af62cc31fd28/scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417", size = 58620554 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/ab/070ccfabe870d9f105b04aee1e2860520460ef7ca0213172abfe871463b9/scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675", size = 39076999 }, - { url = "https://files.pythonhosted.org/packages/a7/c5/02ac82f9bb8f70818099df7e86c3ad28dae64e1347b421d8e3adf26acab6/scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2", size = 29894570 }, - { url = "https://files.pythonhosted.org/packages/ed/05/7f03e680cc5249c4f96c9e4e845acde08eb1aee5bc216eff8a089baa4ddb/scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617", size = 23103567 }, - { url = "https://files.pythonhosted.org/packages/5e/fc/9f1413bef53171f379d786aabc104d4abeea48ee84c553a3e3d8c9f96a9c/scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8", size = 25499102 }, - { url = "https://files.pythonhosted.org/packages/c2/4b/b44bee3c2ddc316b0159b3d87a3d467ef8d7edfd525e6f7364a62cd87d90/scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37", size = 35586346 }, - { url = "https://files.pythonhosted.org/packages/93/6b/701776d4bd6bdd9b629c387b5140f006185bd8ddea16788a44434376b98f/scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2", size = 41165244 }, - { url = "https://files.pythonhosted.org/packages/06/57/e6aa6f55729a8f245d8a6984f2855696c5992113a5dc789065020f8be753/scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2", size = 42817917 }, - { url = "https://files.pythonhosted.org/packages/ea/c2/5ecadc5fcccefaece775feadcd795060adf5c3b29a883bff0e678cfe89af/scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94", size = 44781033 }, - { url = "https://files.pythonhosted.org/packages/c0/04/2bdacc8ac6387b15db6faa40295f8bd25eccf33f1f13e68a72dc3c60a99e/scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d", size = 39128781 }, - { url = "https://files.pythonhosted.org/packages/c8/53/35b4d41f5fd42f5781dbd0dd6c05d35ba8aa75c84ecddc7d44756cd8da2e/scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07", size = 29939542 }, - { url = "https://files.pythonhosted.org/packages/66/67/6ef192e0e4d77b20cc33a01e743b00bc9e68fb83b88e06e636d2619a8767/scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5", size = 23148375 }, - { url = "https://files.pythonhosted.org/packages/f6/32/3a6dedd51d68eb7b8e7dc7947d5d841bcb699f1bf4463639554986f4d782/scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc", size = 25578573 }, - { url = "https://files.pythonhosted.org/packages/f0/5a/efa92a58dc3a2898705f1dc9dbaf390ca7d4fba26d6ab8cfffb0c72f656f/scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310", size = 35319299 }, - { url = "https://files.pythonhosted.org/packages/8e/ee/8a26858ca517e9c64f84b4c7734b89bda8e63bec85c3d2f432d225bb1886/scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066", size = 40849331 }, - { url = "https://files.pythonhosted.org/packages/a5/cd/06f72bc9187840f1c99e1a8750aad4216fc7dfdd7df46e6280add14b4822/scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1", size = 42544049 }, - { url = "https://files.pythonhosted.org/packages/aa/7d/43ab67228ef98c6b5dd42ab386eae2d7877036970a0d7e3dd3eb47a0d530/scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f", size = 44521212 }, - { url = "https://files.pythonhosted.org/packages/50/ef/ac98346db016ff18a6ad7626a35808f37074d25796fd0234c2bb0ed1e054/scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79", size = 39091068 }, - { url = "https://files.pythonhosted.org/packages/b9/cc/70948fe9f393b911b4251e96b55bbdeaa8cca41f37c26fd1df0232933b9e/scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e", size = 29875417 }, - { url = "https://files.pythonhosted.org/packages/3b/2e/35f549b7d231c1c9f9639f9ef49b815d816bf54dd050da5da1c11517a218/scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73", size = 23084508 }, - { url = "https://files.pythonhosted.org/packages/3f/d6/b028e3f3e59fae61fb8c0f450db732c43dd1d836223a589a8be9f6377203/scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e", size = 25503364 }, - { url = "https://files.pythonhosted.org/packages/a7/2f/6c142b352ac15967744d62b165537a965e95d557085db4beab2a11f7943b/scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d", size = 35292639 }, - { url = "https://files.pythonhosted.org/packages/56/46/2449e6e51e0d7c3575f289f6acb7f828938eaab8874dbccfeb0cd2b71a27/scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e", size = 40798288 }, - { url = "https://files.pythonhosted.org/packages/32/cd/9d86f7ed7f4497c9fd3e39f8918dd93d9f647ba80d7e34e4946c0c2d1a7c/scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06", size = 42524647 }, - { url = "https://files.pythonhosted.org/packages/f5/1b/6ee032251bf4cdb0cc50059374e86a9f076308c1512b61c4e003e241efb7/scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84", size = 44469524 }, +sdist = { url = "https://files.pythonhosted.org/packages/d9/7b/2b8ac283cf32465ed08bc20a83d559fe7b174a484781702ba8accea001d6/scipy-1.15.0.tar.gz", hash = "sha256:300742e2cc94e36a2880ebe464a1c8b4352a7b0f3e36ec3d2ac006cdbe0219ac", size = 59407226 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/53/7f627c180cdaa211fa537650ca05912f58cb68fc33bb2f9af3d29169913e/scipy-1.15.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:46e91b5b16909ff79224b56e19cbad65ca500b3afda69225820aa3afbf9ec020", size = 41423594 }, + { url = "https://files.pythonhosted.org/packages/c9/ab/f848933c6f656f2c7af2d56d0be44511b730498538fe04db70eb03a6ad86/scipy-1.15.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:82bff2eb01ccf7cea8b6ee5274c2dbeadfdac97919da308ee6d8e5bcbe846443", size = 32535797 }, + { url = "https://files.pythonhosted.org/packages/41/93/266693c471ec1e2e7748c1ee5e867299f3d0ac42e0e63f52649430ec1976/scipy-1.15.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:9c8254fe21dd2c6c8f7757035ec0c31daecf3bb3cffd93bc1ca661b731d28136", size = 24809325 }, + { url = "https://files.pythonhosted.org/packages/f3/55/1acc49a48bc11fb95cf625c0763f2749f8710265d2fecbf6ed6dd618fc54/scipy-1.15.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:c9624eeae79b18cab1a31944b5ef87aa14b125d6ab69b71db22f0dbd962caf1e", size = 27917711 }, + { url = "https://files.pythonhosted.org/packages/e2/f5/15f62812b36f2f94b9d1ca31d3d2bbabfb6979e48a0866041bee7031c461/scipy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d13bbc0658c11f3d19df4138336e4bce2c4fbd78c2755be4bf7b8e235481557f", size = 38331850 }, + { url = "https://files.pythonhosted.org/packages/ad/21/6dc57f6f6c8014dc6d07111e4976422580789fa96c4d7ddf63614939cb6c/scipy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdca4c7bb8dc41307e5f39e9e5d19c707d8e20a29845e7533b3bb20a9d4ccba0", size = 40587953 }, + { url = "https://files.pythonhosted.org/packages/da/dd/26db78c2054f8d81b28ae4688da7930ea3c33e5d1885928aadefeec979f9/scipy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f376d7c767731477bac25a85d0118efdc94a572c6b60decb1ee48bf2391a73b", size = 42963920 }, + { url = "https://files.pythonhosted.org/packages/82/89/eb4aaf929be0e2c03bb5e40ed61427aab9c8ba6c0764aebf82d7302bb3d3/scipy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:61513b989ee8d5218fbeb178b2d51534ecaddba050db949ae99eeb3d12f6825d", size = 43894857 }, + { url = "https://files.pythonhosted.org/packages/35/70/fffb90a725dec6056c9059073856fd99de22a253459a874a63b8b8a012db/scipy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5beb0a2200372b7416ec73fdae94fe81a6e85e44eb49c35a11ac356d2b8eccc6", size = 41475240 }, + { url = "https://files.pythonhosted.org/packages/63/ca/6b838a2e5e6718d879e8522d1155a068c2a769be04f7da8c5179ead32a7b/scipy-1.15.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fde0f3104dfa1dfbc1f230f65506532d0558d43188789eaf68f97e106249a913", size = 32595923 }, + { url = "https://files.pythonhosted.org/packages/b1/07/4e69f6f7185915d77719bf226c1d554a4bb99f27cb92161fdd57b1434343/scipy-1.15.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:35c68f7044b4e7ad73a3e68e513dda946989e523df9b062bd3cf401a1a882192", size = 24869617 }, + { url = "https://files.pythonhosted.org/packages/30/22/e3dadf189dcab215be461efe0fd9d288f4c2d99783c4aec2ce80837800b7/scipy-1.15.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:52475011be29dfcbecc3dfe3060e471ac5155d72e9233e8d5616b84e2b542054", size = 28007674 }, + { url = "https://files.pythonhosted.org/packages/51/0f/71c9ee2acaac0660a79e36424d367ed5737e4ef27b885f96cd439f451467/scipy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5972e3f96f7dda4fd3bb85906a17338e65eaddfe47f750e240f22b331c08858e", size = 38066684 }, + { url = "https://files.pythonhosted.org/packages/fb/77/74a1ceecb205f5d46fe2cd10071383748ee8891a96b7824a372391a6291c/scipy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe00169cf875bed0b3c40e4da45b57037dc21d7c7bf0c85ed75f210c281488f1", size = 40250011 }, + { url = "https://files.pythonhosted.org/packages/8c/9f/f1544110a3d31183034e05422836505beb438aa56183f2ccef6dcd3b4e3f/scipy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:161f80a98047c219c257bf5ce1777c574bde36b9d962a46b20d0d7e531f86863", size = 42625471 }, + { url = "https://files.pythonhosted.org/packages/3f/39/a29b75f9c30084cbafd416bfa00933311a5b7a96be6e88750c98521d2ccb/scipy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:327163ad73e54541a675240708244644294cb0a65cca420c9c79baeb9648e479", size = 43622832 }, + { url = "https://files.pythonhosted.org/packages/4d/46/2fa07d5b53092b73c4bb416954d07d883b53be4a5bd6282c67e03c051225/scipy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0fcb16eb04d84670722ce8d93b05257df471704c913cb0ff9dc5a1c31d1e9422", size = 41438080 }, + { url = "https://files.pythonhosted.org/packages/55/05/77778b1127e170ffb484614691fdd8f9d2640dcf951d515f513debe5d0e0/scipy-1.15.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:767e8cf6562931f8312f4faa7ddea412cb783d8df49e62c44d00d89f41f9bbe8", size = 32532932 }, + { url = "https://files.pythonhosted.org/packages/2b/9f/6de4970a2f524785d94a85f423a53b8c53d84917f2df702733ccdc9afd54/scipy-1.15.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:37ce9394cdcd7c5f437583fc6ef91bd290014993900643fdfc7af9b052d1613b", size = 24806488 }, + { url = "https://files.pythonhosted.org/packages/65/ef/b1c1e2499189bbea109a6b022a6147dd4552d72bed19289b4d4e411c4ce7/scipy-1.15.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6d26f17c64abd6c6c2dfb39920f61518cc9e213d034b45b2380e32ba78fde4c0", size = 27930055 }, + { url = "https://files.pythonhosted.org/packages/24/ec/6e4fe2a34a91102c806ecf9f45426f66bd604a5b5f48e951ce2bd770b2fe/scipy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e2448acd79c6374583581a1ded32ac71a00c2b9c62dfa87a40e1dd2520be111", size = 38031212 }, + { url = "https://files.pythonhosted.org/packages/82/4d/ecef655956ce332edbc411ab64ab843d767dd86e646898ac721dbcc7910e/scipy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36be480e512d38db67f377add5b759fb117edd987f4791cdf58e59b26962bee4", size = 40209536 }, + { url = "https://files.pythonhosted.org/packages/c5/ec/3af823fcd86e3155ad7ed2b684634391e4524ff82735c26abed522fc5405/scipy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ccb6248a9987193fe74363a2d73b93bc2c546e0728bd786050b7aef6e17db03c", size = 42584473 }, + { url = "https://files.pythonhosted.org/packages/23/01/f0ec4236ba8a96353e56694160041d7d9bebd9a0231a1c9beedc6e75cd50/scipy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:952d2e9eaa787f0a9e95b6e85da3654791b57a156c3e6609e65cc5176ccfe6f2", size = 43639460 }, + { url = "https://files.pythonhosted.org/packages/e9/02/c8bccc5c4813eccfeeef6ed0effe42e2cf98199d350ca476c22029569edc/scipy-1.15.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b1432102254b6dc7766d081fa92df87832ac25ff0b3d3a940f37276e63eb74ff", size = 41642304 }, + { url = "https://files.pythonhosted.org/packages/27/7a/9191a8b61f5826f08932b6ae47d44fbf4f473beb307d8ca3ed96a216929f/scipy-1.15.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:4e08c6a36f46abaedf765dd2dfcd3698fa4bd7e311a9abb2d80e33d9b2d72c34", size = 32620019 }, + { url = "https://files.pythonhosted.org/packages/e6/17/9c8452c8a59f1ede4a7ba6ba03b8b44703cdd1f1217b649f470c216f3095/scipy-1.15.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ec915cd26d76f6fc7ae8522f74f5b2accf39546f341c771bb2297f3871934a52", size = 24893299 }, + { url = "https://files.pythonhosted.org/packages/db/73/45c8566538bf9252be1e3e36b149714619c6f4d015a901cd76e257f88a37/scipy-1.15.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:351899dd2a801edd3691622172bc8ea01064b1cada794f8641b89a7dc5418db6", size = 27955764 }, + { url = "https://files.pythonhosted.org/packages/9f/4e/8822a2cafcea8727430e9a0bf785e8f0e81aaaac1048dad764d522f0f1ec/scipy-1.15.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9baff912ea4f78a543d183ed6f5b3bea9784509b948227daaf6f10727a0e2e5", size = 39879164 }, + { url = "https://files.pythonhosted.org/packages/b1/27/b55549a4aba515d9a19b6384c2c2f976725cd19d5d41c58ffac9a4d98892/scipy-1.15.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cd9d9198a7fd9a77f0eb5105ea9734df26f41faeb2a88a0e62e5245506f7b6df", size = 42091406 }, + { url = "https://files.pythonhosted.org/packages/79/df/989b2fd3f8ead6bcf89fc683fde94741eb3b291e41a3ce70cec08c80aa36/scipy-1.15.0-cp313-cp313t-win_amd64.whl", hash = "sha256:129f899ed275c0515d553b8d31696924e2ca87d1972421e46c376b9eb87de3d2", size = 43188844 }, ] [[package]] name = "scipy-stubs" -version = "1.14.1.6" +version = "1.15.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "optype" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/39/a5831a03db9c6b1a3a7fd325ccb63e3c2e050121b3eacc7115e191c37997/scipy_stubs-1.14.1.6.tar.gz", hash = "sha256:7505ea8a1624ab4c72516a04eb2838f5ae43e33ba100fc2d5c44103003dd414a", size = 235505 } +sdist = { url = "https://files.pythonhosted.org/packages/83/8e/50f376e681745b58c2973e7073d3b90134d8c0ea83220ad47fbac548050a/scipy_stubs-1.15.0.0.tar.gz", hash = "sha256:f0be6b369dc478e96be84088b1ba1a74378865d3bf2ecd0d89ff242991315a31", size = 270985 } wheels = [ - { url = "https://files.pythonhosted.org/packages/68/a2/d6e5d390b756a3d10c856a4d1c9033427422d040dee8bc98e1ba09f91f7c/scipy_stubs-1.14.1.6-py3-none-any.whl", hash = "sha256:6f5b96aba27fd20c0bb9abfce5b3ce83fbd2fe13e803bf92796242828755fecc", size = 414795 }, + { url = "https://files.pythonhosted.org/packages/da/29/d336808517bbd1ab6a2523d07cb5927166ffb8eaca9b8ed94790e06f4287/scipy_stubs-1.15.0.0-py3-none-any.whl", hash = "sha256:ddfbacdd15a0996084aee21620a29d474bb3c0dc375e5fe3cd78fe5aae50910d", size = 454570 }, ] [package.optional-dependencies] @@ -2383,16 +2390,16 @@ wheels = [ [[package]] name = "virtualenv" -version = "20.28.0" +version = "20.28.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/75/53316a5a8050069228a2f6d11f32046cfa94fbb6cc3f08703f59b873de2e/virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa", size = 7650368 } +sdist = { url = "https://files.pythonhosted.org/packages/50/39/689abee4adc85aad2af8174bb195a819d0be064bf55fcc73b49d2b28ae77/virtualenv-20.28.1.tar.gz", hash = "sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329", size = 7650532 } wheels = [ - { url = "https://files.pythonhosted.org/packages/10/f9/0919cf6f1432a8c4baa62511f8f8da8225432d22e83e3476f5be1a1edc6e/virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0", size = 4276702 }, + { url = "https://files.pythonhosted.org/packages/51/8f/dfb257ca6b4e27cb990f1631142361e4712badab8e3ca8dc134d96111515/virtualenv-20.28.1-py3-none-any.whl", hash = "sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb", size = 4276719 }, ] [[package]]