owlplanner 2025.11.2__tar.gz → 2025.11.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.11.2 → owlplanner-2025.11.3}/PKG-INFO +1 -1
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/pyproject.toml +1 -1
- owlplanner-2025.11.3/src/owlplanner/version.py +1 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/tests/test_ui_asset_allocation.py +3 -3
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/tests/test_ui_compare_summaries.py +1 -1
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/tests/test_ui_sskeys.py +2 -2
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/sskeys.py +2 -1
- owlplanner-2025.11.2/src/owlplanner/version.py +0 -1
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/.devcontainer/devcontainer.json +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/.flake8 +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/.gitattributes +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/.github/workflows/github-actions-runtests.yml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/.gitignore +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/.streamlit/config.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/.streamlit/fullconfig.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/INSTALL.md +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/LICENSE +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/README.md +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/RELEASE_NOTES.md +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/USER_GUIDE.md +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docker/Dockerfile.bare +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docker/Dockerfile.static +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docker/README.md +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docker/buildentrypoint.sh +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docker/docker-compose.yml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docker/runentrypoint.sh +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/AD-taxDef.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/AD-taxFree.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/AD-taxable.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/Hist_Bequest.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/Hist_Spending.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/MC-tutorial2a.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/MC-tutorial2b.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/OwlUI.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/allocations.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/owl.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/piecewiseConstant.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/profile.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/ratesCorrelations.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/ratesPlot.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/savingsPlot.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/sourcesPlot.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/spendingPlot.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/taxIncomePlot.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/images/taxesPlot.png +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/owl.pdf +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/docs/owl.tex +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/case_drawdowncalc-comparison-1.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/case_jack+jill.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/case_joe.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/case_john+sally.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/case_jon+jane.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/case_kim+sam-bequest.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/case_kim+sam-spending.toml +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/jack+jill.xlsx +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/joe.xlsx +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/john+sally.xlsx +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/jon+jane.xlsx +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/kim+sam.xlsx +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/examples/template.xlsx +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/notebooks/john+sally.ipynb +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/notebooks/kim+sam.ipynb +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/notebooks/template.ipynb +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/notebooks/tutorial_1.ipynb +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/notebooks/tutorial_2.ipynb +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/notebooks/tutorial_3.ipynb +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/owlplanner.cmd +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/owlplanner.sh +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/pytest.ini +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/requirements.txt +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/__init__.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/abcapi.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/config.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/data/__init__.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/data/rates.csv +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/mylogging.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/plan.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/plotting/__init__.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/plotting/base.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/plotting/factory.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/plotting/matplotlib_backend.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/plotting/plotly_backend.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/progress.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/rates.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/tax2025.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/tax2026.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/timelists.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/src/owlplanner/utils.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/tests/test_logger.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/tests/test_regressions.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/tests/test_repro.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/tests/test_toml_cases.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/tests/test_units.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/.owlbridge.py.swo +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/About_Owl.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Asset_Allocation.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Create_Case.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Current_Assets.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Documentation.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Fixed_Income.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Graphs.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Historical_Range.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Logs.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Monte_Carlo.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Optimization_Parameters.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Output_Files.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Quick_Start.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/README.md +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Rates_Selection.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Settings.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Wages_and_Contributions.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/Worksheets.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/__init__.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/main.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/owlbridge.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/progress.py +0 -0
- {owlplanner-2025.11.2 → owlplanner-2025.11.3}/ui/tomlexamples.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2025.11.03"
|
|
@@ -3,12 +3,12 @@ import ui.Asset_Allocation as aa
|
|
|
3
3
|
|
|
4
4
|
def test_checkAccountAllocs_valid(monkeypatch):
|
|
5
5
|
# Mock kz.getKey to return 25 for each call (4*25=100)
|
|
6
|
-
monkeypatch.setattr(aa.kz, "
|
|
6
|
+
monkeypatch.setattr(aa.kz, "getCaseKey", lambda key: 25)
|
|
7
7
|
assert aa.checkAccountAllocs(0, "") is True
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def test_checkAccountAllocs_invalid(monkeypatch):
|
|
11
|
-
# Mock kz.
|
|
12
|
-
monkeypatch.setattr(aa.kz, "
|
|
11
|
+
# Mock kz.getCaseKey to return 20 for each call (4*20=80)
|
|
12
|
+
monkeypatch.setattr(aa.kz, "getCaseKey", lambda key: 20)
|
|
13
13
|
# Should trigger error and return False
|
|
14
14
|
assert aa.checkAccountAllocs(0, "") is False
|
|
@@ -10,7 +10,7 @@ def test_compareSummaries(monkeypatch):
|
|
|
10
10
|
"case1": {"summaryDf": df1},
|
|
11
11
|
"case2": {"summaryDf": df2},
|
|
12
12
|
}
|
|
13
|
-
monkeypatch.setattr(sskeys, "
|
|
13
|
+
monkeypatch.setattr(sskeys, "getCaseKey", lambda key: df1 if key == "summaryDf" else None)
|
|
14
14
|
monkeypatch.setattr(sskeys, "onlyCaseNames", lambda: ["case2"])
|
|
15
15
|
monkeypatch.setattr(sskeys, "currentCaseName", lambda: "case1")
|
|
16
16
|
sskeys.ss = type("SS", (), {"cases": cases})()
|
|
@@ -14,11 +14,11 @@ def test_getIndex_not_found():
|
|
|
14
14
|
|
|
15
15
|
def test_caseHasNoPlan(monkeypatch):
|
|
16
16
|
# Mock getKey to return None
|
|
17
|
-
monkeypatch.setattr(sskeys, "
|
|
17
|
+
monkeypatch.setattr(sskeys, "getCaseKey", lambda key: None)
|
|
18
18
|
assert sskeys.caseHasNoPlan() is True
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
def test_caseHasPlan(monkeypatch):
|
|
22
22
|
# Mock getKey to return a non-None value
|
|
23
|
-
monkeypatch.setattr(sskeys, "
|
|
23
|
+
monkeypatch.setattr(sskeys, "getCaseKey", lambda key: "something")
|
|
24
24
|
assert sskeys.caseHasNoPlan() is False
|
|
@@ -106,7 +106,8 @@ def resetTimeLists():
|
|
|
106
106
|
def getIndex(item, choices):
|
|
107
107
|
try:
|
|
108
108
|
i = choices.index(item)
|
|
109
|
-
except ValueError
|
|
109
|
+
except ValueError:
|
|
110
|
+
st.error(f"Value {item} not found in {choices}.")
|
|
110
111
|
return None
|
|
111
112
|
|
|
112
113
|
return i
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2025.11.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|