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.
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/PKG-INFO +1 -1
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/pyproject.toml +1 -1
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/plan.py +2 -1
- owlplanner-2025.5.3/src/owlplanner/version.py +1 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Documentation.py +0 -9
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Optimization_Parameters.py +4 -4
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/requirements.txt +1 -1
- owlplanner-2025.5.2/src/owlplanner/version.py +0 -1
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.devcontainer/devcontainer.json +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.flake8 +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.gitattributes +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.github/workflows/github-actions-runtests.yml +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/.gitignore +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/INSTALL.md +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/LICENSE +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/BF01580653.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/FE00006821-Class-VI-Injection-Permit--Salient-Features-and-Regulatory-Challenges_Final.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Kou-OptionPricingDouble-2004.pdf +0 -0
- {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
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Optimal Asset Allocation for Retirement Saving Deterministic Vs. Time Consistent Adaptive Strategies.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Rule-based_strategies_for_dynamic_life_cycle_inves.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/Snyder-LinearProgrammingSpecial-1984.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/WileyModelBuildinginMathematicalProgramming5th2013.sharethefiles.com.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/bv_cvxbook.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/Papers/s10436-006-0062-y.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/README.md +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/USER_GUIDE.md +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docker/Dockerfile +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docker/README.md +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docker/docker-compose.yml +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docker/fastentrypoint.sh +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/AD-taxDef.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/AD-taxFree.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/AD-taxable.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/Hist_Bequest.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/Hist_Spending.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/MC-tutorial2a.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/MC-tutorial2b.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/OwlUI.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/allocations.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/owl.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/profile.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/ratesCorrelations.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/ratesPlot.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/savingsPlot.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/sourcesPlot.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/spendingPlot.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/taxIncomePlot.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/images/taxesPlot.png +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/newowl.tex +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/owl.pdf +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/docs/owl.tex +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_jack+jill.toml +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_joe.toml +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_john+sally.toml +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_jon+jane.toml +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_kim+sam-bequest.toml +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/case_kim+sam-spending.toml +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/jack+jill.xlsx +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/joe.xlsx +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/john+sally.xlsx +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/jon+jane.xlsx +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/examples/template.xlsx +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/git-cheats +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/john+sally.ipynb +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/kim+sam.ipynb +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/template.ipynb +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/tutorial_1.ipynb +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/tutorial_2.ipynb +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/notebooks/tutorial_3.ipynb +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/owlplanner.cmd +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/owlplanner.sh +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/requirements.txt +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/__init__.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/abcapi.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/config.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/data/__init__.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/data/rates.csv +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/logging.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/progress.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/rates.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/tax2025.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/timelists.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/src/owlplanner/utils.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_logger.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_regressions.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_repro.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_toml_cases.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/tests/test_units.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/About_Owl.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Asset_Allocation.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Create_Case.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Current_Assets.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Fixed_Income.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Graphs.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Historical_Range.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Logs.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Monte_Carlo.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Output_Files.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Quick_Start.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/README.md +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Rates_Selection.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Settings.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Wages_And_Contributions.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/Worksheets.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/main+fonts.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/main.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/owlbridge.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/plots.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/progress.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/sskeys.py +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/sskeys.py.color +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/style.css +0 -0
- {owlplanner-2025.5.2 → owlplanner-2025.5.3}/ui/tomlexamples.py +0 -0
|
@@ -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
|
-
|
|
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."
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|