pyextremes 2.4.0__tar.gz → 2.6.0__tar.gz

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.
Files changed (37) hide show
  1. {pyextremes-2.4.0 → pyextremes-2.6.0}/PKG-INFO +2 -2
  2. {pyextremes-2.4.0 → pyextremes-2.6.0}/pyproject.toml +2 -2
  3. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/__init__.py +1 -1
  4. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/eva.py +8 -2
  5. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/model_emcee.py +15 -0
  6. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/models.py +6 -1
  7. {pyextremes-2.4.0 → pyextremes-2.6.0}/LICENSE +0 -0
  8. {pyextremes-2.4.0 → pyextremes-2.6.0}/README.md +0 -0
  9. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/extremes/__init__.py +0 -0
  10. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/extremes/block_maxima.py +0 -0
  11. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/extremes/extremes.py +0 -0
  12. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/extremes/peaks_over_threshold.py +0 -0
  13. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/extremes/return_periods.py +0 -0
  14. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/extremes/transformation.py +0 -0
  15. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/__init__.py +0 -0
  16. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/distribution.py +0 -0
  17. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/model_base.py +0 -0
  18. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/model_lmoments.py +0 -0
  19. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/model_mle.py +0 -0
  20. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/model_mom.py +0 -0
  21. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/models/model_scipy.py +0 -0
  22. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/multivariate/__init__.py +0 -0
  23. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/multivariate/meva.py +0 -0
  24. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/plotting/__init__.py +0 -0
  25. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/plotting/extremes.py +0 -0
  26. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/plotting/mcmc.py +0 -0
  27. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/plotting/probability_plots.py +0 -0
  28. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/plotting/return_values.py +0 -0
  29. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/plotting/style.py +0 -0
  30. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/py.typed +0 -0
  31. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/tests/__init__.py +0 -0
  32. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/tests/ks_test.py +0 -0
  33. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/tests/test_base.py +0 -0
  34. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/tuning/__init__.py +0 -0
  35. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/tuning/hyperparameters.py +0 -0
  36. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/tuning/model_comparison.py +0 -0
  37. {pyextremes-2.4.0 → pyextremes-2.6.0}/src/pyextremes/tuning/threshold_selection.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyextremes
3
- Version: 2.4.0
3
+ Version: 2.6.0
4
4
  Summary: Extreme Value Analysis (EVA) in Python
5
5
  Keywords: statistics,extreme,extreme value analysis,eva,coastal,ocean,oceanography,marine,environmental,engineering
6
6
  Author: George Bocharov
@@ -26,7 +26,7 @@ Classifier: Topic :: Scientific/Engineering :: Mathematics
26
26
  Classifier: Typing :: Typed
27
27
  Requires-Dist: numpy>=1.19.0,<3.0.0
28
28
  Requires-Dist: scipy>=1.5.0,<2.0.0
29
- Requires-Dist: pandas>=1.0.0,<3.0.0
29
+ Requires-Dist: pandas>=1.0.0,<4.0.0
30
30
  Requires-Dist: emcee>=3.0.3,<4.0.0
31
31
  Requires-Dist: matplotlib>=3.3.0,!=3.9.1,<4.0.0
32
32
  Requires-Dist: lmoments3>=1.0.8 ; extra == 'full'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pyextremes"
3
- version = "2.4.0"
3
+ version = "2.6.0"
4
4
  description = "Extreme Value Analysis (EVA) in Python"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -42,7 +42,7 @@ urls = { "homepage" = "https://georgebv.github.io/pyextremes", "github" = "https
42
42
  dependencies = [
43
43
  "numpy>=1.19.0,<3.0.0",
44
44
  "scipy>=1.5.0,<2.0.0",
45
- "pandas>=1.0.0,<3.0.0",
45
+ "pandas>=1.0.0,<4.0.0",
46
46
  "emcee>=3.0.3,<4.0.0",
47
47
  "matplotlib>=3.3.0,!=3.9.1,<4.0.0", # avoid yanked 3.9.1 release
48
48
  ]
@@ -1,4 +1,4 @@
1
- __version__ = "2.4.0"
1
+ __version__ = "2.6.0"
2
2
  __all__ = [
3
3
  "EVA",
4
4
  "get_extremes",
@@ -13,6 +13,7 @@ import scipy.stats
13
13
 
14
14
  from pyextremes.extremes import ExtremesTransformer, get_extremes, get_return_periods
15
15
  from pyextremes.models import MLE, Distribution, Emcee, get_model
16
+ from pyextremes.models.model_emcee import PoolType
16
17
  from pyextremes.plotting import (
17
18
  plot_corner,
18
19
  plot_extremes,
@@ -84,7 +85,7 @@ class EVA:
84
85
  data = data.copy(deep=True)
85
86
 
86
87
  # Ensure that `data` has correct index and value dtypes
87
- if not np.issubdtype(data.dtype, np.number):
88
+ if not pd.api.types.is_numeric_dtype(data):
88
89
  try:
89
90
  message = "`data` values are not numeric - converting to numeric"
90
91
  logger.debug(message)
@@ -620,7 +621,7 @@ class EVA:
620
621
  extremes = extremes.copy(deep=True)
621
622
  if not isinstance(extremes.index, pd.DatetimeIndex):
622
623
  raise TypeError("invalid index type for `extremes`, must be date-time")
623
- if not np.issubdtype(extremes.dtype, np.number):
624
+ if not pd.api.types.is_numeric_dtype(extremes):
624
625
  raise TypeError("`extremes` must have numeric values")
625
626
  if extremes.name is None:
626
627
  extremes.name = self.data.name
@@ -897,6 +898,7 @@ class EVA:
897
898
  n_walkers: int = 100,
898
899
  n_samples: int = 500,
899
900
  progress: bool = False,
901
+ pool: typing.Optional[PoolType] = None,
900
902
  ) -> None: ...
901
903
 
902
904
  def fit_model(
@@ -965,6 +967,10 @@ class EVA:
965
967
  suitable for Jupyter notebooks.
966
968
  If False (default), no progress bar will be shown.
967
969
  This progress bar is a part of the `emcee` package.
970
+ pool : PoolType, optional
971
+ A pool object from the multiprocessing module or similar.
972
+ If provided, the sampler will use this pool to parallelize
973
+ computations.
968
974
 
969
975
  """
970
976
  # Select default distribution
@@ -10,6 +10,17 @@ import scipy.stats
10
10
 
11
11
  from pyextremes.models.model_base import AbstractModelBaseClass
12
12
 
13
+
14
+ @typing.runtime_checkable
15
+ class PoolType(typing.Protocol):
16
+ def map(
17
+ self,
18
+ func: typing.Callable[..., typing.Any],
19
+ iterable: typing.Iterable[typing.Any],
20
+ /,
21
+ ) -> typing.Iterable[typing.Any]: ...
22
+
23
+
13
24
  logger = logging.getLogger(__name__)
14
25
 
15
26
 
@@ -29,6 +40,7 @@ class Emcee(AbstractModelBaseClass):
29
40
  n_walkers: int = 100,
30
41
  n_samples: int = 500,
31
42
  progress: bool = False,
43
+ pool: typing.Optional[PoolType] = None,
32
44
  ) -> None:
33
45
  super().__init__(
34
46
  extremes=extremes,
@@ -37,6 +49,7 @@ class Emcee(AbstractModelBaseClass):
37
49
  n_walkers=n_walkers,
38
50
  n_samples=n_samples,
39
51
  progress=progress,
52
+ pool=pool,
40
53
  )
41
54
  self.n_walkers = n_walkers
42
55
  self.n_samples = n_samples
@@ -50,6 +63,7 @@ class Emcee(AbstractModelBaseClass):
50
63
  n_walkers: int = kwargs.pop("n_walkers")
51
64
  n_samples: int = kwargs.pop("n_samples")
52
65
  progress: bool = kwargs.pop("progress")
66
+ pool: typing.Optional[PoolType] = kwargs.pop("pool", None)
53
67
  if len(kwargs) != 0:
54
68
  raise TypeError(
55
69
  f"unrecognized arguments passed in: {', '.join(kwargs.keys())}"
@@ -60,6 +74,7 @@ class Emcee(AbstractModelBaseClass):
60
74
  nwalkers=n_walkers,
61
75
  ndim=self.distribution.number_of_parameters,
62
76
  log_prob_fn=self.distribution.log_probability,
77
+ pool=pool,
63
78
  )
64
79
 
65
80
  # Run the ensemble sampler
@@ -3,7 +3,7 @@ from typing import Literal, Optional, Union, overload
3
3
  import pandas as pd
4
4
  import scipy.stats
5
5
 
6
- from pyextremes.models.model_emcee import Emcee
6
+ from pyextremes.models.model_emcee import Emcee, PoolType
7
7
  from pyextremes.models.model_lmoments import Lmoments
8
8
  from pyextremes.models.model_mle import MLE
9
9
  from pyextremes.models.model_mom import MOM
@@ -46,6 +46,7 @@ def get_model(
46
46
  n_walkers: int = 100,
47
47
  n_samples: int = 500,
48
48
  progress: bool = False,
49
+ pool: Optional[PoolType] = None,
49
50
  ) -> Emcee: ...
50
51
 
51
52
 
@@ -104,6 +105,10 @@ def get_model(
104
105
  suitable for Jupyter notebooks.
105
106
  If False (default), no progress bar will be shown.
106
107
  This progress bar is a part of the `emcee` package.
108
+ pool : PoolType, optional
109
+ A pool object from the multiprocessing module or similar.
110
+ If provided, the sampler will use this pool to parallelize
111
+ computations.
107
112
 
108
113
  Returns
109
114
  -------
File without changes
File without changes