skfolio 0.5.0__tar.gz → 0.5.2__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 (101) hide show
  1. {skfolio-0.5.0/src/skfolio.egg-info → skfolio-0.5.2}/PKG-INFO +11 -5
  2. {skfolio-0.5.0 → skfolio-0.5.2}/README.rst +6 -3
  3. {skfolio-0.5.0 → skfolio-0.5.2}/pyproject.toml +6 -3
  4. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/datasets/_base.py +4 -1
  5. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_implied_covariance.py +1 -1
  6. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/convex/_base.py +12 -1
  7. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/convex/_risk_budgeting.py +5 -12
  8. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/utils/stats.py +2 -2
  9. {skfolio-0.5.0 → skfolio-0.5.2/src/skfolio.egg-info}/PKG-INFO +11 -5
  10. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio.egg-info/requires.txt +4 -1
  11. {skfolio-0.5.0 → skfolio-0.5.2}/LICENSE +0 -0
  12. {skfolio-0.5.0 → skfolio-0.5.2}/MANIFEST.in +0 -0
  13. {skfolio-0.5.0 → skfolio-0.5.2}/setup.cfg +0 -0
  14. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/__init__.py +0 -0
  15. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/cluster/__init__.py +0 -0
  16. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/cluster/_hierarchical.py +0 -0
  17. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/datasets/__init__.py +0 -0
  18. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/datasets/data/__init__.py +0 -0
  19. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/datasets/data/factors_dataset.csv.gz +0 -0
  20. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/datasets/data/sp500_dataset.csv.gz +0 -0
  21. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/datasets/data/sp500_index.csv.gz +0 -0
  22. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/distance/__init__.py +0 -0
  23. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/distance/_base.py +0 -0
  24. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/distance/_distance.py +0 -0
  25. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/exceptions.py +0 -0
  26. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/measures/__init__.py +0 -0
  27. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/measures/_enums.py +0 -0
  28. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/measures/_measures.py +0 -0
  29. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/metrics/__init__.py +0 -0
  30. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/metrics/_scorer.py +0 -0
  31. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/model_selection/__init__.py +0 -0
  32. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/model_selection/_combinatorial.py +0 -0
  33. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/model_selection/_validation.py +0 -0
  34. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/model_selection/_walk_forward.py +0 -0
  35. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/__init__.py +0 -0
  36. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/__init__.py +0 -0
  37. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_base.py +0 -0
  38. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_denoise_covariance.py +0 -0
  39. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_detone_covariance.py +0 -0
  40. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_empirical_covariance.py +0 -0
  41. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_ew_covariance.py +0 -0
  42. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_gerber_covariance.py +0 -0
  43. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_graphical_lasso_cv.py +0 -0
  44. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_ledoit_wolf.py +0 -0
  45. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_oas.py +0 -0
  46. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/covariance/_shrunk_covariance.py +0 -0
  47. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/expected_returns/__init__.py +0 -0
  48. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/expected_returns/_base.py +0 -0
  49. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/expected_returns/_empirical_mu.py +0 -0
  50. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/expected_returns/_equilibrium_mu.py +0 -0
  51. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/expected_returns/_ew_mu.py +0 -0
  52. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/moments/expected_returns/_shrunk_mu.py +0 -0
  53. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/__init__.py +0 -0
  54. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/_base.py +0 -0
  55. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/cluster/__init__.py +0 -0
  56. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/cluster/_nco.py +0 -0
  57. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/cluster/hierarchical/__init__.py +0 -0
  58. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/cluster/hierarchical/_base.py +0 -0
  59. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/cluster/hierarchical/_herc.py +0 -0
  60. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/cluster/hierarchical/_hrp.py +0 -0
  61. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/convex/__init__.py +0 -0
  62. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/convex/_distributionally_robust.py +0 -0
  63. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/convex/_maximum_diversification.py +0 -0
  64. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/convex/_mean_risk.py +0 -0
  65. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/ensemble/__init__.py +0 -0
  66. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/ensemble/_base.py +0 -0
  67. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/ensemble/_stacking.py +0 -0
  68. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/naive/__init__.py +0 -0
  69. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/optimization/naive/_naive.py +0 -0
  70. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/population/__init__.py +0 -0
  71. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/population/_population.py +0 -0
  72. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/portfolio/__init__.py +0 -0
  73. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/portfolio/_base.py +0 -0
  74. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/portfolio/_multi_period_portfolio.py +0 -0
  75. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/portfolio/_portfolio.py +0 -0
  76. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/pre_selection/__init__.py +0 -0
  77. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/pre_selection/_drop_correlated.py +0 -0
  78. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/pre_selection/_select_complete.py +0 -0
  79. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/pre_selection/_select_k_extremes.py +0 -0
  80. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/pre_selection/_select_non_dominated.py +0 -0
  81. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/pre_selection/_select_non_expiring.py +0 -0
  82. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/preprocessing/__init__.py +0 -0
  83. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/preprocessing/_returns.py +0 -0
  84. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/prior/__init__.py +0 -0
  85. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/prior/_base.py +0 -0
  86. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/prior/_black_litterman.py +0 -0
  87. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/prior/_empirical.py +0 -0
  88. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/prior/_factor_model.py +0 -0
  89. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/typing.py +0 -0
  90. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/uncertainty_set/__init__.py +0 -0
  91. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/uncertainty_set/_base.py +0 -0
  92. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/uncertainty_set/_bootstrap.py +0 -0
  93. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/uncertainty_set/_empirical.py +0 -0
  94. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/utils/__init__.py +0 -0
  95. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/utils/bootstrap.py +0 -0
  96. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/utils/equations.py +0 -0
  97. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/utils/sorting.py +0 -0
  98. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio/utils/tools.py +0 -0
  99. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio.egg-info/SOURCES.txt +0 -0
  100. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio.egg-info/dependency_links.txt +0 -0
  101. {skfolio-0.5.0 → skfolio-0.5.2}/src/skfolio.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skfolio
3
- Version: 0.5.0
3
+ Version: 0.5.2
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>
@@ -73,7 +73,7 @@ Requires-Dist: sphinx-gallery; extra == "docs"
73
73
  Requires-Dist: sphinx-design; extra == "docs"
74
74
  Requires-Dist: pydata-sphinx-theme==0.13.3; extra == "docs"
75
75
  Requires-Dist: matplotlib; extra == "docs"
76
- Requires-Dist: kaleido; extra == "docs"
76
+ Requires-Dist: kaleido==0.2.1; extra == "docs"
77
77
  Requires-Dist: sphinx-copybutton; extra == "docs"
78
78
  Requires-Dist: numpydoc; extra == "docs"
79
79
  Requires-Dist: sphinx-togglebutton; extra == "docs"
@@ -82,10 +82,13 @@ Requires-Dist: sphinx-prompt; extra == "docs"
82
82
  Requires-Dist: sphinxext.opengraph; extra == "docs"
83
83
  Requires-Dist: sphinx-sitemap; extra == "docs"
84
84
  Requires-Dist: sphinx-favicon; extra == "docs"
85
+ Requires-Dist: jupyterlite-sphinx; extra == "docs"
86
+ Requires-Dist: jupyterlite-pyodide-kernel; extra == "docs"
87
+ Requires-Dist: nbformat; extra == "docs"
85
88
 
86
89
  .. -*- mode: rst -*-
87
90
 
88
- |Licence| |Codecov| |Black| |PythonVersion| |PyPi| |CI/CD| |Downloads| |Ruff| |Contribution| |Website|
91
+ |Licence| |Codecov| |Black| |PythonVersion| |PyPi| |CI/CD| |Downloads| |Ruff| |Contribution| |Website| |JupyterLite|
89
92
 
90
93
  .. |Licence| image:: https://img.shields.io/badge/License-BSD%203--Clause-blue.svg
91
94
  :target: https://github.com/skfolio/skfolio/blob/main/LICENSE
@@ -117,14 +120,17 @@ Requires-Dist: sphinx-favicon; extra == "docs"
117
120
  .. |Website| image:: https://img.shields.io/website.svg?down_color=red&down_message=down&up_color=53cc0d&up_message=up&url=https://skfolio.org
118
121
  :target: https://skfolio.org
119
122
 
123
+ .. |JupyterLite| image:: https://jupyterlite.rtfd.io/en/latest/_static/badge.svg
124
+ :target: https://skfolio.org/lite
125
+
120
126
  .. |PythonMinVersion| replace:: 3.10
121
127
  .. |NumpyMinVersion| replace:: 1.23.4
122
128
  .. |ScipyMinVersion| replace:: 1.8.0
123
129
  .. |PandasMinVersion| replace:: 1.4.1
124
130
  .. |CvxpyMinVersion| replace:: 1.4.1
125
- .. |SklearnMinVersion| replace:: 1.3.2
131
+ .. |SklearnMinVersion| replace:: 1.5.0
126
132
  .. |JoblibMinVersion| replace:: 1.3.2
127
- .. |PlotlyMinVersion| replace:: 5.15.0
133
+ .. |PlotlyMinVersion| replace:: 5.22.0
128
134
 
129
135
 
130
136
  ===============
@@ -1,6 +1,6 @@
1
1
  .. -*- mode: rst -*-
2
2
 
3
- |Licence| |Codecov| |Black| |PythonVersion| |PyPi| |CI/CD| |Downloads| |Ruff| |Contribution| |Website|
3
+ |Licence| |Codecov| |Black| |PythonVersion| |PyPi| |CI/CD| |Downloads| |Ruff| |Contribution| |Website| |JupyterLite|
4
4
 
5
5
  .. |Licence| image:: https://img.shields.io/badge/License-BSD%203--Clause-blue.svg
6
6
  :target: https://github.com/skfolio/skfolio/blob/main/LICENSE
@@ -32,14 +32,17 @@
32
32
  .. |Website| image:: https://img.shields.io/website.svg?down_color=red&down_message=down&up_color=53cc0d&up_message=up&url=https://skfolio.org
33
33
  :target: https://skfolio.org
34
34
 
35
+ .. |JupyterLite| image:: https://jupyterlite.rtfd.io/en/latest/_static/badge.svg
36
+ :target: https://skfolio.org/lite
37
+
35
38
  .. |PythonMinVersion| replace:: 3.10
36
39
  .. |NumpyMinVersion| replace:: 1.23.4
37
40
  .. |ScipyMinVersion| replace:: 1.8.0
38
41
  .. |PandasMinVersion| replace:: 1.4.1
39
42
  .. |CvxpyMinVersion| replace:: 1.4.1
40
- .. |SklearnMinVersion| replace:: 1.3.2
43
+ .. |SklearnMinVersion| replace:: 1.5.0
41
44
  .. |JoblibMinVersion| replace:: 1.3.2
42
- .. |PlotlyMinVersion| replace:: 5.15.0
45
+ .. |PlotlyMinVersion| replace:: 5.22.0
43
46
 
44
47
 
45
48
  ===============
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "skfolio"
7
- version = "0.5.0"
7
+ version = "0.5.2"
8
8
  maintainers = [
9
9
  { name = "Hugo Delatte", email = "delatte.hugo@gmail.com" },
10
10
  ]
@@ -70,7 +70,7 @@ docs = [
70
70
  "sphinx-design",
71
71
  "pydata-sphinx-theme==0.13.3",
72
72
  "matplotlib",
73
- "kaleido",
73
+ "kaleido==0.2.1",
74
74
  "sphinx-copybutton",
75
75
  "numpydoc",
76
76
  "sphinx-togglebutton",
@@ -78,7 +78,10 @@ docs = [
78
78
  "sphinx-prompt",
79
79
  "sphinxext.opengraph",
80
80
  "sphinx-sitemap",
81
- "sphinx-favicon"
81
+ "sphinx-favicon",
82
+ "jupyterlite-sphinx",
83
+ "jupyterlite-pyodide-kernel",
84
+ "nbformat",
82
85
  ]
83
86
 
84
87
  [project.urls]
@@ -11,6 +11,7 @@
11
11
  import gzip
12
12
  import os
13
13
  import shutil
14
+ import sys
14
15
  import urllib.request as ur
15
16
  from importlib import resources
16
17
  from pathlib import Path
@@ -140,7 +141,9 @@ def download_dataset(
140
141
  DataFrame with each row representing one observation and each column
141
142
  representing the asset price of a given observation.
142
143
  """
143
- url = (
144
+ # Use a CORS proxy when triggering requests from the browser
145
+ url_prefix = "https://corsproxy.io/?" if sys.platform == "emscripten" else ""
146
+ url = url_prefix + (
144
147
  f"https://github.com/skfolio/skfolio-datasets/raw/main/"
145
148
  f"datasets/{data_filename}.csv.gz"
146
149
  )
@@ -259,7 +259,7 @@ class ImpliedCovariance(BaseCovariance):
259
259
  if assets_names is not None:
260
260
  vol_assets_names = get_feature_names(implied_vol)
261
261
  if vol_assets_names is not None:
262
- missing_assets = assets_names[~np.in1d(assets_names, vol_assets_names)]
262
+ missing_assets = assets_names[~np.isin(assets_names, vol_assets_names)]
263
263
  if len(missing_assets) > 0:
264
264
  raise ValueError(
265
265
  f"The following assets are missing from "
@@ -622,7 +622,11 @@ class ConvexOptimization(BaseOptimization, ABC):
622
622
  self._cvx_cache = {}
623
623
 
624
624
  def _get_weight_constraints(
625
- self, n_assets: int, w: cp.Variable, factor: skt.Factor
625
+ self,
626
+ n_assets: int,
627
+ w: cp.Variable,
628
+ factor: skt.Factor,
629
+ allow_negative_weights: bool = True,
626
630
  ) -> list[cpc.Constraint]:
627
631
  """Compute weight constraints from input parameters.
628
632
 
@@ -651,6 +655,13 @@ class ConvexOptimization(BaseOptimization, ABC):
651
655
  fill_value=0,
652
656
  name="min_weights",
653
657
  )
658
+
659
+ if not allow_negative_weights and np.any(min_weights < 0):
660
+ raise ValueError(
661
+ f"{self.__class__.__name__} must have non negative `min_weights` "
662
+ f"constraint otherwise the problem becomes non-convex."
663
+ )
664
+
654
665
  constraints.append(
655
666
  w * self._scale_constraints
656
667
  >= min_weights * factor * self._scale_constraints
@@ -432,15 +432,6 @@ class RiskBudgeting(ConvexOptimization):
432
432
  self.min_return = min_return
433
433
  self.risk_budget = risk_budget
434
434
 
435
- def _validation(self) -> None:
436
- if not isinstance(self.risk_measure, RiskMeasure):
437
- raise TypeError("risk_measure must be of type `RiskMeasure`")
438
- if self.min_weights < 0:
439
- raise ValueError(
440
- "Risk Budgeting must have non negative `min_weights` constraint"
441
- " otherwise the problem becomes non-convex."
442
- )
443
-
444
435
  def fit(self, X: npt.ArrayLike, y=None, **fit_params) -> "RiskBudgeting":
445
436
  """Fit the Risk Budgeting Optimization estimator.
446
437
 
@@ -462,8 +453,10 @@ class RiskBudgeting(ConvexOptimization):
462
453
  routed_params = skm.process_routing(self, "fit", **fit_params)
463
454
 
464
455
  self._check_feature_names(X, reset=True)
465
- # Validate
466
- self._validation()
456
+
457
+ if not isinstance(self.risk_measure, RiskMeasure):
458
+ raise TypeError("risk_measure must be of type `RiskMeasure`")
459
+
467
460
  # Used to avoid adding multiple times similar constrains linked to identical
468
461
  # risk models
469
462
  self.prior_estimator_ = check_estimator(
@@ -518,7 +511,7 @@ class RiskBudgeting(ConvexOptimization):
518
511
 
519
512
  # weight constraints
520
513
  constraints += self._get_weight_constraints(
521
- n_assets=n_assets, w=w, factor=factor
514
+ n_assets=n_assets, w=w, factor=factor, allow_negative_weights=False
522
515
  )
523
516
 
524
517
  parameters_values = []
@@ -185,7 +185,7 @@ def is_cholesky_dec(x: np.ndarray) -> bool:
185
185
  try:
186
186
  np.linalg.cholesky(x)
187
187
  return True
188
- except np.linalg.linalg.LinAlgError:
188
+ except np.linalg.LinAlgError:
189
189
  return False
190
190
 
191
191
 
@@ -200,7 +200,7 @@ def is_positive_definite(x: np.ndarray) -> bool:
200
200
  Returns
201
201
  -------
202
202
  value : bool
203
- True if if the matrix is positive definite, False otherwise.
203
+ True if the matrix is positive definite, False otherwise.
204
204
  """
205
205
  return np.all(np.linalg.eigvals(x) > 0)
206
206
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skfolio
3
- Version: 0.5.0
3
+ Version: 0.5.2
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>
@@ -73,7 +73,7 @@ Requires-Dist: sphinx-gallery; extra == "docs"
73
73
  Requires-Dist: sphinx-design; extra == "docs"
74
74
  Requires-Dist: pydata-sphinx-theme==0.13.3; extra == "docs"
75
75
  Requires-Dist: matplotlib; extra == "docs"
76
- Requires-Dist: kaleido; extra == "docs"
76
+ Requires-Dist: kaleido==0.2.1; extra == "docs"
77
77
  Requires-Dist: sphinx-copybutton; extra == "docs"
78
78
  Requires-Dist: numpydoc; extra == "docs"
79
79
  Requires-Dist: sphinx-togglebutton; extra == "docs"
@@ -82,10 +82,13 @@ Requires-Dist: sphinx-prompt; extra == "docs"
82
82
  Requires-Dist: sphinxext.opengraph; extra == "docs"
83
83
  Requires-Dist: sphinx-sitemap; extra == "docs"
84
84
  Requires-Dist: sphinx-favicon; extra == "docs"
85
+ Requires-Dist: jupyterlite-sphinx; extra == "docs"
86
+ Requires-Dist: jupyterlite-pyodide-kernel; extra == "docs"
87
+ Requires-Dist: nbformat; extra == "docs"
85
88
 
86
89
  .. -*- mode: rst -*-
87
90
 
88
- |Licence| |Codecov| |Black| |PythonVersion| |PyPi| |CI/CD| |Downloads| |Ruff| |Contribution| |Website|
91
+ |Licence| |Codecov| |Black| |PythonVersion| |PyPi| |CI/CD| |Downloads| |Ruff| |Contribution| |Website| |JupyterLite|
89
92
 
90
93
  .. |Licence| image:: https://img.shields.io/badge/License-BSD%203--Clause-blue.svg
91
94
  :target: https://github.com/skfolio/skfolio/blob/main/LICENSE
@@ -117,14 +120,17 @@ Requires-Dist: sphinx-favicon; extra == "docs"
117
120
  .. |Website| image:: https://img.shields.io/website.svg?down_color=red&down_message=down&up_color=53cc0d&up_message=up&url=https://skfolio.org
118
121
  :target: https://skfolio.org
119
122
 
123
+ .. |JupyterLite| image:: https://jupyterlite.rtfd.io/en/latest/_static/badge.svg
124
+ :target: https://skfolio.org/lite
125
+
120
126
  .. |PythonMinVersion| replace:: 3.10
121
127
  .. |NumpyMinVersion| replace:: 1.23.4
122
128
  .. |ScipyMinVersion| replace:: 1.8.0
123
129
  .. |PandasMinVersion| replace:: 1.4.1
124
130
  .. |CvxpyMinVersion| replace:: 1.4.1
125
- .. |SklearnMinVersion| replace:: 1.3.2
131
+ .. |SklearnMinVersion| replace:: 1.5.0
126
132
  .. |JoblibMinVersion| replace:: 1.3.2
127
- .. |PlotlyMinVersion| replace:: 5.15.0
133
+ .. |PlotlyMinVersion| replace:: 5.22.0
128
134
 
129
135
 
130
136
  ===============
@@ -12,7 +12,7 @@ sphinx-gallery
12
12
  sphinx-design
13
13
  pydata-sphinx-theme==0.13.3
14
14
  matplotlib
15
- kaleido
15
+ kaleido==0.2.1
16
16
  sphinx-copybutton
17
17
  numpydoc
18
18
  sphinx-togglebutton
@@ -20,6 +20,9 @@ sphinx-favicon
20
20
  sphinx-prompt
21
21
  sphinxext.opengraph
22
22
  sphinx-sitemap
23
+ jupyterlite-sphinx
24
+ jupyterlite-pyodide-kernel
25
+ nbformat
23
26
 
24
27
  [tests]
25
28
  pytest
File without changes
File without changes
File without changes
File without changes
File without changes