owlplanner 2025.4.22__tar.gz → 2025.4.26__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 (118) hide show
  1. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/PKG-INFO +1 -1
  2. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/pyproject.toml +1 -1
  3. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/plan.py +6 -14
  4. owlplanner-2025.4.26/src/owlplanner/version.py +1 -0
  5. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Documentation.py +4 -2
  6. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/requirements.txt +1 -1
  7. owlplanner-2025.4.22/src/owlplanner/.plan.py.swo +0 -0
  8. owlplanner-2025.4.22/src/owlplanner/version.py +0 -1
  9. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/.devcontainer/devcontainer.json +0 -0
  10. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/.flake8 +0 -0
  11. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/.gitattributes +0 -0
  12. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/.github/workflows/github-actions-runtests.yml +0 -0
  13. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/.gitignore +0 -0
  14. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/INSTALL.md +0 -0
  15. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/LICENSE +0 -0
  16. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/BF01580653.pdf +0 -0
  17. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/FE00006821-Class-VI-Injection-Permit--Salient-Features-and-Regulatory-Challenges_Final.pdf +0 -0
  18. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/Kou-OptionPricingDouble-2004.pdf +0 -0
  19. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/Multi-Period Mean Expected-Shortfall Strategies Cut Your Losses and Ride Your Gains .pdf +0 -0
  20. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/Optimal Asset Allocation for Retirement Saving Deterministic Vs. Time Consistent Adaptive Strategies.pdf +0 -0
  21. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/Rule-based_strategies_for_dynamic_life_cycle_inves.pdf +0 -0
  22. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/Snyder-LinearProgrammingSpecial-1984.pdf +0 -0
  23. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/WileyModelBuildinginMathematicalProgramming5th2013.sharethefiles.com.pdf +0 -0
  24. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/bv_cvxbook.pdf +0 -0
  25. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/Papers/s10436-006-0062-y.pdf +0 -0
  26. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/README.md +0 -0
  27. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/USER_GUIDE.md +0 -0
  28. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docker/Dockerfile +0 -0
  29. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docker/README.md +0 -0
  30. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docker/docker-compose.yml +0 -0
  31. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docker/fastentrypoint.sh +0 -0
  32. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/AD-taxDef.png +0 -0
  33. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/AD-taxFree.png +0 -0
  34. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/AD-taxable.png +0 -0
  35. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/Hist_Bequest.png +0 -0
  36. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/Hist_Spending.png +0 -0
  37. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/MC-tutorial2a.png +0 -0
  38. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/MC-tutorial2b.png +0 -0
  39. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/OwlUI.png +0 -0
  40. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/allocations.png +0 -0
  41. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/owl.png +0 -0
  42. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/profile.png +0 -0
  43. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/ratesCorrelations.png +0 -0
  44. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/ratesPlot.png +0 -0
  45. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/savingsPlot.png +0 -0
  46. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/sourcesPlot.png +0 -0
  47. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/spendingPlot.png +0 -0
  48. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/taxIncomePlot.png +0 -0
  49. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/images/taxesPlot.png +0 -0
  50. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/newowl.tex +0 -0
  51. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/owl.pdf +0 -0
  52. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/docs/owl.tex +0 -0
  53. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/case_jack+jill.toml +0 -0
  54. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/case_joe.toml +0 -0
  55. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/case_john+sally.toml +0 -0
  56. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/case_jon+jane.toml +0 -0
  57. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/case_kim+sam-bequest.toml +0 -0
  58. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/case_kim+sam-spending.toml +0 -0
  59. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/jack+jill.xlsx +0 -0
  60. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/joe.xlsx +0 -0
  61. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/john+sally.xlsx +0 -0
  62. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/jon+jane.xlsx +0 -0
  63. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/examples/template.xlsx +0 -0
  64. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/notebooks/john+sally.ipynb +0 -0
  65. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/notebooks/kim+sam.ipynb +0 -0
  66. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/notebooks/template.ipynb +0 -0
  67. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/notebooks/tutorial_1.ipynb +0 -0
  68. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/notebooks/tutorial_2.ipynb +0 -0
  69. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/notebooks/tutorial_3.ipynb +0 -0
  70. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/owlplanner.cmd +0 -0
  71. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/owlplanner.sh +0 -0
  72. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/reponse.txt +0 -0
  73. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/requirements.txt +0 -0
  74. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/__init__.py +0 -0
  75. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/abcapi.py +0 -0
  76. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/config.py +0 -0
  77. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/data/__init__.py +0 -0
  78. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/data/rates.csv +0 -0
  79. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/logging.py +0 -0
  80. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/progress.py +0 -0
  81. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/rates.py +0 -0
  82. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/tax2025.py +0 -0
  83. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/timelists.py +0 -0
  84. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/src/owlplanner/utils.py +0 -0
  85. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/tests/test_logger.py +0 -0
  86. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/tests/test_regressions.py +0 -0
  87. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/tests/test_repro.py +0 -0
  88. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/tests/test_toml_cases.py +0 -0
  89. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/tests/test_units.py +0 -0
  90. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ttt.py +0 -0
  91. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ttt2.py +0 -0
  92. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ttt3.py +0 -0
  93. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/About_Owl.py +0 -0
  94. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Asset_Allocation.py +0 -0
  95. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Create_Case.py +0 -0
  96. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Current_Assets.py +0 -0
  97. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Fixed_Income.py +0 -0
  98. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Graphs.py +0 -0
  99. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Historical_Range.py +0 -0
  100. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Logs.py +0 -0
  101. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Monte_Carlo.py +0 -0
  102. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Optimization_Parameters.py +0 -0
  103. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Output_Files.py +0 -0
  104. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Quick_Start.py +0 -0
  105. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/README.md +0 -0
  106. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Rates_Selection.py +0 -0
  107. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Settings.py +0 -0
  108. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Wages_And_Contributions.py +0 -0
  109. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/Worksheets.py +0 -0
  110. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/main+fonts.py +0 -0
  111. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/main.py +0 -0
  112. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/owlbridge.py +0 -0
  113. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/plots.py +0 -0
  114. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/progress.py +0 -0
  115. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/sskeys.py +0 -0
  116. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/sskeys.py.color +0 -0
  117. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/style.css +0 -0
  118. {owlplanner-2025.4.22 → owlplanner-2025.4.26}/ui/tomlexamples.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: owlplanner
3
- Version: 2025.4.22
3
+ Version: 2025.4.26
4
4
  Summary: Owl: 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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "owlplanner"
7
- version = "2025.04.22"
7
+ version = "2025.04.26"
8
8
  authors = [
9
9
  { name="Martin-D. Lacasse", email="martin.d.lacasse@gmail.com" },
10
10
  ]
@@ -1087,15 +1087,10 @@ class Plan(object):
1087
1087
  Tau1_ijn = 1 + tau_ijn
1088
1088
  Tauh_ijn = 1 + tau_ijn / 2
1089
1089
 
1090
- if "units" in options:
1091
- units = u.getUnits(options["units"])
1092
- else:
1093
- units = 1000
1094
-
1095
- bigM = 5e6
1096
- if "bigM" in options:
1097
- # No units for bigM.
1098
- bigM = options["bigM"]
1090
+ units = u.getUnits(options.get("units", "k"))
1091
+ # No units for bigM.
1092
+ bigM = options.get("bigM", 5e6)
1093
+ assert isinstance(bigM, (int, float)), f"bigM {bigM} is not a number."
1099
1094
 
1100
1095
  ###################################################################
1101
1096
  # Inequality constraint matrix with upper and lower bound vectors.
@@ -1674,10 +1669,7 @@ class Plan(object):
1674
1669
  if len(magi) != 3:
1675
1670
  raise ValueError("previousMAGIs must have 3 values.")
1676
1671
 
1677
- if "units" in options:
1678
- units = u.getUnits(options["units"])
1679
- else:
1680
- units = 1000
1672
+ units = u.getUnits(options.get("units", "k"))
1681
1673
  self.prevMAGI = units * np.array(magi)
1682
1674
 
1683
1675
  self.lambdha = 0
@@ -1722,7 +1714,7 @@ class Plan(object):
1722
1714
  objFac = -1 / self.gamma_n[-1]
1723
1715
 
1724
1716
  # mip_rel_gap smaller than 1e-6 can lead to oscillatory solutions.
1725
- milpOptions = {"disp": False, "mip_rel_gap": 1e-6}
1717
+ milpOptions = {"disp": False, "mip_rel_gap": 1e-7}
1726
1718
 
1727
1719
  it = 0
1728
1720
  absdiff = np.inf
@@ -0,0 +1 @@
1
+ __version__ = "2025.04.26"
@@ -279,9 +279,11 @@ conversions will be allowed before the year specified.
279
279
 
280
280
  Calculations of Medicare and IRMAA can be turned on or off. This will typically speed up
281
281
  the calculations by a factor of 2 to 3, which can be useful when running Monte Carlo simulations.
282
- If the age of individuals makes them eligible for Medicare within the next two years,
283
- additional cells will appear for entering the Modified Adjusted Gross Income (MAGI) for past years.
282
+ If the age of individuals makes them eligible for Medicare within the next three years,
283
+ additional cells will appear for entering the Modified Adjusted Gross Income (MAGI) for the current
284
+ and past 2 years, when applicable. Values default to zero.
284
285
  These numbers are needed to calculate the Income-Related Monthly Adjusted Amounts (IRMAA).
286
+ MAGI for current year is required as it allows plan to start in mid-year for the first year.
285
287
 
286
288
  The time profile modulating the net spending amount
287
289
  can be selected to either be *flat* or follow a *smile* shape.
@@ -7,4 +7,4 @@ odfpy
7
7
  scipy
8
8
  streamlit
9
9
  toml
10
- owlplanner >= 2025.04.22
10
+ owlplanner >= 2025.04.26
@@ -1 +0,0 @@
1
- __version__ = "2025.04.22"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes