owlplanner 2025.11.3__py3-none-any.whl → 2025.11.9__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.
- owlplanner/plan.py +2 -2
- owlplanner/version.py +1 -1
- {owlplanner-2025.11.3.dist-info → owlplanner-2025.11.9.dist-info}/METADATA +14 -9
- {owlplanner-2025.11.3.dist-info → owlplanner-2025.11.9.dist-info}/RECORD +6 -6
- {owlplanner-2025.11.3.dist-info → owlplanner-2025.11.9.dist-info}/WHEEL +0 -0
- {owlplanner-2025.11.3.dist-info → owlplanner-2025.11.9.dist-info}/licenses/LICENSE +0 -0
owlplanner/plan.py
CHANGED
|
@@ -1669,7 +1669,7 @@ class Plan(object):
|
|
|
1669
1669
|
self.prevMAGI = np.zeros(2)
|
|
1670
1670
|
if "previousMAGIs" in myoptions:
|
|
1671
1671
|
magi = myoptions["previousMAGIs"]
|
|
1672
|
-
if
|
|
1672
|
+
if len(magi) != 2:
|
|
1673
1673
|
raise ValueError("previousMAGIs must have 2 values.")
|
|
1674
1674
|
|
|
1675
1675
|
self.prevMAGI = self.optionsUnits * np.array(magi)
|
|
@@ -1786,7 +1786,7 @@ class Plan(object):
|
|
|
1786
1786
|
"disp": False,
|
|
1787
1787
|
"mip_rel_gap": 1e-7,
|
|
1788
1788
|
"presolve": True,
|
|
1789
|
-
|
|
1789
|
+
"node_limit": 1000000 # Limit search nodes for faster solutions
|
|
1790
1790
|
}
|
|
1791
1791
|
|
|
1792
1792
|
self._buildConstraints(objective, options)
|
owlplanner/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "2025.11.
|
|
1
|
+
__version__ = "2025.11.09"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: owlplanner
|
|
3
|
-
Version: 2025.11.
|
|
4
|
-
Summary: Owl: Retirement planner with great wisdom
|
|
3
|
+
Version: 2025.11.9
|
|
4
|
+
Summary: Owl - Optimal Wealth Lab: Retirement planner with great wisdom
|
|
5
5
|
Project-URL: HomePage, https://github.com/mdlacasse/owl
|
|
6
6
|
Project-URL: Repository, https://github.com/mdlacasse/owl
|
|
7
7
|
Project-URL: Issues, https://github.com/mdlacasse/owl/issues
|
|
@@ -684,19 +684,20 @@ License: GNU GENERAL PUBLIC LICENSE
|
|
|
684
684
|
Public License instead of this License. But first, please read
|
|
685
685
|
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
|
686
686
|
License-File: LICENSE
|
|
687
|
-
Classifier: Development Status ::
|
|
687
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
688
688
|
Classifier: Intended Audience :: End Users/Desktop
|
|
689
689
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
690
690
|
Classifier: Operating System :: OS Independent
|
|
691
691
|
Classifier: Programming Language :: Python :: 3
|
|
692
692
|
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
693
|
-
Requires-Python: >=3.
|
|
693
|
+
Requires-Python: >=3.10
|
|
694
|
+
Requires-Dist: highspy
|
|
694
695
|
Requires-Dist: matplotlib
|
|
695
696
|
Requires-Dist: numpy
|
|
696
697
|
Requires-Dist: odfpy
|
|
697
698
|
Requires-Dist: openpyxl
|
|
698
699
|
Requires-Dist: pandas
|
|
699
|
-
Requires-Dist: plotly
|
|
700
|
+
Requires-Dist: plotly>=6.3
|
|
700
701
|
Requires-Dist: pulp
|
|
701
702
|
Requires-Dist: scipy
|
|
702
703
|
Requires-Dist: seaborn
|
|
@@ -705,7 +706,7 @@ Requires-Dist: toml
|
|
|
705
706
|
Description-Content-Type: text/markdown
|
|
706
707
|
|
|
707
708
|
|
|
708
|
-
# Owl
|
|
709
|
+
# Owl - Optimal Wealth Lab
|
|
709
710
|
|
|
710
711
|
## A retirement exploration tool based on linear programming
|
|
711
712
|
|
|
@@ -750,13 +751,17 @@ your strategy under different market assumptions, helping to better understand y
|
|
|
750
751
|
|
|
751
752
|
-------------------------------------------------------------------------------------
|
|
752
753
|
## Purpose and vision
|
|
753
|
-
|
|
754
|
+
One goal of Owl is to provide a free and open-source ecosystem that has cutting-edge optimization capabilities,
|
|
754
755
|
allowing for the next generation of Python-literate retirees to experiment with their own financial future
|
|
755
|
-
while providing a codebase where they can learn and contribute.
|
|
756
|
+
while providing a codebase where they can learn and contribute. At the same time, an intuitive and easy-to-use
|
|
757
|
+
user interface based on Streamlit allows a broad set of users to benefit from the application as it only requires basic financial knowledge.
|
|
758
|
+
|
|
759
|
+
There are and were
|
|
756
760
|
good retirement optimizers in the recent past, but the vast majority of them are either proprietary platforms
|
|
757
761
|
collecting your data, or academic papers that share the results without really sharing the details of
|
|
758
762
|
the underlying mathematical models.
|
|
759
|
-
The algorithms in Owl rely on the open-source HiGHS linear programming solver
|
|
763
|
+
The algorithms in Owl rely on the open-source HiGHS linear programming solver and but they have also been ported to
|
|
764
|
+
other platforms such as Mosek and COIN-OR. The complete formulation and
|
|
760
765
|
detailed description of the underlying
|
|
761
766
|
mathematical model can be found [here](https://github.com/mdlacasse/Owl/blob/main/docs/owl.pdf).
|
|
762
767
|
|
|
@@ -2,14 +2,14 @@ owlplanner/__init__.py,sha256=hJ2i4m2JpHPAKyQLjYOXpJzeEsgcTcKD-Vhm0AIjjWg,592
|
|
|
2
2
|
owlplanner/abcapi.py,sha256=rtg7d0UbftinokR9VlB49VUjDjzUq3ONnJbhMXVIrgo,6879
|
|
3
3
|
owlplanner/config.py,sha256=UF2Dy6E9PiX6Ua8B1R0aYCNUoIYmY46up8awf_36B_Q,12615
|
|
4
4
|
owlplanner/mylogging.py,sha256=OVGeDFO7LIZG91R6HMpZBzjno-B8PH8Fo00Jw2Pdgqw,2558
|
|
5
|
-
owlplanner/plan.py,sha256=
|
|
5
|
+
owlplanner/plan.py,sha256=tqybE4JX4tT_znZnCoAqQXQvcUgLmi5FNsCLghHnNus,115177
|
|
6
6
|
owlplanner/progress.py,sha256=dUUlFmSAKUei36rUj2BINRY10f_YEUo_e23d0es6nrc,530
|
|
7
7
|
owlplanner/rates.py,sha256=9Nmo8AKsyi5PoCUrzhr06phkSlNTv-TXzj5iYFU76AY,14113
|
|
8
8
|
owlplanner/tax2025.py,sha256=4KYaT6TO6WU7wDjgdRW48lqfwvVCtaXs9tcw1nleKhg,10834
|
|
9
9
|
owlplanner/tax2026.py,sha256=hgCiCJWVzJITk0cA8W-zxl-a0kObijPZ1yXc0F6MAwk,10848
|
|
10
10
|
owlplanner/timelists.py,sha256=UdzH6A_-w4REn4A1po7yndSiy1R8_R-i_C-94re4JYY,4093
|
|
11
11
|
owlplanner/utils.py,sha256=afAjeO6Msf6Rn4jwz_7Ody9rHGWlBR7iQFqe1xzLNQc,2513
|
|
12
|
-
owlplanner/version.py,sha256=
|
|
12
|
+
owlplanner/version.py,sha256=JtEr8miZ9cqjineEUY23Nf4mp48btI1zykUbQYetUWk,28
|
|
13
13
|
owlplanner/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
14
|
owlplanner/data/rates.csv,sha256=6fxg56BVVORrj9wJlUGFdGXKvOX5r7CSca8uhUbbuIU,3734
|
|
15
15
|
owlplanner/plotting/__init__.py,sha256=uhxqtUi0OI-QWNOO2LkXgQViW_9yM3rYb-204Wit974,250
|
|
@@ -17,7 +17,7 @@ owlplanner/plotting/base.py,sha256=UimGKpMTV-dVm3BX5Apr_Ltorc7dlDLCRPRQ3RF_v7c,2
|
|
|
17
17
|
owlplanner/plotting/factory.py,sha256=EDopIAPQr9zHRgemObko18FlCeRNhNCoLNNFAOq-X6s,1030
|
|
18
18
|
owlplanner/plotting/matplotlib_backend.py,sha256=AOEkapD94U5hGNoS0EdbRoe8mgdMHH4oOvkXADZS914,17957
|
|
19
19
|
owlplanner/plotting/plotly_backend.py,sha256=AO33GxBHGYG5osir_H1iRRtGxdhs4AjfLV2d_xm35nY,33138
|
|
20
|
-
owlplanner-2025.11.
|
|
21
|
-
owlplanner-2025.11.
|
|
22
|
-
owlplanner-2025.11.
|
|
23
|
-
owlplanner-2025.11.
|
|
20
|
+
owlplanner-2025.11.9.dist-info/METADATA,sha256=d7A8kkgm07tVhzplea9qbH5mFdZu6ZEok_Uhr3RsVq8,54973
|
|
21
|
+
owlplanner-2025.11.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
22
|
+
owlplanner-2025.11.9.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
|
23
|
+
owlplanner-2025.11.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|