owlplanner 2025.5.28__tar.gz → 2025.5.30__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 (111) hide show
  1. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/PKG-INFO +1 -1
  2. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/pyproject.toml +1 -1
  3. owlplanner-2025.5.30/src/owlplanner/version.py +1 -0
  4. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/tests/test_regressions.py +1 -2
  5. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Create_Case.py +10 -8
  6. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Current_Assets.py +3 -10
  7. owlplanner-2025.5.28/src/owlplanner/version.py +0 -1
  8. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/.devcontainer/devcontainer.json +0 -0
  9. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/.flake8 +0 -0
  10. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/.gitattributes +0 -0
  11. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/.github/workflows/github-actions-runtests.yml +0 -0
  12. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/.gitignore +0 -0
  13. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/.streamlit/config.toml +0 -0
  14. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/.streamlit/fullconfig.toml +0 -0
  15. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/INSTALL.md +0 -0
  16. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/LICENSE +0 -0
  17. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/README.md +0 -0
  18. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/USER_GUIDE.md +0 -0
  19. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docker/Dockerfile.build +0 -0
  20. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docker/Dockerfile.run +0 -0
  21. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docker/README.md +0 -0
  22. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docker/buildentrypoint.sh +0 -0
  23. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docker/docker-compose.yml +0 -0
  24. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docker/runentrypoint.sh +0 -0
  25. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/AD-taxDef.png +0 -0
  26. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/AD-taxFree.png +0 -0
  27. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/AD-taxable.png +0 -0
  28. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/Hist_Bequest.png +0 -0
  29. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/Hist_Spending.png +0 -0
  30. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/MC-tutorial2a.png +0 -0
  31. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/MC-tutorial2b.png +0 -0
  32. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/OwlUI.png +0 -0
  33. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/allocations.png +0 -0
  34. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/owl.png +0 -0
  35. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/profile.png +0 -0
  36. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/ratesCorrelations.png +0 -0
  37. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/ratesPlot.png +0 -0
  38. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/savingsPlot.png +0 -0
  39. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/sourcesPlot.png +0 -0
  40. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/spendingPlot.png +0 -0
  41. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/taxIncomePlot.png +0 -0
  42. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/images/taxesPlot.png +0 -0
  43. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/owl.pdf +0 -0
  44. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/docs/owl.tex +0 -0
  45. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/case_jack+jill.toml +0 -0
  46. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/case_joe.toml +0 -0
  47. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/case_john+sally.toml +0 -0
  48. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/case_jon+jane.toml +0 -0
  49. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/case_kim+sam-bequest.toml +0 -0
  50. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/case_kim+sam-spending.toml +0 -0
  51. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/jack+jill.xlsx +0 -0
  52. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/joe.xlsx +0 -0
  53. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/john+sally.xlsx +0 -0
  54. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/jon+jane.xlsx +0 -0
  55. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/examples/template.xlsx +0 -0
  56. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/notebooks/john+sally.ipynb +0 -0
  57. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/notebooks/kim+sam.ipynb +0 -0
  58. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/notebooks/template.ipynb +0 -0
  59. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/notebooks/tutorial_1.ipynb +0 -0
  60. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/notebooks/tutorial_2.ipynb +0 -0
  61. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/notebooks/tutorial_3.ipynb +0 -0
  62. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/owlplanner.cmd +0 -0
  63. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/owlplanner.sh +0 -0
  64. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/pytest.ini +0 -0
  65. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/requirements.txt +0 -0
  66. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/__init__.py +0 -0
  67. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/abcapi.py +0 -0
  68. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/config.py +0 -0
  69. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/data/__init__.py +0 -0
  70. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/data/rates.csv +0 -0
  71. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/mylogging.py +0 -0
  72. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/plan.py +0 -0
  73. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/plotting/__init__.py +0 -0
  74. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/plotting/base.py +0 -0
  75. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/plotting/factory.py +0 -0
  76. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/plotting/matplotlib_backend.py +0 -0
  77. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/plotting/plotly_backend.py +0 -0
  78. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/progress.py +0 -0
  79. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/rates.py +0 -0
  80. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/tax2025.py +0 -0
  81. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/timelists.py +0 -0
  82. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/src/owlplanner/utils.py +0 -0
  83. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/tests/test_logger.py +0 -0
  84. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/tests/test_repro.py +0 -0
  85. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/tests/test_toml_cases.py +0 -0
  86. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/tests/test_ui_asset_allocation.py +0 -0
  87. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/tests/test_ui_compare_summaries.py +0 -0
  88. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/tests/test_ui_sskeys.py +0 -0
  89. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/tests/test_units.py +0 -0
  90. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/About_Owl.py +0 -0
  91. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Asset_Allocation.py +0 -0
  92. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Documentation.py +0 -0
  93. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Fixed_Income.py +0 -0
  94. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Graphs.py +0 -0
  95. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Historical_Range.py +0 -0
  96. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Logs.py +0 -0
  97. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Monte_Carlo.py +0 -0
  98. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Optimization_Parameters.py +0 -0
  99. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Output_Files.py +0 -0
  100. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Quick_Start.py +0 -0
  101. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/README.md +0 -0
  102. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Rates_Selection.py +0 -0
  103. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Settings.py +0 -0
  104. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Wages_and_Contributions.py +0 -0
  105. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/Worksheets.py +0 -0
  106. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/__init__.py +0 -0
  107. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/main.py +0 -0
  108. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/owlbridge.py +0 -0
  109. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/progress.py +0 -0
  110. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/sskeys.py +0 -0
  111. {owlplanner-2025.5.28 → owlplanner-2025.5.30}/ui/tomlexamples.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: owlplanner
3
- Version: 2025.5.28
3
+ Version: 2025.5.30
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.28"
7
+ version = "2025.05.30"
8
8
  authors = [
9
9
  { name="Martin-D. Lacasse", email="martin.d.lacasse@gmail.com" },
10
10
  ]
@@ -0,0 +1 @@
1
+ __version__ = "2025.05.30"
@@ -67,11 +67,10 @@ def test_date_1():
67
67
  assert np.array_equal(p.expectancy, expectancy)
68
68
  assert p.N_i == 2
69
69
  assert p._name == name
70
- assert p.startDate == None
70
+ assert p.startDate is None
71
71
 
72
72
 
73
73
  def test_date_2():
74
- thisyear = date.today().year
75
74
  n = 10
76
75
  p = createPlan(1, 'date_2', n, 70)
77
76
  amount = 3.0
@@ -82,11 +82,12 @@ else:
82
82
 
83
83
  iname0 = kz.getText("Your first name", "iname0", disabled=diz2, placeholder="Enter name...")
84
84
 
85
- kz.initKey("yob0", 1965)
86
- ret = kz.getIntNum(f"{iname0}'s birth year", "yob0", disabled=diz2)
85
+ if iname0:
86
+ kz.initKey("yob0", 1965)
87
+ ret = kz.getIntNum(f"{iname0}'s birth year", "yob0", disabled=diz2)
87
88
 
88
- kz.initKey("life0", 80)
89
- ret = kz.getIntNum(f"{iname0}'s expected longevity", "life0", disabled=diz1)
89
+ kz.initKey("life0", 80)
90
+ ret = kz.getIntNum(f"{iname0}'s expected longevity", "life0", disabled=diz1)
90
91
 
91
92
  with col2:
92
93
  if kz.getKey("status") == "married":
@@ -96,11 +97,12 @@ else:
96
97
 
97
98
  iname1 = kz.getText("Your spouse's first name", "iname1", disabled=diz2, placeholder="Enter a name...")
98
99
 
99
- kz.initKey("yob1", 1965)
100
- ret = kz.getIntNum(f"{iname1}'s birth year", "yob1", disabled=diz2)
100
+ if iname1:
101
+ kz.initKey("yob1", 1965)
102
+ ret = kz.getIntNum(f"{iname1}'s birth year", "yob1", disabled=diz2)
101
103
 
102
- kz.initKey("life1", 80)
103
- ret = kz.getIntNum(f"{iname1}'s expected longevity", "life1", disabled=diz1)
104
+ kz.initKey("life1", 80)
105
+ ret = kz.getIntNum(f"{iname1}'s expected longevity", "life1", disabled=diz1)
104
106
 
105
107
  st.divider()
106
108
  cantcreate = kz.isIncomplete() or diz1
@@ -22,16 +22,9 @@ else:
22
22
  thisyear = today.year
23
23
  kz.initKey("startDate", today)
24
24
  helpmsg = "Date at which savings balances are known. Values will be back projected to Jan 1st."
25
- ret = st.date_input(
26
- "Account balance date",
27
- min_value=date(thisyear, 1, 1),
28
- max_value=date(thisyear, 12, 31),
29
- value=kz.getKey("startDate"),
30
- key="_startDate",
31
- args=["startDate"],
32
- on_change=kz.setpull,
33
- help=helpmsg,
34
- )
25
+ ret = st.date_input("Account balance date", min_value=date(thisyear, 1, 1),
26
+ max_value=date(thisyear, 12, 31), value=kz.getKey("startDate"),
27
+ key="_startDate", args=["startDate"], on_change=kz.setpull, help=helpmsg)
35
28
 
36
29
  with col2:
37
30
  if kz.getKey("status") == "married":
@@ -1 +0,0 @@
1
- __version__ = "2025.05.28"
File without changes
File without changes
File without changes