owlplanner 2025.4.6__tar.gz → 2025.4.7__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 (113) hide show
  1. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/PKG-INFO +1 -1
  2. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/pyproject.toml +1 -1
  3. owlplanner-2025.4.7/src/owlplanner/version.py +1 -0
  4. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Documentation.py +3 -0
  5. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Historical_Range.py +1 -1
  6. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Wages_And_Contributions.py +9 -3
  7. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/owlbridge.py +1 -1
  8. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/requirements.txt +1 -1
  9. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/sskeys.py +4 -1
  10. owlplanner-2025.4.6/src/owlplanner/version.py +0 -1
  11. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/.devcontainer/devcontainer.json +0 -0
  12. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/.flake8 +0 -0
  13. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/.gitattributes +0 -0
  14. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/.github/workflows/github-actions-runtests.yml +0 -0
  15. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/.gitignore +0 -0
  16. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/INSTALL.md +0 -0
  17. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/LICENSE +0 -0
  18. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/Papers/FE00006821-Class-VI-Injection-Permit--Salient-Features-and-Regulatory-Challenges_Final.pdf +0 -0
  19. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/Papers/Kou-OptionPricingDouble-2004.pdf +0 -0
  20. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/Papers/Multi-Period Mean Expected-Shortfall Strategies Cut Your Losses and Ride Your Gains .pdf +0 -0
  21. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/Papers/Optimal Asset Allocation for Retirement Saving Deterministic Vs. Time Consistent Adaptive Strategies.pdf +0 -0
  22. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/Papers/Rule-based_strategies_for_dynamic_life_cycle_inves.pdf +0 -0
  23. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/Papers/bv_cvxbook.pdf +0 -0
  24. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/Papers/s10436-006-0062-y.pdf +0 -0
  25. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/README.md +0 -0
  26. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/USER_GUIDE.md +0 -0
  27. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docker/Dockerfile +0 -0
  28. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docker/README.md +0 -0
  29. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docker/docker-compose.yml +0 -0
  30. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docker/fastentrypoint.sh +0 -0
  31. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/AD-taxDef.png +0 -0
  32. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/AD-taxFree.png +0 -0
  33. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/AD-taxable.png +0 -0
  34. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/Hist_Bequest.png +0 -0
  35. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/Hist_Spending.png +0 -0
  36. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/MC-tutorial2a.png +0 -0
  37. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/MC-tutorial2b.png +0 -0
  38. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/OwlUI.png +0 -0
  39. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/allocations.png +0 -0
  40. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/owl.png +0 -0
  41. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/profile.png +0 -0
  42. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/ratesCorrelations.png +0 -0
  43. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/ratesPlot.png +0 -0
  44. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/savingsPlot.png +0 -0
  45. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/sourcesPlot.png +0 -0
  46. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/spendingPlot.png +0 -0
  47. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/taxIncomePlot.png +0 -0
  48. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/images/taxesPlot.png +0 -0
  49. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/owl.pdf +0 -0
  50. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/docs/owl.tex +0 -0
  51. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/case_jack+jill.toml +0 -0
  52. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/case_joe.toml +0 -0
  53. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/case_john+sally.toml +0 -0
  54. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/case_jon+jane.toml +0 -0
  55. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/case_kim+sam-bequest.toml +0 -0
  56. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/case_kim+sam-spending.toml +0 -0
  57. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/jack+jill.xlsx +0 -0
  58. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/joe.xlsx +0 -0
  59. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/john+sally.xlsx +0 -0
  60. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/jon+jane.xlsx +0 -0
  61. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/examples/template.xlsx +0 -0
  62. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/notebooks/john+sally.ipynb +0 -0
  63. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/notebooks/kim+sam.ipynb +0 -0
  64. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/notebooks/template.ipynb +0 -0
  65. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/notebooks/tutorial_1.ipynb +0 -0
  66. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/notebooks/tutorial_2.ipynb +0 -0
  67. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/notebooks/tutorial_3.ipynb +0 -0
  68. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/owlplanner.cmd +0 -0
  69. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/owlplanner.sh +0 -0
  70. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/reponse.txt +0 -0
  71. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/requirements.txt +0 -0
  72. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/__init__.py +0 -0
  73. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/abcapi.py +0 -0
  74. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/config.py +0 -0
  75. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/data/__init__.py +0 -0
  76. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/data/rates.csv +0 -0
  77. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/logging.py +0 -0
  78. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/plan.py +0 -0
  79. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/progress.py +0 -0
  80. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/rates.py +0 -0
  81. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/tax2025.py +0 -0
  82. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/timelists.py +0 -0
  83. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/src/owlplanner/utils.py +0 -0
  84. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/tests/test_logger.py +0 -0
  85. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/tests/test_regressions.py +0 -0
  86. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/tests/test_repro.py +0 -0
  87. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/tests/test_toml_cases.py +0 -0
  88. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/tests/test_units.py +0 -0
  89. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ttt.py +0 -0
  90. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ttt2.py +0 -0
  91. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ttt3.py +0 -0
  92. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/About_Owl.py +0 -0
  93. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Asset_Allocation.py +0 -0
  94. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Create_Case.py +0 -0
  95. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Current_Assets.py +0 -0
  96. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Fixed_Income.py +0 -0
  97. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Graphs.py +0 -0
  98. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Logs.py +0 -0
  99. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Monte_Carlo.py +0 -0
  100. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Optimization_Parameters.py +0 -0
  101. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Output_Files.py +0 -0
  102. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Quick_Start.py +0 -0
  103. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/README.md +0 -0
  104. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Rates_Selection.py +0 -0
  105. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Settings.py +0 -0
  106. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/Worksheets.py +0 -0
  107. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/main+fonts.py +0 -0
  108. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/main.py +0 -0
  109. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/plots.py +0 -0
  110. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/progress.py +0 -0
  111. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/sskeys.py.color +0 -0
  112. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/style.css +0 -0
  113. {owlplanner-2025.4.6 → owlplanner-2025.4.7}/ui/tomlexamples.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: owlplanner
3
- Version: 2025.4.6
3
+ Version: 2025.4.7
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.06"
7
+ version = "2025.04.07"
8
8
  authors = [
9
9
  { name="Martin-D. Lacasse", email="martin.d.lacasse@gmail.com" },
10
10
  ]
@@ -0,0 +1 @@
1
+ __version__ = "2025.04.07"
@@ -406,6 +406,9 @@ when considering Monte Carlo simulations, consider:
406
406
  #### Logs
407
407
  Messages coming from the underlying Owl calculation engine are displayed on this page.
408
408
 
409
+ #### Quick Start
410
+ Landing page of the application. This page describes how to quickly get started by using an example case file.
411
+
409
412
  #### Documentation
410
413
  These very pages.
411
414
 
@@ -11,7 +11,7 @@ if ret is None or kz.caseHasNoPlan():
11
11
  else:
12
12
  kz.initKey("hyfrm", owb.FROM)
13
13
  kz.initKey("hyto", owb.TO)
14
- kz.initKey("histoplot", None)
14
+ kz.initKey("histoPlot", None)
15
15
  kz.initKey("histoSummary", None)
16
16
 
17
17
  st.write(
@@ -47,10 +47,16 @@ else:
47
47
  st.divider()
48
48
  for i in range(n):
49
49
  st.write("##### " + kz.getKey("iname" + str(i)) + "'s timetable")
50
- colfor = {"year": st.column_config.NumberColumn(None, format="%d")}
50
+ df = kz.getKey("timeList" + str(i))
51
+ formatdic = {"year": st.column_config.NumberColumn(None, format="%d", disabled=True)}
52
+ cols = list(df.columns)
53
+ for col in cols[1:-1]:
54
+ formatdic[col] = st.column_config.NumberColumn(None, min_value=0.0, format="accounting")
55
+ formatdic[cols[-1]] = st.column_config.NumberColumn(None, format="accounting")
56
+
51
57
  newdf = st.data_editor(
52
- kz.getKey("timeList" + str(i)),
53
- column_config=colfor,
58
+ df,
59
+ column_config=formatdic,
54
60
  hide_index=True,
55
61
  key=kz.currentCaseName() + "_wages" + str(i),
56
62
  )
@@ -492,7 +492,7 @@ def showWorkbook(plan):
492
492
  colfor[col] = st.column_config.NumberColumn(None, format="%d", width="small")
493
493
  else:
494
494
  # colfor[col] = st.column_config.NumberColumn(None, format="$ %,.0f")
495
- colfor[col] = st.column_config.NumberColumn(None, step=1)
495
+ colfor[col] = st.column_config.NumberColumn(None, format="accounting", step=1)
496
496
  else:
497
497
  colfor = {}
498
498
  for col in df.columns:
@@ -8,4 +8,4 @@ scipy
8
8
  streamlit
9
9
  toml
10
10
  # --extra-index-url https://test.pypi.org/simple
11
- owlplanner >= 2025.04.06
11
+ owlplanner >= 2025.04.07
@@ -177,8 +177,11 @@ def duplicateCase():
177
177
  ss.cases[ss.currentCase]["plan"] = None
178
178
  ss.cases[dupname] = copy.deepcopy(ss.cases[ss.currentCase])
179
179
  ss.cases[ss.currentCase]["plan"] = currentPlan
180
+
180
181
  ss.cases[dupname]["name"] = dupname
181
- ss.cases[dupname]["summaryDf"] = None
182
+ for key in ["summaryDf", "histoPlot", "histoSummary", "monteCarloPlot", "monteCarloSummary"]:
183
+ ss.cases[dupname][key] = None
184
+
182
185
  ss.cases[dupname]["duplicate"] = True
183
186
  refreshCase(ss.cases[dupname])
184
187
  ss.currentCase = dupname
@@ -1 +0,0 @@
1
- __version__ = "2025.04.06"
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