skfolio 0.8.1__tar.gz → 0.9.1__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.
- {skfolio-0.8.1/src/skfolio.egg-info → skfolio-0.9.1}/PKG-INFO +1 -1
- {skfolio-0.8.1 → skfolio-0.9.1}/pyproject.toml +1 -1
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/convex/_maximum_diversification.py +0 -3
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/convex/_mean_risk.py +10 -2
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/pre_selection/__init__.py +2 -0
- skfolio-0.9.1/src/skfolio/pre_selection/_drop_zero_variance.py +75 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/pre_selection/_select_non_expiring.py +1 -1
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/utils/equations.py +1 -1
- {skfolio-0.8.1 → skfolio-0.9.1/src/skfolio.egg-info}/PKG-INFO +1 -1
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio.egg-info/SOURCES.txt +1 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/LICENSE +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/MANIFEST.in +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/README.rst +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/setup.cfg +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/cluster/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/cluster/_hierarchical.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/datasets/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/datasets/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/datasets/data/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/datasets/data/factors_dataset.csv.gz +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/datasets/data/sp500_dataset.csv.gz +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/datasets/data/sp500_index.csv.gz +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distance/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distance/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distance/_distance.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_clayton.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_gaussian.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_gumbel.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_independent.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_joe.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_selection.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_student_t.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/copula/_utils.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/multivariate/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/multivariate/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/multivariate/_utils.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/multivariate/_vine_copula.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/univariate/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_gaussian.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_johnson_su.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_normal_inverse_gaussian.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_selection.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_student_t.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/exceptions.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/measures/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/measures/_enums.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/measures/_measures.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/metrics/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/metrics/_scorer.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/model_selection/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/model_selection/_combinatorial.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/model_selection/_validation.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/model_selection/_walk_forward.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_denoise_covariance.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_detone_covariance.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_empirical_covariance.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_ew_covariance.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_gerber_covariance.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_graphical_lasso_cv.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_implied_covariance.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_ledoit_wolf.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_oas.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/covariance/_shrunk_covariance.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_empirical_mu.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_equilibrium_mu.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_ew_mu.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_shrunk_mu.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/cluster/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/cluster/_nco.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/cluster/hierarchical/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/cluster/hierarchical/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/cluster/hierarchical/_herc.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/cluster/hierarchical/_hrp.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/convex/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/convex/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/convex/_distributionally_robust.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/convex/_risk_budgeting.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/ensemble/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/ensemble/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/ensemble/_stacking.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/naive/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/optimization/naive/_naive.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/population/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/population/_population.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/portfolio/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/portfolio/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/portfolio/_multi_period_portfolio.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/portfolio/_portfolio.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/pre_selection/_drop_correlated.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/pre_selection/_select_complete.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/pre_selection/_select_k_extremes.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/pre_selection/_select_non_dominated.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/preprocessing/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/preprocessing/_returns.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/prior/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/prior/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/prior/_black_litterman.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/prior/_empirical.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/prior/_factor_model.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/prior/_synthetic_data.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/synthetic_returns/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/typing.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/uncertainty_set/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/uncertainty_set/_base.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/uncertainty_set/_bootstrap.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/uncertainty_set/_empirical.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/utils/__init__.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/utils/bootstrap.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/utils/sorting.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/utils/stats.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/utils/tools.py +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio.egg-info/dependency_links.txt +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio.egg-info/requires.txt +0 -0
- {skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: skfolio
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.9.1
|
4
4
|
Summary: Portfolio optimization built on top of scikit-learn
|
5
5
|
Author-email: Hugo Delatte <delatte.hugo@gmail.com>
|
6
6
|
Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>
|
@@ -256,9 +256,6 @@ class MaximumDiversification(MeanRisk):
|
|
256
256
|
min_return : float | array-like of shape (n_optimization), optional
|
257
257
|
Lower bound constraint on the expected return.
|
258
258
|
|
259
|
-
min_return : float | array-like of shape (n_optimization), optional
|
260
|
-
Lower bound constraint on the expected return.
|
261
|
-
|
262
259
|
add_objective : Callable[[cp.Variable], cp.Expression], optional
|
263
260
|
Add a custom objective to the existing objective expression.
|
264
261
|
It is a function that must take as argument the weights `w` and returns a
|
@@ -902,7 +902,7 @@ class MeanRisk(ConvexOptimization):
|
|
902
902
|
)
|
903
903
|
constraints += [
|
904
904
|
tracking_error * self._scale_constraints
|
905
|
-
<= self.max_tracking_error * self._scale_constraints
|
905
|
+
<= self.max_tracking_error * factor * self._scale_constraints
|
906
906
|
]
|
907
907
|
|
908
908
|
# Turnover
|
@@ -1036,6 +1036,15 @@ class MeanRisk(ConvexOptimization):
|
|
1036
1036
|
+ custom_objective * self._scale_objective
|
1037
1037
|
)
|
1038
1038
|
case ObjectiveFunction.MAXIMIZE_RATIO:
|
1039
|
+
# Capture common obvious mistake before solver failure to help user
|
1040
|
+
if np.isscalar(self.min_weights) and self.min_weights >= 0:
|
1041
|
+
if np.max(prior_model.mu) - self.risk_free_rate <= 0:
|
1042
|
+
raise ValueError(
|
1043
|
+
"Cannot optimize for Maximum Ratio with your current "
|
1044
|
+
"constraints and input. This is because your assets' "
|
1045
|
+
"expected returns are all under-performing your risk-free "
|
1046
|
+
f"rate {self.risk_free_rate:.2%}."
|
1047
|
+
)
|
1039
1048
|
homogenization_factor = _optimal_homogenization_factor(
|
1040
1049
|
mu=prior_model.mu
|
1041
1050
|
)
|
@@ -1060,7 +1069,6 @@ class MeanRisk(ConvexOptimization):
|
|
1060
1069
|
# Fractional Programming Problems".
|
1061
1070
|
# The condition to work is f1 >= 0, so we need to raise an user
|
1062
1071
|
# warning when it's not the case.
|
1063
|
-
# TODO: raise user warning when f1<0
|
1064
1072
|
|
1065
1073
|
constraints += [
|
1066
1074
|
expected_return * self._scale_constraints
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"""Pre Selection module."""
|
2
2
|
|
3
3
|
from skfolio.pre_selection._drop_correlated import DropCorrelated
|
4
|
+
from skfolio.pre_selection._drop_zero_variance import DropZeroVariance
|
4
5
|
from skfolio.pre_selection._select_complete import SelectComplete
|
5
6
|
from skfolio.pre_selection._select_k_extremes import SelectKExtremes
|
6
7
|
from skfolio.pre_selection._select_non_dominated import SelectNonDominated
|
@@ -8,6 +9,7 @@ from skfolio.pre_selection._select_non_expiring import SelectNonExpiring
|
|
8
9
|
|
9
10
|
__all__ = [
|
10
11
|
"DropCorrelated",
|
12
|
+
"DropZeroVariance",
|
11
13
|
"SelectComplete",
|
12
14
|
"SelectKExtremes",
|
13
15
|
"SelectNonDominated",
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"""Pre-selection DropZeroVariance module."""
|
2
|
+
|
3
|
+
# Copyright (c) 2025
|
4
|
+
# Author: Vincent Maladiere <maladiere.vincent@gmail.com>
|
5
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
6
|
+
|
7
|
+
import numpy as np
|
8
|
+
import numpy.typing as npt
|
9
|
+
import sklearn.base as skb
|
10
|
+
import sklearn.feature_selection as skf
|
11
|
+
import sklearn.utils.validation as skv
|
12
|
+
|
13
|
+
|
14
|
+
class DropZeroVariance(skf.SelectorMixin, skb.BaseEstimator):
|
15
|
+
"""Transformer for dropping assets with near-zero variance.
|
16
|
+
|
17
|
+
On short windows, some assets can experience a near-zero variance, making
|
18
|
+
the covariance matrix improper for optimization. This simple transformer drops
|
19
|
+
assets whose variance is below some threshold.
|
20
|
+
|
21
|
+
Parameters
|
22
|
+
----------
|
23
|
+
threshold : float, default=1e-8
|
24
|
+
Minimum variance threshold. The default value is 1e-8. For daily asset returns,
|
25
|
+
this value filters out assets whose daily standard deviation is below 1e-4
|
26
|
+
(0.01%), which corresponds to an annual standard deviation of approximately
|
27
|
+
0.16%, assuming 252 trading days.
|
28
|
+
|
29
|
+
Attributes
|
30
|
+
----------
|
31
|
+
to_keep_ : ndarray of shape (n_assets, )
|
32
|
+
Boolean array indicating which assets are remaining.
|
33
|
+
|
34
|
+
n_features_in_ : int
|
35
|
+
Number of assets seen during `fit`.
|
36
|
+
|
37
|
+
feature_names_in_ : ndarray of shape (`n_features_in_`,)
|
38
|
+
Names of assets seen during `fit`. Defined only when `X`
|
39
|
+
has assets names that are all strings.
|
40
|
+
"""
|
41
|
+
|
42
|
+
to_keep_: np.ndarray
|
43
|
+
|
44
|
+
def __init__(self, threshold: float = 1e-8):
|
45
|
+
self.threshold = threshold
|
46
|
+
|
47
|
+
def fit(self, X: npt.ArrayLike, y=None):
|
48
|
+
"""Fit the transformer on some assets.
|
49
|
+
|
50
|
+
Parameters
|
51
|
+
----------
|
52
|
+
X : array-like of shape (n_observations, n_assets)
|
53
|
+
Price returns of the assets.
|
54
|
+
|
55
|
+
y : Ignored
|
56
|
+
Not used, present for API consistency by convention.
|
57
|
+
|
58
|
+
Returns
|
59
|
+
-------
|
60
|
+
self : DropZeroVariance
|
61
|
+
Fitted estimator.
|
62
|
+
"""
|
63
|
+
X = skv.validate_data(self, X)
|
64
|
+
if self.threshold < 0:
|
65
|
+
raise ValueError(
|
66
|
+
f"`threshold` must be higher than 0, got {self.threshold}."
|
67
|
+
)
|
68
|
+
|
69
|
+
self.to_keep_ = X.var(axis=0) > self.threshold
|
70
|
+
|
71
|
+
return self
|
72
|
+
|
73
|
+
def _get_support_mask(self):
|
74
|
+
skv.check_is_fitted(self)
|
75
|
+
return self.to_keep_
|
@@ -123,7 +123,7 @@ class SelectNonExpiring(skf.SelectorMixin, skb.BaseEstimator):
|
|
123
123
|
)
|
124
124
|
|
125
125
|
if self.expiration_dates is None:
|
126
|
-
raise ValueError("`
|
126
|
+
raise ValueError("`expiration_dates` must be provided")
|
127
127
|
|
128
128
|
if self.expiration_lookahead is None:
|
129
129
|
raise ValueError("`expiration_lookahead` must be provided")
|
@@ -276,7 +276,7 @@ def _matching_array(values: np.ndarray, key: str, sum_to_one: bool) -> np.ndarra
|
|
276
276
|
if not arr.any():
|
277
277
|
raise EquationToMatrixError(f"Unable to find '{key}' in '{values}'")
|
278
278
|
if sum_to_one:
|
279
|
-
s =
|
279
|
+
s = arr.sum()
|
280
280
|
else:
|
281
281
|
s = 1
|
282
282
|
return arr / s
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: skfolio
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.9.1
|
4
4
|
Summary: Portfolio optimization built on top of scikit-learn
|
5
5
|
Author-email: Hugo Delatte <delatte.hugo@gmail.com>
|
6
6
|
Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>
|
@@ -99,6 +99,7 @@ src/skfolio/portfolio/_multi_period_portfolio.py
|
|
99
99
|
src/skfolio/portfolio/_portfolio.py
|
100
100
|
src/skfolio/pre_selection/__init__.py
|
101
101
|
src/skfolio/pre_selection/_drop_correlated.py
|
102
|
+
src/skfolio/pre_selection/_drop_zero_variance.py
|
102
103
|
src/skfolio/pre_selection/_select_complete.py
|
103
104
|
src/skfolio/pre_selection/_select_k_extremes.py
|
104
105
|
src/skfolio/pre_selection/_select_non_dominated.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{skfolio-0.8.1 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_normal_inverse_gaussian.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|