owlplanner 2025.5.2__tar.gz → 2025.5.3__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 (114) hide show
  1. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/PKG-INFO +1 -1
  2. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/pyproject.toml +1 -1
  3. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/plan.py +2 -1
  4. owlplanner-2025.5.3/src/owlplanner/version.py +1 -0
  5. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Documentation.py +0 -9
  6. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Optimization_Parameters.py +4 -4
  7. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/requirements.txt +1 -1
  8. owlplanner-2025.5.2/src/owlplanner/version.py +0 -1
  9. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.devcontainer/devcontainer.json +0 -0
  10. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.flake8 +0 -0
  11. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.gitattributes +0 -0
  12. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.github/workflows/github-actions-runtests.yml +0 -0
  13. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.gitignore +0 -0
  14. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/INSTALL.md +0 -0
  15. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/LICENSE +0 -0
  16. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/BF01580653.pdf +0 -0
  17. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/FE00006821-Class-VI-Injection-Permit--Salient-Features-and-Regulatory-Challenges_Final.pdf +0 -0
  18. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Kou-OptionPricingDouble-2004.pdf +0 -0
  19. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Multi-Period Mean Expected-Shortfall Strategies Cut Your Losses and Ride Your Gains .pdf +0 -0
  20. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Optimal Asset Allocation for Retirement Saving Deterministic Vs. Time Consistent Adaptive Strategies.pdf +0 -0
  21. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Rule-based_strategies_for_dynamic_life_cycle_inves.pdf +0 -0
  22. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Snyder-LinearProgrammingSpecial-1984.pdf +0 -0
  23. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/WileyModelBuildinginMathematicalProgramming5th2013.sharethefiles.com.pdf +0 -0
  24. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/bv_cvxbook.pdf +0 -0
  25. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/s10436-006-0062-y.pdf +0 -0
  26. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/README.md +0 -0
  27. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/USER_GUIDE.md +0 -0
  28. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docker/Dockerfile +0 -0
  29. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docker/README.md +0 -0
  30. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docker/docker-compose.yml +0 -0
  31. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docker/fastentrypoint.sh +0 -0
  32. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/AD-taxDef.png +0 -0
  33. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/AD-taxFree.png +0 -0
  34. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/AD-taxable.png +0 -0
  35. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/Hist_Bequest.png +0 -0
  36. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/Hist_Spending.png +0 -0
  37. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/MC-tutorial2a.png +0 -0
  38. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/MC-tutorial2b.png +0 -0
  39. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/OwlUI.png +0 -0
  40. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/allocations.png +0 -0
  41. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/owl.png +0 -0
  42. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/profile.png +0 -0
  43. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/ratesCorrelations.png +0 -0
  44. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/ratesPlot.png +0 -0
  45. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/savingsPlot.png +0 -0
  46. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/sourcesPlot.png +0 -0
  47. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/spendingPlot.png +0 -0
  48. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/taxIncomePlot.png +0 -0
  49. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/taxesPlot.png +0 -0
  50. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/newowl.tex +0 -0
  51. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/owl.pdf +0 -0
  52. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/owl.tex +0 -0
  53. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_jack+jill.toml +0 -0
  54. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_joe.toml +0 -0
  55. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_john+sally.toml +0 -0
  56. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_jon+jane.toml +0 -0
  57. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_kim+sam-bequest.toml +0 -0
  58. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_kim+sam-spending.toml +0 -0
  59. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/jack+jill.xlsx +0 -0
  60. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/joe.xlsx +0 -0
  61. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/john+sally.xlsx +0 -0
  62. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/jon+jane.xlsx +0 -0
  63. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/template.xlsx +0 -0
  64. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/git-cheats +0 -0
  65. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/john+sally.ipynb +0 -0
  66. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/kim+sam.ipynb +0 -0
  67. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/template.ipynb +0 -0
  68. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/tutorial_1.ipynb +0 -0
  69. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/tutorial_2.ipynb +0 -0
  70. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/tutorial_3.ipynb +0 -0
  71. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/owlplanner.cmd +0 -0
  72. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/owlplanner.sh +0 -0
  73. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/requirements.txt +0 -0
  74. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/__init__.py +0 -0
  75. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/abcapi.py +0 -0
  76. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/config.py +0 -0
  77. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/data/__init__.py +0 -0
  78. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/data/rates.csv +0 -0
  79. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/logging.py +0 -0
  80. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/progress.py +0 -0
  81. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/rates.py +0 -0
  82. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/tax2025.py +0 -0
  83. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/timelists.py +0 -0
  84. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/utils.py +0 -0
  85. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_logger.py +0 -0
  86. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_regressions.py +0 -0
  87. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_repro.py +0 -0
  88. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_toml_cases.py +0 -0
  89. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_units.py +0 -0
  90. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/About_Owl.py +0 -0
  91. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Asset_Allocation.py +0 -0
  92. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Create_Case.py +0 -0
  93. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Current_Assets.py +0 -0
  94. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Fixed_Income.py +0 -0
  95. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Graphs.py +0 -0
  96. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Historical_Range.py +0 -0
  97. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Logs.py +0 -0
  98. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Monte_Carlo.py +0 -0
  99. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Output_Files.py +0 -0
  100. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Quick_Start.py +0 -0
  101. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/README.md +0 -0
  102. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Rates_Selection.py +0 -0
  103. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Settings.py +0 -0
  104. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Wages_And_Contributions.py +0 -0
  105. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Worksheets.py +0 -0
  106. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/main+fonts.py +0 -0
  107. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/main.py +0 -0
  108. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/owlbridge.py +0 -0
  109. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/plots.py +0 -0
  110. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/progress.py +0 -0
  111. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/sskeys.py +0 -0
  112. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/sskeys.py.color +0 -0
  113. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/style.css +0 -0
  114. {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/tomlexamples.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: owlplanner
3
- Version: 2025.5.2
3
+ Version: 2025.5.3
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.05.02"
7
+ version = "2025.05.03"
8
8
  authors = [
9
9
  { name="Martin-D. Lacasse", email="martin.d.lacasse@gmail.com" },
10
10
  ]
@@ -377,7 +377,7 @@ class Plan(object):
377
377
  refdate = date.today()
378
378
  self.startDate = refdate.strftime("%Y-%m-%d")
379
379
  else:
380
- mydatelist = mydate.split("-")
380
+ mydatelist = mydate.replace("/", "-").split("-")
381
381
  if len(mydatelist) == 2 or len(mydatelist) == 3:
382
382
  self.startDate = mydate
383
383
  # Ignore the year provided.
@@ -1765,6 +1765,7 @@ class Plan(object):
1765
1765
  self.mylog.vprint("WARNING: Exiting loop on maximum iterations.")
1766
1766
  break
1767
1767
 
1768
+ it += 1
1768
1769
  old_solutions.append(-solution)
1769
1770
  old_x = xx
1770
1771
 
@@ -0,0 +1 @@
1
+ __version__ = "2025.05.03"
@@ -277,15 +277,6 @@ the `Roth conv` column on the
277
277
  A year from which Roth conversions can begin to be considered can also be selected: no Roth
278
278
  conversions will be allowed before the year specified.
279
279
 
280
- In order to mitigate cases where Roth conversions can only provide marginal gains,
281
- an opportunity cost can be set for Roth conversions. This value is
282
- a percentage amount removed from the Roth conversion to compensate for the
283
- opportunity loss resulting from the payment of estimated income tax.
284
- This is a heuristical approach
285
- creating a virtual penalty on conversions resulting in a smaller amount
286
- being deposited in the tax-exempt account.
287
- Opportunity cost is configurable from 0 to 5%. Leave to 0% if unsure.
288
-
289
280
  Calculations of Medicare and IRMAA can be turned on or off. This will typically speed up
290
281
  the calculations by a factor of 2 to 3, which can be useful when running Monte Carlo simulations.
291
282
  If the age of individuals makes them eligible for Medicare within the next three years,
@@ -52,10 +52,10 @@ else:
52
52
  kz.initKey("maxRothConversion", 50)
53
53
  ret = kz.getNum("Maximum annual Roth conversion (\\$k)", "maxRothConversion", disabled=fromFile, help=helpmsg)
54
54
  ret = kz.getToggle("Convert as in wages and contributions tables", "readRothX")
55
- kz.initKey("oppCostX", 0.)
56
- helpmsg = "Estimated opportunity cost for paying estimated tax on Roth conversions."
57
- ret = kz.getNum("Opportunity cost for conversion (%)", "oppCostX", step=0.01, format="%.2f",
58
- min_value=0., max_value=5., help=helpmsg)
55
+ # kz.initKey("oppCostX", 0.)
56
+ # helpmsg = "Estimated opportunity cost for paying estimated tax on Roth conversions."
57
+ # ret = kz.getNum("Opportunity cost for conversion (%)", "oppCostX", step=0.01, format="%.2f",
58
+ # min_value=0., max_value=5., help=helpmsg)
59
59
 
60
60
  with col2:
61
61
  helpmsg = "Do not perform Roth conversions before that year."
@@ -8,4 +8,4 @@ pulp
8
8
  scipy
9
9
  streamlit
10
10
  toml
11
- owlplanner >= 2025.05.02
11
+ owlplanner >= 2025.05.03
@@ -1 +0,0 @@
1
- __version__ = "2025.05.02"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes