skfolio 0.10.1__tar.gz → 0.10.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 (129) hide show
  1. {skfolio-0.10.1/src/skfolio.egg-info → skfolio-0.10.2}/PKG-INFO +42 -12
  2. {skfolio-0.10.1 → skfolio-0.10.2}/README.rst +40 -10
  3. {skfolio-0.10.1 → skfolio-0.10.2}/pyproject.toml +3 -2
  4. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_empirical.py +1 -0
  5. {skfolio-0.10.1 → skfolio-0.10.2/src/skfolio.egg-info}/PKG-INFO +42 -12
  6. {skfolio-0.10.1 → skfolio-0.10.2}/LICENSE +0 -0
  7. {skfolio-0.10.1 → skfolio-0.10.2}/MANIFEST.in +0 -0
  8. {skfolio-0.10.1 → skfolio-0.10.2}/setup.cfg +0 -0
  9. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/__init__.py +0 -0
  10. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/cluster/__init__.py +0 -0
  11. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/cluster/_hierarchical.py +0 -0
  12. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/__init__.py +0 -0
  13. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/_base.py +0 -0
  14. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/data/__init__.py +0 -0
  15. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/data/factors_dataset.csv.gz +0 -0
  16. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/data/sp500_dataset.csv.gz +0 -0
  17. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/data/sp500_index.csv.gz +0 -0
  18. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distance/__init__.py +0 -0
  19. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distance/_base.py +0 -0
  20. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distance/_distance.py +0 -0
  21. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/__init__.py +0 -0
  22. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/_base.py +0 -0
  23. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/__init__.py +0 -0
  24. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_base.py +0 -0
  25. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_clayton.py +0 -0
  26. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_gaussian.py +0 -0
  27. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_gumbel.py +0 -0
  28. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_independent.py +0 -0
  29. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_joe.py +0 -0
  30. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_selection.py +0 -0
  31. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_student_t.py +0 -0
  32. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_utils.py +0 -0
  33. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/multivariate/__init__.py +0 -0
  34. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/multivariate/_base.py +0 -0
  35. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/multivariate/_utils.py +0 -0
  36. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/multivariate/_vine_copula.py +0 -0
  37. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/__init__.py +0 -0
  38. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_base.py +0 -0
  39. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_gaussian.py +0 -0
  40. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_johnson_su.py +0 -0
  41. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_normal_inverse_gaussian.py +0 -0
  42. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_selection.py +0 -0
  43. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_student_t.py +0 -0
  44. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/exceptions.py +0 -0
  45. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/measures/__init__.py +0 -0
  46. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/measures/_enums.py +0 -0
  47. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/measures/_measures.py +0 -0
  48. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/metrics/__init__.py +0 -0
  49. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/metrics/_scorer.py +0 -0
  50. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/model_selection/__init__.py +0 -0
  51. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/model_selection/_combinatorial.py +0 -0
  52. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/model_selection/_validation.py +0 -0
  53. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/model_selection/_walk_forward.py +0 -0
  54. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/__init__.py +0 -0
  55. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/__init__.py +0 -0
  56. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_base.py +0 -0
  57. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_denoise_covariance.py +0 -0
  58. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_detone_covariance.py +0 -0
  59. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_empirical_covariance.py +0 -0
  60. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_ew_covariance.py +0 -0
  61. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_gerber_covariance.py +0 -0
  62. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_graphical_lasso_cv.py +0 -0
  63. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_implied_covariance.py +0 -0
  64. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_ledoit_wolf.py +0 -0
  65. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_oas.py +0 -0
  66. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_shrunk_covariance.py +0 -0
  67. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/__init__.py +0 -0
  68. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_base.py +0 -0
  69. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_empirical_mu.py +0 -0
  70. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_equilibrium_mu.py +0 -0
  71. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_ew_mu.py +0 -0
  72. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_shrunk_mu.py +0 -0
  73. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/__init__.py +0 -0
  74. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/_base.py +0 -0
  75. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/__init__.py +0 -0
  76. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/_nco.py +0 -0
  77. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/hierarchical/__init__.py +0 -0
  78. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/hierarchical/_base.py +0 -0
  79. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/hierarchical/_herc.py +0 -0
  80. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/hierarchical/_hrp.py +0 -0
  81. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/__init__.py +0 -0
  82. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_base.py +0 -0
  83. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_distributionally_robust.py +0 -0
  84. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_maximum_diversification.py +0 -0
  85. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_mean_risk.py +0 -0
  86. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_risk_budgeting.py +0 -0
  87. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/ensemble/__init__.py +0 -0
  88. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/ensemble/_stacking.py +0 -0
  89. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/naive/__init__.py +0 -0
  90. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/naive/_naive.py +0 -0
  91. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/population/__init__.py +0 -0
  92. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/population/_population.py +0 -0
  93. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/portfolio/__init__.py +0 -0
  94. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/portfolio/_base.py +0 -0
  95. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/portfolio/_multi_period_portfolio.py +0 -0
  96. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/portfolio/_portfolio.py +0 -0
  97. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/__init__.py +0 -0
  98. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_drop_correlated.py +0 -0
  99. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_drop_zero_variance.py +0 -0
  100. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_select_complete.py +0 -0
  101. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_select_k_extremes.py +0 -0
  102. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_select_non_dominated.py +0 -0
  103. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_select_non_expiring.py +0 -0
  104. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/preprocessing/__init__.py +0 -0
  105. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/preprocessing/_returns.py +0 -0
  106. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/__init__.py +0 -0
  107. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_base.py +0 -0
  108. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_black_litterman.py +0 -0
  109. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_entropy_pooling.py +0 -0
  110. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_factor_model.py +0 -0
  111. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_opinion_pooling.py +0 -0
  112. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_synthetic_data.py +0 -0
  113. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/typing.py +0 -0
  114. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/uncertainty_set/__init__.py +0 -0
  115. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/uncertainty_set/_base.py +0 -0
  116. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/uncertainty_set/_bootstrap.py +0 -0
  117. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/uncertainty_set/_empirical.py +0 -0
  118. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/__init__.py +0 -0
  119. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/bootstrap.py +0 -0
  120. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/composition.py +0 -0
  121. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/equations.py +0 -0
  122. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/figure.py +0 -0
  123. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/sorting.py +0 -0
  124. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/stats.py +0 -0
  125. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/tools.py +0 -0
  126. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio.egg-info/SOURCES.txt +0 -0
  127. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio.egg-info/dependency_links.txt +0 -0
  128. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio.egg-info/requires.txt +0 -0
  129. {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio.egg-info/top_level.txt +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skfolio
3
- Version: 0.10.1
3
+ Version: 0.10.2
4
4
  Summary: Portfolio optimization built on top of scikit-learn
5
5
  Author-email: Hugo Delatte <delatte.hugo@gmail.com>
6
- Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>
6
+ Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>, Carlo Nicolini <c.nicolini@ipazia.com>
7
7
  License: BSD 3-Clause License
8
8
 
9
9
  Copyright (c) 2007-2023 The skfolio developers.
@@ -176,7 +176,6 @@ Installation
176
176
  pip install -U skfolio
177
177
 
178
178
 
179
-
180
179
  Dependencies
181
180
  ~~~~~~~~~~~~
182
181
 
@@ -192,6 +191,23 @@ Dependencies
192
191
  - joblib (>= |JoblibMinVersion|)
193
192
  - plotly (>= |PlotlyMinVersion|)
194
193
 
194
+ Docker
195
+ ~~~~~~
196
+
197
+ You can also spin up a reproducible JupyterLab environment using Docker:
198
+
199
+ Build the image::
200
+
201
+ docker build -t skfolio-jupyterlab .
202
+
203
+ Run the container::
204
+
205
+ docker run -p 8888:8888 -v <path-to-your-folder-containing-data>:/app/data -it skfolio-jupyterlab
206
+
207
+ Browse:
208
+
209
+ Open localhost:8888/lab and start using `skfolio`
210
+
195
211
  Key Concepts
196
212
  ~~~~~~~~~~~~
197
213
  Since the development of modern portfolio theory by Markowitz (1952), mean-variance
@@ -800,7 +816,7 @@ Recognition
800
816
  ~~~~~~~~~~~
801
817
 
802
818
  We would like to thank all contributors to our direct dependencies, such as
803
- scikit-learn and cvxpy, as well as the contributors of the following resources that
819
+ `scikit-learn <https://github.com/scikit-learn/scikit-learn>`_ and `cvxpy <https://github.com/cvxpy/cvxpy>`_, as well as the contributors of the following resources that
804
820
  served as sources of inspiration:
805
821
 
806
822
  * PyPortfolioOpt
@@ -809,6 +825,7 @@ served as sources of inspiration:
809
825
  * microprediction
810
826
  * statsmodels
811
827
  * rsome
828
+ * danielppalomar.com
812
829
  * gautier.marti.ai
813
830
 
814
831
 
@@ -817,12 +834,25 @@ Citation
817
834
 
818
835
  If you use `skfolio` in a scientific publication, we would appreciate citations:
819
836
 
820
- Bibtex entry::
821
-
822
- @misc{skfolio,
823
- author = {Delatte, Hugo and Nicolini, Carlo},
824
- title = {skfolio},
825
- year = {2023},
826
- url = {https://github.com/skfolio/skfolio}
827
- }
837
+ **The library**::
838
+
839
+ @software{skfolio,
840
+ title = {skfolio},
841
+ author = {Delatte, Hugo and Nicolini, Carlo and Manzi, Matteo},
842
+ year = {2024},
843
+ doi = {TBD after next release},
844
+ url = {https://github.com/skfolio/skfolio}
845
+ }
846
+
847
+ **The paper**::
848
+
849
+ @article{nicolini2025skfolio,
850
+ title = {skfolio: Portfolio Optimization in Python},
851
+ author = {Nicolini, Carlo and Manzi, Matteo and Delatte, Hugo},
852
+ journal = {arXiv preprint arXiv:2507.04176},
853
+ year = {2025},
854
+ eprint = {2507.04176},
855
+ archivePrefix = {arXiv},
856
+ url = {https://arxiv.org/abs/2507.04176}
857
+ }
828
858
 
@@ -84,7 +84,6 @@ Installation
84
84
  pip install -U skfolio
85
85
 
86
86
 
87
-
88
87
  Dependencies
89
88
  ~~~~~~~~~~~~
90
89
 
@@ -100,6 +99,23 @@ Dependencies
100
99
  - joblib (>= |JoblibMinVersion|)
101
100
  - plotly (>= |PlotlyMinVersion|)
102
101
 
102
+ Docker
103
+ ~~~~~~
104
+
105
+ You can also spin up a reproducible JupyterLab environment using Docker:
106
+
107
+ Build the image::
108
+
109
+ docker build -t skfolio-jupyterlab .
110
+
111
+ Run the container::
112
+
113
+ docker run -p 8888:8888 -v <path-to-your-folder-containing-data>:/app/data -it skfolio-jupyterlab
114
+
115
+ Browse:
116
+
117
+ Open localhost:8888/lab and start using `skfolio`
118
+
103
119
  Key Concepts
104
120
  ~~~~~~~~~~~~
105
121
  Since the development of modern portfolio theory by Markowitz (1952), mean-variance
@@ -708,7 +724,7 @@ Recognition
708
724
  ~~~~~~~~~~~
709
725
 
710
726
  We would like to thank all contributors to our direct dependencies, such as
711
- scikit-learn and cvxpy, as well as the contributors of the following resources that
727
+ `scikit-learn <https://github.com/scikit-learn/scikit-learn>`_ and `cvxpy <https://github.com/cvxpy/cvxpy>`_, as well as the contributors of the following resources that
712
728
  served as sources of inspiration:
713
729
 
714
730
  * PyPortfolioOpt
@@ -717,6 +733,7 @@ served as sources of inspiration:
717
733
  * microprediction
718
734
  * statsmodels
719
735
  * rsome
736
+ * danielppalomar.com
720
737
  * gautier.marti.ai
721
738
 
722
739
 
@@ -725,12 +742,25 @@ Citation
725
742
 
726
743
  If you use `skfolio` in a scientific publication, we would appreciate citations:
727
744
 
728
- Bibtex entry::
729
-
730
- @misc{skfolio,
731
- author = {Delatte, Hugo and Nicolini, Carlo},
732
- title = {skfolio},
733
- year = {2023},
734
- url = {https://github.com/skfolio/skfolio}
735
- }
745
+ **The library**::
746
+
747
+ @software{skfolio,
748
+ title = {skfolio},
749
+ author = {Delatte, Hugo and Nicolini, Carlo and Manzi, Matteo},
750
+ year = {2024},
751
+ doi = {TBD after next release},
752
+ url = {https://github.com/skfolio/skfolio}
753
+ }
754
+
755
+ **The paper**::
756
+
757
+ @article{nicolini2025skfolio,
758
+ title = {skfolio: Portfolio Optimization in Python},
759
+ author = {Nicolini, Carlo and Manzi, Matteo and Delatte, Hugo},
760
+ journal = {arXiv preprint arXiv:2507.04176},
761
+ year = {2025},
762
+ eprint = {2507.04176},
763
+ archivePrefix = {arXiv},
764
+ url = {https://arxiv.org/abs/2507.04176}
765
+ }
736
766
 
@@ -4,10 +4,11 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "skfolio"
7
- version = "0.10.1"
7
+ version = "0.10.2"
8
8
  maintainers = [
9
9
  { name = "Hugo Delatte", email = "delatte.hugo@gmail.com" },
10
- { name = "Matteo Manzi", email = "matteomanzi09@gmail.com" }
10
+ { name = "Matteo Manzi", email = "matteomanzi09@gmail.com" },
11
+ { name = "Carlo Nicolini", email = "c.nicolini@ipazia.com" }
11
12
  ]
12
13
  authors = [
13
14
  { name = "Hugo Delatte", email = "delatte.hugo@gmail.com" },
@@ -191,6 +191,7 @@ class EmpiricalPrior(BasePrior):
191
191
  # horizon
192
192
  mu = np.exp(mu + 0.5 * np.diag(covariance))
193
193
  covariance = np.outer(mu, mu) * (np.exp(covariance) - 1)
194
+ mu -= 1
194
195
 
195
196
  # we validate and convert to numpy after all models have been fitted to keep
196
197
  # features names information.
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skfolio
3
- Version: 0.10.1
3
+ Version: 0.10.2
4
4
  Summary: Portfolio optimization built on top of scikit-learn
5
5
  Author-email: Hugo Delatte <delatte.hugo@gmail.com>
6
- Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>
6
+ Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>, Carlo Nicolini <c.nicolini@ipazia.com>
7
7
  License: BSD 3-Clause License
8
8
 
9
9
  Copyright (c) 2007-2023 The skfolio developers.
@@ -176,7 +176,6 @@ Installation
176
176
  pip install -U skfolio
177
177
 
178
178
 
179
-
180
179
  Dependencies
181
180
  ~~~~~~~~~~~~
182
181
 
@@ -192,6 +191,23 @@ Dependencies
192
191
  - joblib (>= |JoblibMinVersion|)
193
192
  - plotly (>= |PlotlyMinVersion|)
194
193
 
194
+ Docker
195
+ ~~~~~~
196
+
197
+ You can also spin up a reproducible JupyterLab environment using Docker:
198
+
199
+ Build the image::
200
+
201
+ docker build -t skfolio-jupyterlab .
202
+
203
+ Run the container::
204
+
205
+ docker run -p 8888:8888 -v <path-to-your-folder-containing-data>:/app/data -it skfolio-jupyterlab
206
+
207
+ Browse:
208
+
209
+ Open localhost:8888/lab and start using `skfolio`
210
+
195
211
  Key Concepts
196
212
  ~~~~~~~~~~~~
197
213
  Since the development of modern portfolio theory by Markowitz (1952), mean-variance
@@ -800,7 +816,7 @@ Recognition
800
816
  ~~~~~~~~~~~
801
817
 
802
818
  We would like to thank all contributors to our direct dependencies, such as
803
- scikit-learn and cvxpy, as well as the contributors of the following resources that
819
+ `scikit-learn <https://github.com/scikit-learn/scikit-learn>`_ and `cvxpy <https://github.com/cvxpy/cvxpy>`_, as well as the contributors of the following resources that
804
820
  served as sources of inspiration:
805
821
 
806
822
  * PyPortfolioOpt
@@ -809,6 +825,7 @@ served as sources of inspiration:
809
825
  * microprediction
810
826
  * statsmodels
811
827
  * rsome
828
+ * danielppalomar.com
812
829
  * gautier.marti.ai
813
830
 
814
831
 
@@ -817,12 +834,25 @@ Citation
817
834
 
818
835
  If you use `skfolio` in a scientific publication, we would appreciate citations:
819
836
 
820
- Bibtex entry::
821
-
822
- @misc{skfolio,
823
- author = {Delatte, Hugo and Nicolini, Carlo},
824
- title = {skfolio},
825
- year = {2023},
826
- url = {https://github.com/skfolio/skfolio}
827
- }
837
+ **The library**::
838
+
839
+ @software{skfolio,
840
+ title = {skfolio},
841
+ author = {Delatte, Hugo and Nicolini, Carlo and Manzi, Matteo},
842
+ year = {2024},
843
+ doi = {TBD after next release},
844
+ url = {https://github.com/skfolio/skfolio}
845
+ }
846
+
847
+ **The paper**::
848
+
849
+ @article{nicolini2025skfolio,
850
+ title = {skfolio: Portfolio Optimization in Python},
851
+ author = {Nicolini, Carlo and Manzi, Matteo and Delatte, Hugo},
852
+ journal = {arXiv preprint arXiv:2507.04176},
853
+ year = {2025},
854
+ eprint = {2507.04176},
855
+ archivePrefix = {arXiv},
856
+ url = {https://arxiv.org/abs/2507.04176}
857
+ }
828
858
 
File without changes
File without changes
File without changes
File without changes