owlplanner 2025.3.11__tar.gz → 2025.3.12__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 (107) hide show
  1. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/PKG-INFO +1 -1
  2. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/pyproject.toml +1 -1
  3. owlplanner-2025.3.12/src/owlplanner/version.py +1 -0
  4. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/About_Owl.py +1 -1
  5. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Output_Files.py +2 -1
  6. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/requirements.txt +1 -1
  7. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/sskeys.py +6 -0
  8. owlplanner-2025.3.11/src/owlplanner/version.py +0 -1
  9. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/.devcontainer/devcontainer.json +0 -0
  10. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/.flake8 +0 -0
  11. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/.gitattributes +0 -0
  12. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/.github/workflows/github-actions-runtests.yml +0 -0
  13. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/.gitignore +0 -0
  14. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/INSTALL.md +0 -0
  15. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/LICENSE +0 -0
  16. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/Papers/Kou-OptionPricingDouble-2004.pdf +0 -0
  17. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/Papers/Multi-Period Mean Expected-Shortfall Strategies Cut Your Losses and Ride Your Gains .pdf +0 -0
  18. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/Papers/Optimal Asset Allocation for Retirement Saving Deterministic Vs. Time Consistent Adaptive Strategies.pdf +0 -0
  19. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/Papers/Rule-based_strategies_for_dynamic_life_cycle_inves.pdf +0 -0
  20. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/Papers/s10436-006-0062-y.pdf +0 -0
  21. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/README.md +0 -0
  22. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/USER_GUIDE.md +0 -0
  23. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docker/Dockerfile +0 -0
  24. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docker/README.md +0 -0
  25. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docker/docker-compose.yml +0 -0
  26. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docker/fastentrypoint.sh +0 -0
  27. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/AD-taxDef.png +0 -0
  28. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/AD-taxFree.png +0 -0
  29. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/AD-taxable.png +0 -0
  30. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/Hist_Bequest.png +0 -0
  31. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/Hist_Spending.png +0 -0
  32. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/MC-tutorial2a.png +0 -0
  33. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/MC-tutorial2b.png +0 -0
  34. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/OwlUI.png +0 -0
  35. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/allocations.png +0 -0
  36. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/owl.png +0 -0
  37. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/profile.png +0 -0
  38. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/ratesCorrelations.png +0 -0
  39. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/ratesPlot.png +0 -0
  40. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/savingsPlot.png +0 -0
  41. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/sourcesPlot.png +0 -0
  42. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/spendingPlot.png +0 -0
  43. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/taxIncomePlot.png +0 -0
  44. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/images/taxesPlot.png +0 -0
  45. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/owl.pdf +0 -0
  46. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/docs/owl.tex +0 -0
  47. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/case_jack+jill.toml +0 -0
  48. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/case_joe.toml +0 -0
  49. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/case_john+sally.toml +0 -0
  50. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/case_jon+jane.toml +0 -0
  51. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/case_kim+sam-bequest.toml +0 -0
  52. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/case_kim+sam-spending.toml +0 -0
  53. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/jack+jill.xlsx +0 -0
  54. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/joe.xlsx +0 -0
  55. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/john+sally.xlsx +0 -0
  56. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/jon+jane.xlsx +0 -0
  57. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/examples/template.xlsx +0 -0
  58. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/notebooks/john+sally.ipynb +0 -0
  59. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/notebooks/kim+sam.ipynb +0 -0
  60. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/notebooks/template.ipynb +0 -0
  61. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/notebooks/tutorial_1.ipynb +0 -0
  62. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/notebooks/tutorial_2.ipynb +0 -0
  63. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/notebooks/tutorial_3.ipynb +0 -0
  64. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/owlplanner.cmd +0 -0
  65. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/owlplanner.sh +0 -0
  66. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/requirements.txt +0 -0
  67. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/__init__.py +0 -0
  68. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/abcapi.py +0 -0
  69. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/config.py +0 -0
  70. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/data/__init__.py +0 -0
  71. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/data/rates.csv +0 -0
  72. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/logging.py +0 -0
  73. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/plan.py +0 -0
  74. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/progress.py +0 -0
  75. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/rates.py +0 -0
  76. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/tax2025.py +0 -0
  77. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/timelists.py +0 -0
  78. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/src/owlplanner/utils.py +0 -0
  79. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/tests/test_logger.py +0 -0
  80. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/tests/test_regressions.py +0 -0
  81. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/tests/test_repro.py +0 -0
  82. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/tests/test_toml_cases.py +0 -0
  83. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/tests/test_units.py +0 -0
  84. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ttt.py +0 -0
  85. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Asset_Allocation.py +0 -0
  86. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Create_Case.py +0 -0
  87. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Current_Assets.py +0 -0
  88. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Documentation.py +0 -0
  89. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Fixed_Income.py +0 -0
  90. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Graphs.py +0 -0
  91. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Historical_Range.py +0 -0
  92. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Logs.py +0 -0
  93. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Monte_Carlo.py +0 -0
  94. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Optimization_Parameters.py +0 -0
  95. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Quick_Start.py +0 -0
  96. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/README.md +0 -0
  97. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Rates_Selection.py +0 -0
  98. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Settings.py +0 -0
  99. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Wages_And_Contributions.py +0 -0
  100. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/Worksheets.py +0 -0
  101. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/main+fonts.py +0 -0
  102. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/main.py +0 -0
  103. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/owlbridge.py +0 -0
  104. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/plots.py +0 -0
  105. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/progress.py +0 -0
  106. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/style.css +0 -0
  107. {owlplanner-2025.3.11 → owlplanner-2025.3.12}/ui/tomlexamples.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: owlplanner
3
- Version: 2025.3.11
3
+ Version: 2025.3.12
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.03.11"
7
+ version = "2025.03.12"
8
8
  authors = [
9
9
  { name="Martin-D. Lacasse", email="martin.d.lacasse@gmail.com" },
10
10
  ]
@@ -0,0 +1 @@
1
+ __version__ = "2025.03.12"
@@ -8,7 +8,7 @@ st.write("## About Owl 🦉")
8
8
  kz.orangeDivider()
9
9
 
10
10
  st.write(f"This is Owl version {owb.version()} running on Streamlit {st.__version__}.")
11
- st.snow()
11
+ # st.balloons()
12
12
 
13
13
  st.write(
14
14
  """
@@ -18,7 +18,8 @@ else:
18
18
  df = kz.compareSummaries()
19
19
  if df is not None:
20
20
  st.write("#### Synopsis")
21
- st.dataframe(df[1:], use_container_width=True)
21
+ styledDf = df[1:].style.map(kz.colorBySign)
22
+ st.dataframe(styledDf, use_container_width=True)
22
23
  st.caption("Values are in today's \\$ unless marked otherwise.")
23
24
  st.download_button(
24
25
  "Download synopsis", data=df[1:].to_string(), file_name=f"Synopsis_{caseName}.txt",
@@ -7,4 +7,4 @@ scipy
7
7
  streamlit
8
8
  toml
9
9
  # --extra-index-url https://test.pypi.org/simple
10
- owlplanner >= 2025.03.11
10
+ owlplanner >= 2025.03.12
@@ -313,6 +313,12 @@ def getAccountBalances(ni):
313
313
  return bal
314
314
 
315
315
 
316
+ def colorBySign(val):
317
+ color = "green" if "\u2191" in val else "red" if "\u2193" in val else None
318
+
319
+ return f"color:{color};" if color else ""
320
+
321
+
316
322
  def compareSummaries():
317
323
  df = getKey("summaryDf")
318
324
  if df is None:
@@ -1 +0,0 @@
1
- __version__ = "2025.03.11"
File without changes
File without changes
File without changes
File without changes