arviz 0.19.0__py3-none-any.whl → 0.20.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arviz/__init__.py +1 -1
- arviz/data/base.py +18 -7
- arviz/data/converters.py +7 -3
- arviz/data/inference_data.py +8 -0
- arviz/plots/compareplot.py +4 -4
- arviz/plots/ecdfplot.py +16 -8
- arviz/plots/forestplot.py +2 -2
- arviz/plots/kdeplot.py +9 -2
- arviz/stats/ecdf_utils.py +157 -2
- arviz/stats/stats.py +13 -7
- arviz/tests/base_tests/test_data.py +10 -0
- arviz/tests/base_tests/test_plots_matplotlib.py +6 -3
- arviz/tests/base_tests/test_stats_ecdf_utils.py +15 -2
- {arviz-0.19.0.dist-info → arviz-0.20.0.dist-info}/METADATA +22 -22
- {arviz-0.19.0.dist-info → arviz-0.20.0.dist-info}/RECORD +18 -18
- {arviz-0.19.0.dist-info → arviz-0.20.0.dist-info}/WHEEL +1 -1
- {arviz-0.19.0.dist-info → arviz-0.20.0.dist-info}/LICENSE +0 -0
- {arviz-0.19.0.dist-info → arviz-0.20.0.dist-info}/top_level.txt +0 -0
arviz/__init__.py
CHANGED
arviz/data/base.py
CHANGED
|
@@ -9,9 +9,13 @@ from copy import deepcopy
|
|
|
9
9
|
from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union
|
|
10
10
|
|
|
11
11
|
import numpy as np
|
|
12
|
-
import tree
|
|
13
12
|
import xarray as xr
|
|
14
13
|
|
|
14
|
+
try:
|
|
15
|
+
import tree
|
|
16
|
+
except ImportError:
|
|
17
|
+
tree = None
|
|
18
|
+
|
|
15
19
|
try:
|
|
16
20
|
import ujson as json
|
|
17
21
|
except ImportError:
|
|
@@ -89,6 +93,9 @@ def _yield_flat_up_to(shallow_tree, input_tree, path=()):
|
|
|
89
93
|
input_tree.
|
|
90
94
|
"""
|
|
91
95
|
# pylint: disable=protected-access
|
|
96
|
+
if tree is None:
|
|
97
|
+
raise ImportError("Missing optional dependency 'dm-tree'. Use pip or conda to install it")
|
|
98
|
+
|
|
92
99
|
if isinstance(shallow_tree, tree._TEXT_OR_BYTES) or not (
|
|
93
100
|
isinstance(shallow_tree, tree.collections_abc.Mapping)
|
|
94
101
|
or tree._is_namedtuple(shallow_tree)
|
|
@@ -299,7 +306,7 @@ def numpy_to_data_array(
|
|
|
299
306
|
return xr.DataArray(ary, coords=coords, dims=dims)
|
|
300
307
|
|
|
301
308
|
|
|
302
|
-
def
|
|
309
|
+
def dict_to_dataset(
|
|
303
310
|
data,
|
|
304
311
|
*,
|
|
305
312
|
attrs=None,
|
|
@@ -312,6 +319,8 @@ def pytree_to_dataset(
|
|
|
312
319
|
):
|
|
313
320
|
"""Convert a dictionary or pytree of numpy arrays to an xarray.Dataset.
|
|
314
321
|
|
|
322
|
+
ArviZ itself supports conversion of flat dictionaries.
|
|
323
|
+
Suport for pytrees requires ``dm-tree`` which is an optional dependency.
|
|
315
324
|
See https://jax.readthedocs.io/en/latest/pytrees.html for what a pytree is, but
|
|
316
325
|
this inclues at least dictionaries and tuple types.
|
|
317
326
|
|
|
@@ -386,10 +395,12 @@ def pytree_to_dataset(
|
|
|
386
395
|
"""
|
|
387
396
|
if dims is None:
|
|
388
397
|
dims = {}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
398
|
+
|
|
399
|
+
if tree is not None:
|
|
400
|
+
try:
|
|
401
|
+
data = {k[0] if len(k) == 1 else k: v for k, v in _flatten_with_path(data)}
|
|
402
|
+
except TypeError: # probably unsortable keys -- the function will still work if
|
|
403
|
+
pass # it is an honest dictionary.
|
|
393
404
|
|
|
394
405
|
data_vars = {
|
|
395
406
|
key: numpy_to_data_array(
|
|
@@ -406,7 +417,7 @@ def pytree_to_dataset(
|
|
|
406
417
|
return xr.Dataset(data_vars=data_vars, attrs=make_attrs(attrs=attrs, library=library))
|
|
407
418
|
|
|
408
419
|
|
|
409
|
-
|
|
420
|
+
pytree_to_dataset = dict_to_dataset
|
|
410
421
|
|
|
411
422
|
|
|
412
423
|
def make_attrs(attrs=None, library=None):
|
arviz/data/converters.py
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"""High level conversion functions."""
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
|
-
import tree
|
|
5
4
|
import xarray as xr
|
|
6
5
|
|
|
6
|
+
try:
|
|
7
|
+
from tree import is_nested
|
|
8
|
+
except ImportError:
|
|
9
|
+
is_nested = lambda obj: False
|
|
10
|
+
|
|
7
11
|
from .base import dict_to_dataset
|
|
8
12
|
from .inference_data import InferenceData
|
|
9
13
|
from .io_beanmachine import from_beanmachine
|
|
@@ -107,7 +111,7 @@ def convert_to_inference_data(obj, *, group="posterior", coords=None, dims=None,
|
|
|
107
111
|
dataset = obj.to_dataset()
|
|
108
112
|
elif isinstance(obj, dict):
|
|
109
113
|
dataset = dict_to_dataset(obj, coords=coords, dims=dims)
|
|
110
|
-
elif
|
|
114
|
+
elif is_nested(obj) and not isinstance(obj, (list, tuple)):
|
|
111
115
|
dataset = dict_to_dataset(obj, coords=coords, dims=dims)
|
|
112
116
|
elif isinstance(obj, np.ndarray):
|
|
113
117
|
dataset = dict_to_dataset({"x": obj}, coords=coords, dims=dims)
|
|
@@ -122,7 +126,7 @@ def convert_to_inference_data(obj, *, group="posterior", coords=None, dims=None,
|
|
|
122
126
|
"xarray dataarray",
|
|
123
127
|
"xarray dataset",
|
|
124
128
|
"dict",
|
|
125
|
-
"pytree",
|
|
129
|
+
"pytree (if 'dm-tree' is installed)",
|
|
126
130
|
"netcdf filename",
|
|
127
131
|
"numpy array",
|
|
128
132
|
"pystan fit",
|
arviz/data/inference_data.py
CHANGED
|
@@ -266,6 +266,14 @@ class InferenceData(Mapping[str, xr.Dataset]):
|
|
|
266
266
|
raise KeyError(key)
|
|
267
267
|
return getattr(self, key)
|
|
268
268
|
|
|
269
|
+
def __setitem__(self, key: str, value: xr.Dataset):
|
|
270
|
+
"""Set item by key and update group list accordingly."""
|
|
271
|
+
if key.startswith(WARMUP_TAG):
|
|
272
|
+
self._groups_warmup.append(key)
|
|
273
|
+
else:
|
|
274
|
+
self._groups.append(key)
|
|
275
|
+
setattr(self, key, value)
|
|
276
|
+
|
|
269
277
|
def groups(self) -> List[str]:
|
|
270
278
|
"""Return all groups present in InferenceData object."""
|
|
271
279
|
return self._groups_all
|
arviz/plots/compareplot.py
CHANGED
|
@@ -11,9 +11,9 @@ def plot_compare(
|
|
|
11
11
|
comp_df,
|
|
12
12
|
insample_dev=False,
|
|
13
13
|
plot_standard_error=True,
|
|
14
|
-
plot_ic_diff=
|
|
14
|
+
plot_ic_diff=False,
|
|
15
15
|
order_by_rank=True,
|
|
16
|
-
legend=
|
|
16
|
+
legend=False,
|
|
17
17
|
title=True,
|
|
18
18
|
figsize=None,
|
|
19
19
|
textsize=None,
|
|
@@ -45,12 +45,12 @@ def plot_compare(
|
|
|
45
45
|
penalization given by the effective number of parameters (p_loo or p_waic).
|
|
46
46
|
plot_standard_error : bool, default True
|
|
47
47
|
Plot the standard error of the ELPD.
|
|
48
|
-
plot_ic_diff : bool, default
|
|
48
|
+
plot_ic_diff : bool, default False
|
|
49
49
|
Plot standard error of the difference in ELPD between each model
|
|
50
50
|
and the top-ranked model.
|
|
51
51
|
order_by_rank : bool, default True
|
|
52
52
|
If True ensure the best model is used as reference.
|
|
53
|
-
legend : bool, default
|
|
53
|
+
legend : bool, default False
|
|
54
54
|
Add legend to figure.
|
|
55
55
|
figsize : (float, float), optional
|
|
56
56
|
If `None`, size is (6, num of models) inches.
|
arviz/plots/ecdfplot.py
CHANGED
|
@@ -73,6 +73,7 @@ def plot_ecdf(
|
|
|
73
73
|
- False: No confidence bands are plotted (default).
|
|
74
74
|
- True: Plot bands computed with the default algorithm (subject to change)
|
|
75
75
|
- "pointwise": Compute the pointwise (i.e. marginal) confidence band.
|
|
76
|
+
- "optimized": Use optimization to estimate a simultaneous confidence band.
|
|
76
77
|
- "simulated": Use Monte Carlo simulation to estimate a simultaneous confidence
|
|
77
78
|
band.
|
|
78
79
|
|
|
@@ -216,8 +217,7 @@ def plot_ecdf(
|
|
|
216
217
|
>>> pit_vals = distribution.cdf(sample)
|
|
217
218
|
>>> uniform_dist = uniform(0, 1)
|
|
218
219
|
>>> az.plot_ecdf(
|
|
219
|
-
>>> pit_vals, cdf=uniform_dist.cdf,
|
|
220
|
-
>>> rvs=uniform_dist.rvs, confidence_bands=True
|
|
220
|
+
>>> pit_vals, cdf=uniform_dist.cdf, confidence_bands=True,
|
|
221
221
|
>>> )
|
|
222
222
|
|
|
223
223
|
Plot an ECDF-difference plot of PIT values.
|
|
@@ -226,8 +226,8 @@ def plot_ecdf(
|
|
|
226
226
|
:context: close-figs
|
|
227
227
|
|
|
228
228
|
>>> az.plot_ecdf(
|
|
229
|
-
>>> pit_vals, cdf = uniform_dist.cdf,
|
|
230
|
-
>>>
|
|
229
|
+
>>> pit_vals, cdf = uniform_dist.cdf, confidence_bands = True,
|
|
230
|
+
>>> difference = True
|
|
231
231
|
>>> )
|
|
232
232
|
"""
|
|
233
233
|
if confidence_bands is True:
|
|
@@ -238,9 +238,12 @@ def plot_ecdf(
|
|
|
238
238
|
)
|
|
239
239
|
confidence_bands = "pointwise"
|
|
240
240
|
else:
|
|
241
|
-
confidence_bands = "
|
|
242
|
-
|
|
243
|
-
|
|
241
|
+
confidence_bands = "auto"
|
|
242
|
+
# if pointwise specified, confidence_bands must be a bool or 'pointwise'
|
|
243
|
+
elif confidence_bands not in [False, "pointwise"] and pointwise:
|
|
244
|
+
raise ValueError(
|
|
245
|
+
f"Cannot specify both `confidence_bands='{confidence_bands}'` and `pointwise=True`"
|
|
246
|
+
)
|
|
244
247
|
|
|
245
248
|
if fpr is not None:
|
|
246
249
|
warnings.warn(
|
|
@@ -298,7 +301,7 @@ def plot_ecdf(
|
|
|
298
301
|
"`eval_points` explicitly.",
|
|
299
302
|
BehaviourChangeWarning,
|
|
300
303
|
)
|
|
301
|
-
if confidence_bands
|
|
304
|
+
if confidence_bands in ["optimized", "simulated"]:
|
|
302
305
|
warnings.warn(
|
|
303
306
|
"For simultaneous bands to be correctly calibrated, specify `eval_points` "
|
|
304
307
|
"independent of the `values`"
|
|
@@ -319,6 +322,11 @@ def plot_ecdf(
|
|
|
319
322
|
|
|
320
323
|
if confidence_bands:
|
|
321
324
|
ndraws = len(values)
|
|
325
|
+
if confidence_bands == "auto":
|
|
326
|
+
if ndraws < 200 or num_trials >= 250 * np.sqrt(ndraws):
|
|
327
|
+
confidence_bands = "optimized"
|
|
328
|
+
else:
|
|
329
|
+
confidence_bands = "simulated"
|
|
322
330
|
x_bands = eval_points
|
|
323
331
|
lower, higher = ecdf_confidence_band(
|
|
324
332
|
ndraws,
|
arviz/plots/forestplot.py
CHANGED
|
@@ -55,8 +55,8 @@ def plot_forest(
|
|
|
55
55
|
Specify the kind of plot:
|
|
56
56
|
|
|
57
57
|
* The ``kind="forestplot"`` generates credible intervals, where the central points are the
|
|
58
|
-
estimated posterior
|
|
59
|
-
represent the :math:`100\times
|
|
58
|
+
estimated posterior median, the thick lines are the central quartiles, and the thin lines
|
|
59
|
+
represent the :math:`100\times(hdi\_prob)\%` highest density intervals.
|
|
60
60
|
* The ``kind="ridgeplot"`` option generates density plots (kernel density estimate or
|
|
61
61
|
histograms) in the same graph. Ridge plots can be configured to have different overlap,
|
|
62
62
|
truncation bounds and quantile markers.
|
arviz/plots/kdeplot.py
CHANGED
|
@@ -72,7 +72,7 @@ def plot_kde(
|
|
|
72
72
|
If True plot the 2D KDE using contours, otherwise plot a smooth 2D KDE.
|
|
73
73
|
hdi_probs : list, optional
|
|
74
74
|
Plots highest density credibility regions for the provided probabilities for a 2D KDE.
|
|
75
|
-
Defaults to
|
|
75
|
+
Defaults to [0.5, 0.8, 0.94].
|
|
76
76
|
fill_last : bool, default False
|
|
77
77
|
If True fill the last contour of the 2D KDE plot.
|
|
78
78
|
figsize : (float, float), optional
|
|
@@ -270,6 +270,9 @@ def plot_kde(
|
|
|
270
270
|
gridsize = (128, 128) if contour else (256, 256)
|
|
271
271
|
density, xmin, xmax, ymin, ymax = _fast_kde_2d(values, values2, gridsize=gridsize)
|
|
272
272
|
|
|
273
|
+
if hdi_probs is None:
|
|
274
|
+
hdi_probs = [0.5, 0.8, 0.94]
|
|
275
|
+
|
|
273
276
|
if hdi_probs is not None:
|
|
274
277
|
# Check hdi probs are within bounds (0, 1)
|
|
275
278
|
if min(hdi_probs) <= 0 or max(hdi_probs) >= 1:
|
|
@@ -289,7 +292,11 @@ def plot_kde(
|
|
|
289
292
|
"Using 'hdi_probs' in favor of 'levels'.",
|
|
290
293
|
UserWarning,
|
|
291
294
|
)
|
|
292
|
-
|
|
295
|
+
|
|
296
|
+
if backend == "bokeh":
|
|
297
|
+
contour_kwargs["levels"] = contour_level_list
|
|
298
|
+
elif backend == "matplotlib":
|
|
299
|
+
contour_kwargs["levels"] = contour_level_list[1:]
|
|
293
300
|
|
|
294
301
|
contourf_kwargs = _init_kwargs_dict(contourf_kwargs)
|
|
295
302
|
if "levels" in contourf_kwargs:
|
arviz/stats/ecdf_utils.py
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
"""Functions for evaluating ECDFs and their confidence bands."""
|
|
2
2
|
|
|
3
|
+
import math
|
|
3
4
|
from typing import Any, Callable, Optional, Tuple
|
|
4
5
|
import warnings
|
|
5
6
|
|
|
6
7
|
import numpy as np
|
|
7
8
|
from scipy.stats import uniform, binom
|
|
9
|
+
from scipy.optimize import minimize_scalar
|
|
10
|
+
|
|
11
|
+
try:
|
|
12
|
+
from numba import jit, vectorize
|
|
13
|
+
except ImportError:
|
|
14
|
+
|
|
15
|
+
def jit(*args, **kwargs): # pylint: disable=unused-argument
|
|
16
|
+
return lambda f: f
|
|
17
|
+
|
|
18
|
+
def vectorize(*args, **kwargs): # pylint: disable=unused-argument
|
|
19
|
+
return lambda f: f
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
from ..utils import Numba
|
|
8
23
|
|
|
9
24
|
|
|
10
25
|
def compute_ecdf(sample: np.ndarray, eval_points: np.ndarray) -> np.ndarray:
|
|
@@ -73,7 +88,7 @@ def ecdf_confidence_band(
|
|
|
73
88
|
eval_points: np.ndarray,
|
|
74
89
|
cdf_at_eval_points: np.ndarray,
|
|
75
90
|
prob: float = 0.95,
|
|
76
|
-
method="
|
|
91
|
+
method="optimized",
|
|
77
92
|
**kwargs,
|
|
78
93
|
) -> Tuple[np.ndarray, np.ndarray]:
|
|
79
94
|
"""Compute the `prob`-level confidence band for the ECDF.
|
|
@@ -92,6 +107,7 @@ def ecdf_confidence_band(
|
|
|
92
107
|
method : string, default "simulated"
|
|
93
108
|
The method used to compute the confidence band. Valid options are:
|
|
94
109
|
- "pointwise": Compute the pointwise (i.e. marginal) confidence band.
|
|
110
|
+
- "optimized": Use optimization to estimate a simultaneous confidence band.
|
|
95
111
|
- "simulated": Use Monte Carlo simulation to estimate a simultaneous confidence band.
|
|
96
112
|
`rvs` must be provided.
|
|
97
113
|
rvs: callable, optional
|
|
@@ -115,12 +131,18 @@ def ecdf_confidence_band(
|
|
|
115
131
|
|
|
116
132
|
if method == "pointwise":
|
|
117
133
|
prob_pointwise = prob
|
|
134
|
+
elif method == "optimized":
|
|
135
|
+
prob_pointwise = _optimize_simultaneous_ecdf_band_probability(
|
|
136
|
+
ndraws, eval_points, cdf_at_eval_points, prob=prob, **kwargs
|
|
137
|
+
)
|
|
118
138
|
elif method == "simulated":
|
|
119
139
|
prob_pointwise = _simulate_simultaneous_ecdf_band_probability(
|
|
120
140
|
ndraws, eval_points, cdf_at_eval_points, prob=prob, **kwargs
|
|
121
141
|
)
|
|
122
142
|
else:
|
|
123
|
-
raise ValueError(
|
|
143
|
+
raise ValueError(
|
|
144
|
+
f"Unknown method {method}. Valid options are 'pointwise', 'optimized', or 'simulated'."
|
|
145
|
+
)
|
|
124
146
|
|
|
125
147
|
prob_lower, prob_upper = _get_pointwise_confidence_band(
|
|
126
148
|
prob_pointwise, ndraws, cdf_at_eval_points
|
|
@@ -129,6 +151,139 @@ def ecdf_confidence_band(
|
|
|
129
151
|
return prob_lower, prob_upper
|
|
130
152
|
|
|
131
153
|
|
|
154
|
+
def _update_ecdf_band_interior_probabilities(
|
|
155
|
+
prob_left: np.ndarray,
|
|
156
|
+
interval_left: np.ndarray,
|
|
157
|
+
interval_right: np.ndarray,
|
|
158
|
+
p: float,
|
|
159
|
+
ndraws: int,
|
|
160
|
+
) -> np.ndarray:
|
|
161
|
+
"""Update the probability that an ECDF has been within the envelope including at the current
|
|
162
|
+
point.
|
|
163
|
+
|
|
164
|
+
Arguments
|
|
165
|
+
---------
|
|
166
|
+
prob_left : np.ndarray
|
|
167
|
+
For each point in the interior at the previous point, the joint probability that it and all
|
|
168
|
+
points before are in the interior.
|
|
169
|
+
interval_left : np.ndarray
|
|
170
|
+
The set of points in the interior at the previous point.
|
|
171
|
+
interval_right : np.ndarray
|
|
172
|
+
The set of points in the interior at the current point.
|
|
173
|
+
p : float
|
|
174
|
+
The probability of any given point found between the previous point and the current one.
|
|
175
|
+
ndraws : int
|
|
176
|
+
Number of draws in the original dataset.
|
|
177
|
+
|
|
178
|
+
Returns
|
|
179
|
+
-------
|
|
180
|
+
prob_right : np.ndarray
|
|
181
|
+
For each point in the interior at the current point, the joint probability that it and all
|
|
182
|
+
previous points are in the interior.
|
|
183
|
+
"""
|
|
184
|
+
interval_left = interval_left[:, np.newaxis]
|
|
185
|
+
prob_conditional = binom.pmf(interval_right, ndraws - interval_left, p, loc=interval_left)
|
|
186
|
+
prob_right = prob_left.dot(prob_conditional)
|
|
187
|
+
return prob_right
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
@vectorize(["float64(int64, int64, float64, int64)"])
|
|
191
|
+
def _binom_pmf(k, n, p, loc):
|
|
192
|
+
k -= loc
|
|
193
|
+
if k < 0 or k > n:
|
|
194
|
+
return 0.0
|
|
195
|
+
if p == 0:
|
|
196
|
+
return 1.0 if k == 0 else 0.0
|
|
197
|
+
if p == 1:
|
|
198
|
+
return 1.0 if k == n else 0.0
|
|
199
|
+
if k == 0:
|
|
200
|
+
return (1 - p) ** n
|
|
201
|
+
if k == n:
|
|
202
|
+
return p**n
|
|
203
|
+
lbinom = math.lgamma(n + 1) - math.lgamma(k + 1) - math.lgamma(n - k + 1)
|
|
204
|
+
return np.exp(lbinom + k * np.log(p) + (n - k) * np.log1p(-p))
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
@jit(nopython=True)
|
|
208
|
+
def _update_ecdf_band_interior_probabilities_numba(
|
|
209
|
+
prob_left: np.ndarray,
|
|
210
|
+
interval_left: np.ndarray,
|
|
211
|
+
interval_right: np.ndarray,
|
|
212
|
+
p: float,
|
|
213
|
+
ndraws: int,
|
|
214
|
+
) -> np.ndarray:
|
|
215
|
+
interval_left = interval_left[:, np.newaxis]
|
|
216
|
+
prob_conditional = _binom_pmf(interval_right, ndraws - interval_left, p, interval_left)
|
|
217
|
+
prob_right = prob_left.dot(prob_conditional)
|
|
218
|
+
return prob_right
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def _ecdf_band_interior_probability(prob_between_points, ndraws, lower_count, upper_count):
|
|
222
|
+
interval_left = np.arange(1)
|
|
223
|
+
prob_interior = np.ones(1)
|
|
224
|
+
for i in range(prob_between_points.shape[0]):
|
|
225
|
+
interval_right = np.arange(lower_count[i], upper_count[i])
|
|
226
|
+
prob_interior = _update_ecdf_band_interior_probabilities(
|
|
227
|
+
prob_interior, interval_left, interval_right, prob_between_points[i], ndraws
|
|
228
|
+
)
|
|
229
|
+
interval_left = interval_right
|
|
230
|
+
return prob_interior.sum()
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
@jit(nopython=True)
|
|
234
|
+
def _ecdf_band_interior_probability_numba(prob_between_points, ndraws, lower_count, upper_count):
|
|
235
|
+
interval_left = np.arange(1)
|
|
236
|
+
prob_interior = np.ones(1)
|
|
237
|
+
for i in range(prob_between_points.shape[0]):
|
|
238
|
+
interval_right = np.arange(lower_count[i], upper_count[i])
|
|
239
|
+
prob_interior = _update_ecdf_band_interior_probabilities_numba(
|
|
240
|
+
prob_interior, interval_left, interval_right, prob_between_points[i], ndraws
|
|
241
|
+
)
|
|
242
|
+
interval_left = interval_right
|
|
243
|
+
return prob_interior.sum()
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def _ecdf_band_optimization_objective(
|
|
247
|
+
prob_pointwise: float,
|
|
248
|
+
cdf_at_eval_points: np.ndarray,
|
|
249
|
+
ndraws: int,
|
|
250
|
+
prob_target: float,
|
|
251
|
+
) -> float:
|
|
252
|
+
"""Objective function for optimizing the simultaneous confidence band probability."""
|
|
253
|
+
lower, upper = _get_pointwise_confidence_band(prob_pointwise, ndraws, cdf_at_eval_points)
|
|
254
|
+
lower_count = (lower * ndraws).astype(int)
|
|
255
|
+
upper_count = (upper * ndraws).astype(int) + 1
|
|
256
|
+
cdf_with_zero = np.insert(cdf_at_eval_points[:-1], 0, 0)
|
|
257
|
+
prob_between_points = (cdf_at_eval_points - cdf_with_zero) / (1 - cdf_with_zero)
|
|
258
|
+
if Numba.numba_flag:
|
|
259
|
+
prob_interior = _ecdf_band_interior_probability_numba(
|
|
260
|
+
prob_between_points, ndraws, lower_count, upper_count
|
|
261
|
+
)
|
|
262
|
+
else:
|
|
263
|
+
prob_interior = _ecdf_band_interior_probability(
|
|
264
|
+
prob_between_points, ndraws, lower_count, upper_count
|
|
265
|
+
)
|
|
266
|
+
return abs(prob_interior - prob_target)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def _optimize_simultaneous_ecdf_band_probability(
|
|
270
|
+
ndraws: int,
|
|
271
|
+
eval_points: np.ndarray, # pylint: disable=unused-argument
|
|
272
|
+
cdf_at_eval_points: np.ndarray,
|
|
273
|
+
prob: float = 0.95,
|
|
274
|
+
**kwargs, # pylint: disable=unused-argument
|
|
275
|
+
):
|
|
276
|
+
"""Estimate probability for simultaneous confidence band using optimization.
|
|
277
|
+
|
|
278
|
+
This function simulates the pointwise probability needed to construct pointwise confidence bands
|
|
279
|
+
that form a `prob`-level confidence envelope for the ECDF of a sample.
|
|
280
|
+
"""
|
|
281
|
+
cdf_at_eval_points = np.unique(cdf_at_eval_points)
|
|
282
|
+
objective = lambda p: _ecdf_band_optimization_objective(p, cdf_at_eval_points, ndraws, prob)
|
|
283
|
+
prob_pointwise = minimize_scalar(objective, bounds=(prob, 1), method="bounded").x
|
|
284
|
+
return prob_pointwise
|
|
285
|
+
|
|
286
|
+
|
|
132
287
|
def _simulate_simultaneous_ecdf_band_probability(
|
|
133
288
|
ndraws: int,
|
|
134
289
|
eval_points: np.ndarray,
|
arviz/stats/stats.py
CHANGED
|
@@ -711,16 +711,19 @@ def loo(data, pointwise=None, var_name=None, reff=None, scale=None):
|
|
|
711
711
|
Returns
|
|
712
712
|
-------
|
|
713
713
|
ELPDData object (inherits from :class:`pandas.Series`) with the following row/attributes:
|
|
714
|
-
|
|
714
|
+
elpd_loo: approximated expected log pointwise predictive density (elpd)
|
|
715
715
|
se: standard error of the elpd
|
|
716
716
|
p_loo: effective number of parameters
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
717
|
+
n_samples: number of samples
|
|
718
|
+
n_data_points: number of data points
|
|
719
|
+
warning: bool
|
|
720
|
+
True if the estimated shape parameter of Pareto distribution is greater than
|
|
721
|
+
``good_k``.
|
|
722
|
+
loo_i: :class:`~xarray.DataArray` with the pointwise predictive accuracy,
|
|
723
|
+
only if pointwise=True
|
|
722
724
|
pareto_k: array of Pareto shape values, only if pointwise True
|
|
723
725
|
scale: scale of the elpd
|
|
726
|
+
good_k: For a sample size S, the thresold is compute as min(1 - 1/log10(S), 0.7)
|
|
724
727
|
|
|
725
728
|
The returned object has a custom print method that overrides pd.Series method.
|
|
726
729
|
|
|
@@ -914,6 +917,7 @@ def psislw(log_weights, reff=1.0):
|
|
|
914
917
|
...: az.psislw(-log_likelihood, reff=0.8)
|
|
915
918
|
|
|
916
919
|
"""
|
|
920
|
+
log_weights = deepcopy(log_weights)
|
|
917
921
|
if hasattr(log_weights, "__sample__"):
|
|
918
922
|
n_samples = len(log_weights.__sample__)
|
|
919
923
|
shape = [
|
|
@@ -1580,7 +1584,9 @@ def waic(data, pointwise=None, var_name=None, scale=None, dask_kwargs=None):
|
|
|
1580
1584
|
elpd_waic: approximated expected log pointwise predictive density (elpd)
|
|
1581
1585
|
se: standard error of the elpd
|
|
1582
1586
|
p_waic: effective number parameters
|
|
1583
|
-
|
|
1587
|
+
n_samples: number of samples
|
|
1588
|
+
n_data_points: number of data points
|
|
1589
|
+
warning: bool
|
|
1584
1590
|
True if posterior variance of the log predictive densities exceeds 0.4
|
|
1585
1591
|
waic_i: :class:`~xarray.DataArray` with the pointwise predictive accuracy,
|
|
1586
1592
|
only if pointwise=True
|
|
@@ -44,6 +44,10 @@ from ..helpers import ( # pylint: disable=unused-import
|
|
|
44
44
|
models,
|
|
45
45
|
)
|
|
46
46
|
|
|
47
|
+
# Check if dm-tree is installed
|
|
48
|
+
dm_tree_installed = importlib.util.find_spec("tree") is not None # pylint: disable=invalid-name
|
|
49
|
+
skip_tests = (not dm_tree_installed) and ("ARVIZ_REQUIRE_ALL_DEPS" not in os.environ)
|
|
50
|
+
|
|
47
51
|
|
|
48
52
|
@pytest.fixture(autouse=True)
|
|
49
53
|
def no_remote_data(monkeypatch, tmpdir):
|
|
@@ -895,6 +899,11 @@ class TestInferenceData: # pylint: disable=too-many-public-methods
|
|
|
895
899
|
assert escape(repr(idata)) in html
|
|
896
900
|
xr.set_options(display_style=display_style)
|
|
897
901
|
|
|
902
|
+
def test_setitem(self, data_random):
|
|
903
|
+
data_random["new_group"] = data_random.posterior
|
|
904
|
+
assert "new_group" in data_random.groups()
|
|
905
|
+
assert hasattr(data_random, "new_group")
|
|
906
|
+
|
|
898
907
|
def test_add_groups(self, data_random):
|
|
899
908
|
data = np.random.normal(size=(4, 500, 8))
|
|
900
909
|
idata = data_random
|
|
@@ -1076,6 +1085,7 @@ def test_dict_to_dataset():
|
|
|
1076
1085
|
assert set(dataset.b.coords) == {"chain", "draw", "c"}
|
|
1077
1086
|
|
|
1078
1087
|
|
|
1088
|
+
@pytest.mark.skipif(skip_tests, reason="test requires dm-tree which is not installed")
|
|
1079
1089
|
def test_nested_dict_to_dataset():
|
|
1080
1090
|
datadict = {
|
|
1081
1091
|
"top": {"a": np.random.randn(100), "b": np.random.randn(1, 100, 10)},
|
|
@@ -1285,10 +1285,11 @@ def test_plot_ecdf_eval_points():
|
|
|
1285
1285
|
assert axes is not None
|
|
1286
1286
|
|
|
1287
1287
|
|
|
1288
|
-
@pytest.mark.parametrize("confidence_bands", [True, "pointwise", "simulated"])
|
|
1289
|
-
|
|
1288
|
+
@pytest.mark.parametrize("confidence_bands", [True, "pointwise", "optimized", "simulated"])
|
|
1289
|
+
@pytest.mark.parametrize("ndraws", [100, 10_000])
|
|
1290
|
+
def test_plot_ecdf_confidence_bands(confidence_bands, ndraws):
|
|
1290
1291
|
"""Check that all confidence_bands values correctly accepted"""
|
|
1291
|
-
data = np.random.randn(4,
|
|
1292
|
+
data = np.random.randn(4, ndraws // 4)
|
|
1292
1293
|
axes = plot_ecdf(data, confidence_bands=confidence_bands, cdf=norm(0, 1).cdf)
|
|
1293
1294
|
assert axes is not None
|
|
1294
1295
|
|
|
@@ -1326,6 +1327,8 @@ def test_plot_ecdf_error():
|
|
|
1326
1327
|
# contradictory confidence band types
|
|
1327
1328
|
with pytest.raises(ValueError):
|
|
1328
1329
|
plot_ecdf(data, cdf=dist.cdf, confidence_bands="simulated", pointwise=True)
|
|
1330
|
+
with pytest.raises(ValueError):
|
|
1331
|
+
plot_ecdf(data, cdf=dist.cdf, confidence_bands="optimized", pointwise=True)
|
|
1329
1332
|
plot_ecdf(data, cdf=dist.cdf, confidence_bands=True, pointwise=True)
|
|
1330
1333
|
plot_ecdf(data, cdf=dist.cdf, confidence_bands="pointwise")
|
|
1331
1334
|
|
|
@@ -10,6 +10,13 @@ from ...stats.ecdf_utils import (
|
|
|
10
10
|
_get_pointwise_confidence_band,
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
+
try:
|
|
14
|
+
import numba # pylint: disable=unused-import
|
|
15
|
+
|
|
16
|
+
numba_options = [True, False]
|
|
17
|
+
except ImportError:
|
|
18
|
+
numba_options = [False]
|
|
19
|
+
|
|
13
20
|
|
|
14
21
|
def test_compute_ecdf():
|
|
15
22
|
"""Test compute_ecdf function."""
|
|
@@ -109,9 +116,15 @@ def test_get_pointwise_confidence_band(dist, prob, ndraws, num_trials=1_000, see
|
|
|
109
116
|
ids=["continuous", "continuous default rvs", "discrete"],
|
|
110
117
|
)
|
|
111
118
|
@pytest.mark.parametrize("ndraws", [10_000])
|
|
112
|
-
@pytest.mark.parametrize("method", ["pointwise", "simulated"])
|
|
113
|
-
|
|
119
|
+
@pytest.mark.parametrize("method", ["pointwise", "optimized", "simulated"])
|
|
120
|
+
@pytest.mark.parametrize("use_numba", numba_options)
|
|
121
|
+
def test_ecdf_confidence_band(
|
|
122
|
+
dist, rvs, prob, ndraws, method, use_numba, num_trials=1_000, seed=57
|
|
123
|
+
):
|
|
114
124
|
"""Test test_ecdf_confidence_band."""
|
|
125
|
+
if use_numba and method != "optimized":
|
|
126
|
+
pytest.skip("Numba only used in optimized method")
|
|
127
|
+
|
|
115
128
|
eval_points = np.linspace(*dist.interval(0.99), 10)
|
|
116
129
|
cdf_at_eval_points = dist.cdf(eval_points)
|
|
117
130
|
random_state = np.random.default_rng(seed)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: arviz
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.20.0
|
|
4
4
|
Summary: Exploratory analysis of Bayesian models
|
|
5
5
|
Home-page: http://github.com/arviz-devs/arviz
|
|
6
6
|
Author: ArviZ Developers
|
|
@@ -21,30 +21,30 @@ Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
|
21
21
|
Requires-Python: >=3.10
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
|
-
Requires-Dist: setuptools
|
|
25
|
-
Requires-Dist: matplotlib
|
|
26
|
-
Requires-Dist: numpy
|
|
27
|
-
Requires-Dist: scipy
|
|
24
|
+
Requires-Dist: setuptools>=60.0.0
|
|
25
|
+
Requires-Dist: matplotlib>=3.5
|
|
26
|
+
Requires-Dist: numpy>=1.23.0
|
|
27
|
+
Requires-Dist: scipy>=1.9.0
|
|
28
28
|
Requires-Dist: packaging
|
|
29
|
-
Requires-Dist: pandas
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist:
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist: xarray-einstats >=0.3
|
|
29
|
+
Requires-Dist: pandas>=1.5.0
|
|
30
|
+
Requires-Dist: xarray>=2022.6.0
|
|
31
|
+
Requires-Dist: h5netcdf>=1.0.2
|
|
32
|
+
Requires-Dist: typing-extensions>=4.1.0
|
|
33
|
+
Requires-Dist: xarray-einstats>=0.3
|
|
35
34
|
Provides-Extra: all
|
|
36
|
-
Requires-Dist: numba
|
|
37
|
-
Requires-Dist: netcdf4
|
|
38
|
-
Requires-Dist: bokeh
|
|
39
|
-
Requires-Dist: contourpy
|
|
40
|
-
Requires-Dist: ujson
|
|
41
|
-
Requires-Dist: dask[distributed]
|
|
42
|
-
Requires-Dist: zarr
|
|
43
|
-
Requires-Dist: xarray-datatree
|
|
35
|
+
Requires-Dist: numba; extra == "all"
|
|
36
|
+
Requires-Dist: netcdf4; extra == "all"
|
|
37
|
+
Requires-Dist: bokeh>=3; extra == "all"
|
|
38
|
+
Requires-Dist: contourpy; extra == "all"
|
|
39
|
+
Requires-Dist: ujson; extra == "all"
|
|
40
|
+
Requires-Dist: dask[distributed]; extra == "all"
|
|
41
|
+
Requires-Dist: zarr<3,>=2.5.0; extra == "all"
|
|
42
|
+
Requires-Dist: xarray-datatree; extra == "all"
|
|
43
|
+
Requires-Dist: dm-tree>=0.1.8; extra == "all"
|
|
44
44
|
Provides-Extra: preview
|
|
45
|
-
Requires-Dist: arviz-base[h5netcdf]
|
|
46
|
-
Requires-Dist: arviz-stats[xarray]
|
|
47
|
-
Requires-Dist: arviz-plots
|
|
45
|
+
Requires-Dist: arviz-base[h5netcdf]; extra == "preview"
|
|
46
|
+
Requires-Dist: arviz-stats[xarray]; extra == "preview"
|
|
47
|
+
Requires-Dist: arviz-plots; extra == "preview"
|
|
48
48
|
|
|
49
49
|
<img src="https://raw.githubusercontent.com/arviz-devs/arviz-project/main/arviz_logos/ArviZ.png#gh-light-mode-only" width=200></img>
|
|
50
50
|
<img src="https://raw.githubusercontent.com/arviz-devs/arviz-project/main/arviz_logos/ArviZ_white.png#gh-dark-mode-only" width=200></img>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
arviz/__init__.py,sha256=
|
|
1
|
+
arviz/__init__.py,sha256=cZ-_ahEB5206wiaQaaTe3LjM8VIC04GAkV-noExc2kw,10397
|
|
2
2
|
arviz/labels.py,sha256=w4-t0qdJzjKrqRyhzbtk6ucoMIAxle1HpHYlH7up06Q,6828
|
|
3
3
|
arviz/preview.py,sha256=5HwHycvbSAkWsAEYHBfd3Crwmeq8T06ysSgB528iQnA,375
|
|
4
4
|
arviz/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -6,10 +6,10 @@ arviz/rcparams.py,sha256=lQnBprbDihEcsP5FujoJetGna4T8nc20JnuVf1Wn-1k,21031
|
|
|
6
6
|
arviz/sel_utils.py,sha256=xvAYENhGXDTrhaT4Itlk1SJQUUGZ6BGcR04fPFgvzdM,6951
|
|
7
7
|
arviz/utils.py,sha256=sOUIkqmWtwY3PM-rQpN6arW9MsPt-MfvzdwAe78rT8U,26425
|
|
8
8
|
arviz/data/__init__.py,sha256=SG2umdZ8uVNYKVBoVYPy5tNxJnzLdyw0spPMjMTae5k,1558
|
|
9
|
-
arviz/data/base.py,sha256=
|
|
10
|
-
arviz/data/converters.py,sha256=
|
|
9
|
+
arviz/data/base.py,sha256=ptyUVyp57mVq0QVrPRYzRT1EAisSYZqZucq5_V_ZdX8,21369
|
|
10
|
+
arviz/data/converters.py,sha256=4QU5_0OU84HV3gSXXY_N5bd6S9ft81lfpnCT-8E8qyc,7933
|
|
11
11
|
arviz/data/datasets.py,sha256=wPi23KZI-w4HrhjmY1LUg0Rj0aJobSJ4WO3LBrjfZQc,5392
|
|
12
|
-
arviz/data/inference_data.py,sha256=
|
|
12
|
+
arviz/data/inference_data.py,sha256=3hVaL26YmWeblrZhVKmnaKON3Itn_EsGNssEgSQiEuc,92745
|
|
13
13
|
arviz/data/io_beanmachine.py,sha256=QQVBD6rftvs6_kLIb4Vm1QzQ6BsS0J9DTrzw2Jj4ob8,3745
|
|
14
14
|
arviz/data/io_cmdstan.py,sha256=8YX9Nfkx4LqjfKms4s4GTOkOjZNelb6SukvRZRHY6iM,38994
|
|
15
15
|
arviz/data/io_cmdstanpy.py,sha256=iSr8ciKBFoIa1tJGHEX-2JKkUJRyaTXzRXf-5mu8q5U,42991
|
|
@@ -33,18 +33,18 @@ arviz/plots/__init__.py,sha256=atWhfLXHAD6zaTjbdWdTaJrPTNBl3XpcSCY4etgw_cY,1514
|
|
|
33
33
|
arviz/plots/autocorrplot.py,sha256=f-rYtnZtxgOns5sIT6pdw-EdU74lAVmAeV9b6rKLsgw,5666
|
|
34
34
|
arviz/plots/bfplot.py,sha256=s8bizLCkF5uZnz66UKmuUJs_AXuMVrgGObTa2ofUF-Q,5124
|
|
35
35
|
arviz/plots/bpvplot.py,sha256=QR4znezjiSLMyMagvnJLb9Y1SIlT99gJ52o4FnX5tZg,12098
|
|
36
|
-
arviz/plots/compareplot.py,sha256=
|
|
36
|
+
arviz/plots/compareplot.py,sha256=Z8usSMEeQKs4GmkziDR4dVzSh3Ocd4ySfiNDZVaFOUc,6078
|
|
37
37
|
arviz/plots/densityplot.py,sha256=6477ZljpBCcZRw0SUwcTO4FYjxqw_qYsJupWNo-jCok,10895
|
|
38
38
|
arviz/plots/distcomparisonplot.py,sha256=gVNQUN0VX7hC527fcUk1oxtQRdIl5mrltU95c0Nra9k,7184
|
|
39
39
|
arviz/plots/distplot.py,sha256=xWXOsN-pPBwhHrEjC6lbIJdn-17DtpMueSnj6YzWlX4,8472
|
|
40
40
|
arviz/plots/dotplot.py,sha256=9HTMeT1ZuZ4Vauxvg4TjsvvNnwORG8WWO2HistJwHiU,7736
|
|
41
|
-
arviz/plots/ecdfplot.py,sha256=
|
|
41
|
+
arviz/plots/ecdfplot.py,sha256=eYasPwOYEmzqx82d6SyDg_iPyXkyFuOKnbOBjPrndH0,13112
|
|
42
42
|
arviz/plots/elpdplot.py,sha256=NKqPkwTj9BWDzwMnG0cPeLmYBGMX_meP9F6bqvTwLKY,6433
|
|
43
43
|
arviz/plots/energyplot.py,sha256=znEDPYpWaTIX0XpdVoyhXOITJ4A8BYkI9t1TVhJq4Qo,4797
|
|
44
44
|
arviz/plots/essplot.py,sha256=ch0DjUQDILk4ohpSUR-9VHejGFb6Xmelly-qa-fKb9E,11741
|
|
45
|
-
arviz/plots/forestplot.py,sha256=
|
|
45
|
+
arviz/plots/forestplot.py,sha256=37Wj4wFGjydZS4SpdqZ9qLxhZBo4rFxV_MWQnZAS7DA,11897
|
|
46
46
|
arviz/plots/hdiplot.py,sha256=cNj2r0dPxtquZNoChgjFO-wmqgU-W-dq_ed1kWJ2vHI,7589
|
|
47
|
-
arviz/plots/kdeplot.py,sha256=
|
|
47
|
+
arviz/plots/kdeplot.py,sha256=55mQPyIrvPKeJbjTsqWTExcff6QPvXFXG47XtDfPs_Y,11924
|
|
48
48
|
arviz/plots/khatplot.py,sha256=u03gmBG1xwxG07ASLZEJB-GsRhRHtUCtbglpC1N0aIg,8086
|
|
49
49
|
arviz/plots/lmplot.py,sha256=LxR7RXkaAi5J8076isebVrtdk6UwbcTRekEymM9S6cY,11726
|
|
50
50
|
arviz/plots/loopitplot.py,sha256=bFUO_Fy4z6u6E39GdaF4rIvc-COWNwF4A0n2kcmZBfA,8321
|
|
@@ -139,15 +139,15 @@ arviz/static/html/icons-svg-inline.html,sha256=t-ChbtS1Gv8uZxc31DCJS8SuXDsLGUHoK
|
|
|
139
139
|
arviz/stats/__init__.py,sha256=jWXBXngHmYFy8m_3QJKYRvLszI4L5Q1aIBS79PC9Gms,700
|
|
140
140
|
arviz/stats/density_utils.py,sha256=WCEkXCQsaycY_usA6xkorhIqr3_5ru7wgwE9eJJgdH8,32216
|
|
141
141
|
arviz/stats/diagnostics.py,sha256=qGIrq258E0vl_tJwZSCvmp0dbQxvysrdJ8zzIsaK50A,32501
|
|
142
|
-
arviz/stats/ecdf_utils.py,sha256=
|
|
143
|
-
arviz/stats/stats.py,sha256=
|
|
142
|
+
arviz/stats/ecdf_utils.py,sha256=Wy38wL-bsHDlpyU9qnDjedYBvbP_6ZrzJuWo6NzD2Xg,11835
|
|
143
|
+
arviz/stats/stats.py,sha256=_4_L4_dOmyeWploQMQuUPjPFzjC3DMEetn_RIl3IP8c,86678
|
|
144
144
|
arviz/stats/stats_refitting.py,sha256=trbPC7LCnsb-n5D6g7J0bzXJCPfcDukJDniB4ud1z9E,5415
|
|
145
145
|
arviz/stats/stats_utils.py,sha256=XG8ILPVs8Jbh_v7jzLfwMkm2HraT2j2-Hxe_kEYlLjQ,20076
|
|
146
146
|
arviz/tests/__init__.py,sha256=TiS6C1IzwAXmNa8u36Y2xzL1CTTZm2PwzAtmZgoqepE,18
|
|
147
147
|
arviz/tests/conftest.py,sha256=6U9WpKmYf38EVRoFZNBpV0CunQvESBFJG2SJ8IBEkL4,1270
|
|
148
148
|
arviz/tests/helpers.py,sha256=qhsOhLtfyz-dC2yuT6ug0frYZlbims06BljJuEVDP6E,23593
|
|
149
149
|
arviz/tests/base_tests/__init__.py,sha256=zg7V5_0DZrCz7ozETqET6bUpAvUUmmkSoLpJLwaIj2E,23
|
|
150
|
-
arviz/tests/base_tests/test_data.py,sha256=
|
|
150
|
+
arviz/tests/base_tests/test_data.py,sha256=QTKeQtTflU5TSnGk-rFLV9OQhmvoQ7RT962MLpu2YXU,63543
|
|
151
151
|
arviz/tests/base_tests/test_data_zarr.py,sha256=sPWnIQ7vPhN5Ql3Dq4JENuSwQV5IeignQjy9BAYe1_A,5441
|
|
152
152
|
arviz/tests/base_tests/test_diagnostics.py,sha256=w8yT2WxelnxH-ynAN9lvspQTRR_UlDmnXIRMe7fus1c,20219
|
|
153
153
|
arviz/tests/base_tests/test_diagnostics_numba.py,sha256=2G5O-7Hz66DSaHIZtjs2XL45RezYnXQZH6Dg2Ow-p4Q,2847
|
|
@@ -155,10 +155,10 @@ arviz/tests/base_tests/test_helpers.py,sha256=PogHpWCMBEtkuzKt9jGQ8uIPg0cLDwztXx
|
|
|
155
155
|
arviz/tests/base_tests/test_labels.py,sha256=X08vTMmcgXkYGbE2Qnu_UUDSTAIvSNKdnyqoWwmj008,1686
|
|
156
156
|
arviz/tests/base_tests/test_plot_utils.py,sha256=lwDZYDNrlEOKP-asJv6qu3sH_4y-FiHcFlqnMTpZyhw,11771
|
|
157
157
|
arviz/tests/base_tests/test_plots_bokeh.py,sha256=1JqUqLKUb1g4c4w41K3j_LCT4eqb3u1qGnYbUuJMHPE,39148
|
|
158
|
-
arviz/tests/base_tests/test_plots_matplotlib.py,sha256=
|
|
158
|
+
arviz/tests/base_tests/test_plots_matplotlib.py,sha256=l9usdmjdI8RV954rknfJvcC-wwnoaRtqJ8wN2SukH1I,65818
|
|
159
159
|
arviz/tests/base_tests/test_rcparams.py,sha256=b9ueOXd9C0xiUIqgS0qnzvalHFgTFK7sUqL8UAzgJNs,10851
|
|
160
160
|
arviz/tests/base_tests/test_stats.py,sha256=uBrlHdwLQ9w9bP4Cq454qoZ754Xll1kYOpxEr2AwZF4,32385
|
|
161
|
-
arviz/tests/base_tests/test_stats_ecdf_utils.py,sha256=
|
|
161
|
+
arviz/tests/base_tests/test_stats_ecdf_utils.py,sha256=p1FnQzlC0fjjKDFfhbHIrrbwAVhLiygH4J0aarx89A0,6038
|
|
162
162
|
arviz/tests/base_tests/test_stats_numba.py,sha256=wGXgNuSO_gwJajoYtXSgpIe88PcBRyIkRihxC8paR-o,1582
|
|
163
163
|
arviz/tests/base_tests/test_stats_utils.py,sha256=Udkw8tODs8mLt3_hO3HgNczrU0n09IJrML2agXF-upQ,13864
|
|
164
164
|
arviz/tests/base_tests/test_utils.py,sha256=Auggtvwv3Y9STS8Tbram-IQe5IhewkwFN14CTcjRd5M,12533
|
|
@@ -176,8 +176,8 @@ arviz/wrappers/__init__.py,sha256=d8GTUuBW_30LyDyk6qn2MAnvg-GZCeUw_i5SUPqaa1w,35
|
|
|
176
176
|
arviz/wrappers/base.py,sha256=Vvh330pdzIvBEaikHsDP1ej6L2jCZZ0Dqj5TvUbYesI,9134
|
|
177
177
|
arviz/wrappers/wrap_pymc.py,sha256=ltKv55aG0WTWXVDJuff5TXkgJJ_ESLvlT-JPlh3yHAg,1143
|
|
178
178
|
arviz/wrappers/wrap_stan.py,sha256=c40brlajoPcc3xk00xI9Hqc-y0xcbAmFAIZOtfXWeqo,5525
|
|
179
|
-
arviz-0.
|
|
180
|
-
arviz-0.
|
|
181
|
-
arviz-0.
|
|
182
|
-
arviz-0.
|
|
183
|
-
arviz-0.
|
|
179
|
+
arviz-0.20.0.dist-info/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
|
|
180
|
+
arviz-0.20.0.dist-info/METADATA,sha256=xxMeqVgWrA6YkcGKDSJhbCyn-FKRuIBqlUIl8t1Qess,8848
|
|
181
|
+
arviz-0.20.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
|
182
|
+
arviz-0.20.0.dist-info/top_level.txt,sha256=5MFvqrTtYRWsIx-SjKuFIUHtrnVJq0Ngd0Nc2_etQhE,6
|
|
183
|
+
arviz-0.20.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|