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 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 3 < len(magi) < 2:
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
- # "node_limit": 10000 # Limit search nodes for faster solutions
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.03"
1
+ __version__ = "2025.11.09"
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: owlplanner
3
- Version: 2025.11.3
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 :: 4 - Beta
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.8
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
- The goal of Owl is to create a free and open-source ecosystem that has cutting-edge optimization capabilities,
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. There are and were
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. The complete formulation and
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=NDdV0Eri76JMpiNPeuMzLYGX-lDDBEbjXd6Qg6k_CIw,115180
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=_mqfLl8Q3r9dL1kTE7ocSg7cM1IxJls7-sN3Xctb7ks,28
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.3.dist-info/METADATA,sha256=jxpJUqBeOPxYK9_LxY7z94aeAuQQw_1M1geIlN74Ox0,54622
21
- owlplanner-2025.11.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
22
- owlplanner-2025.11.3.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
23
- owlplanner-2025.11.3.dist-info/RECORD,,
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,,