owlplanner 2025.2.27__tar.gz → 2025.3.11__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 (108) hide show
  1. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/.github/workflows/github-actions-runtests.yml +1 -0
  2. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/INSTALL.md +4 -3
  3. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/PKG-INFO +11 -5
  4. owlplanner-2025.3.11/Papers/Kou-OptionPricingDouble-2004.pdf +0 -0
  5. owlplanner-2025.3.11/Papers/Multi-Period Mean Expected-Shortfall Strategies Cut Your Losses and Ride Your Gains .pdf +45651 -23
  6. owlplanner-2025.3.11/Papers/Optimal Asset Allocation for Retirement Saving Deterministic Vs. Time Consistent Adaptive Strategies.pdf +42974 -10
  7. owlplanner-2025.3.11/Papers/Rule-based_strategies_for_dynamic_life_cycle_inves.pdf +0 -0
  8. owlplanner-2025.3.11/Papers/s10436-006-0062-y.pdf +0 -0
  9. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/README.md +10 -4
  10. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/case_jack+jill.toml +1 -1
  11. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/pyproject.toml +1 -1
  12. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/config.py +3 -3
  13. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/plan.py +23 -12
  14. owlplanner-2025.3.11/src/owlplanner/version.py +1 -0
  15. owlplanner-2025.3.11/ttt.py +13 -0
  16. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Create_Case.py +2 -2
  17. owlplanner-2025.2.27/ui/Assets.py → owlplanner-2025.3.11/ui/Current_Assets.py +1 -1
  18. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Documentation.py +72 -54
  19. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Output_Files.py +1 -2
  20. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Quick_Start.py +2 -3
  21. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/main.py +1 -1
  22. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/owlbridge.py +1 -1
  23. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/requirements.txt +1 -1
  24. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/sskeys.py +4 -5
  25. owlplanner-2025.2.27/src/owlplanner/version.py +0 -1
  26. owlplanner-2025.2.27/ttt.py +0 -20
  27. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/.devcontainer/devcontainer.json +0 -0
  28. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/.flake8 +0 -0
  29. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/.gitattributes +0 -0
  30. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/.gitignore +0 -0
  31. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/LICENSE +0 -0
  32. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/USER_GUIDE.md +0 -0
  33. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docker/Dockerfile +0 -0
  34. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docker/README.md +0 -0
  35. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docker/docker-compose.yml +0 -0
  36. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docker/fastentrypoint.sh +0 -0
  37. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/AD-taxDef.png +0 -0
  38. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/AD-taxFree.png +0 -0
  39. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/AD-taxable.png +0 -0
  40. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/Hist_Bequest.png +0 -0
  41. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/Hist_Spending.png +0 -0
  42. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/MC-tutorial2a.png +0 -0
  43. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/MC-tutorial2b.png +0 -0
  44. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/OwlUI.png +0 -0
  45. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/allocations.png +0 -0
  46. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/owl.png +0 -0
  47. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/profile.png +0 -0
  48. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/ratesCorrelations.png +0 -0
  49. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/ratesPlot.png +0 -0
  50. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/savingsPlot.png +0 -0
  51. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/sourcesPlot.png +0 -0
  52. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/spendingPlot.png +0 -0
  53. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/taxIncomePlot.png +0 -0
  54. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/images/taxesPlot.png +0 -0
  55. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/owl.pdf +0 -0
  56. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/docs/owl.tex +0 -0
  57. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/case_joe.toml +0 -0
  58. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/case_john+sally.toml +0 -0
  59. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/case_jon+jane.toml +0 -0
  60. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/case_kim+sam-bequest.toml +0 -0
  61. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/case_kim+sam-spending.toml +0 -0
  62. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/jack+jill.xlsx +0 -0
  63. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/joe.xlsx +0 -0
  64. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/john+sally.xlsx +0 -0
  65. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/jon+jane.xlsx +0 -0
  66. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/examples/template.xlsx +0 -0
  67. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/notebooks/john+sally.ipynb +0 -0
  68. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/notebooks/kim+sam.ipynb +0 -0
  69. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/notebooks/template.ipynb +0 -0
  70. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/notebooks/tutorial_1.ipynb +0 -0
  71. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/notebooks/tutorial_2.ipynb +0 -0
  72. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/notebooks/tutorial_3.ipynb +0 -0
  73. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/owlplanner.cmd +0 -0
  74. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/owlplanner.sh +0 -0
  75. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/requirements.txt +0 -0
  76. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/__init__.py +0 -0
  77. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/abcapi.py +0 -0
  78. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/data/__init__.py +0 -0
  79. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/data/rates.csv +0 -0
  80. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/logging.py +0 -0
  81. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/progress.py +0 -0
  82. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/rates.py +0 -0
  83. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/tax2025.py +0 -0
  84. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/timelists.py +0 -0
  85. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/src/owlplanner/utils.py +0 -0
  86. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/tests/test_logger.py +0 -0
  87. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/tests/test_regressions.py +0 -0
  88. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/tests/test_repro.py +0 -0
  89. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/tests/test_toml_cases.py +0 -0
  90. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/tests/test_units.py +0 -0
  91. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/About_Owl.py +0 -0
  92. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Asset_Allocation.py +0 -0
  93. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Fixed_Income.py +0 -0
  94. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Graphs.py +0 -0
  95. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Historical_Range.py +0 -0
  96. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Logs.py +0 -0
  97. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Monte_Carlo.py +0 -0
  98. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Optimization_Parameters.py +0 -0
  99. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/README.md +0 -0
  100. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Rates_Selection.py +0 -0
  101. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Settings.py +0 -0
  102. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Wages_And_Contributions.py +0 -0
  103. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/Worksheets.py +0 -0
  104. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/main+fonts.py +0 -0
  105. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/plots.py +0 -0
  106. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/progress.py +0 -0
  107. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/style.css +0 -0
  108. {owlplanner-2025.2.27 → owlplanner-2025.3.11}/ui/tomlexamples.py +0 -0
@@ -5,6 +5,7 @@ name: Python package
5
5
 
6
6
  run-name: ${{ github.actor }} running tests
7
7
  on: [push]
8
+ permissions: read-all
8
9
  jobs:
9
10
  build:
10
11
  runs-on: ubuntu-latest
@@ -14,7 +14,7 @@ or, if one prefers to have everything on their own computer,
14
14
  to install and run a Docker image as described in these [instructions](docker/README.md).
15
15
 
16
16
  ### Requirements
17
- You will need Python and `pip` installed on your computer for that purpose.
17
+ You will need Python and `pip` installed on your computer for completing the installation.
18
18
 
19
19
  ### Installation steps for developers
20
20
  These instructions are command-line instructions.
@@ -29,7 +29,8 @@ From the top directory of the source code run:
29
29
  python -m build
30
30
  pip install -e .
31
31
  ```
32
- The -e instructs Python to load the live version in the current directory tree.
32
+ The -e instructs `pip` to install in *editable* mode and use the live version
33
+ in the current directory tree.
33
34
 
34
35
  ### Running the streamlit frontend
35
36
  Running the Owl user interface locally from Windows:
@@ -42,7 +43,7 @@ Running the Owl user interface locally from Linux or MacOS:
42
43
  ```
43
44
 
44
45
  ### Publishing a version (for reference only)
45
- Run checks before commit:
46
+ Run checks before all commits:
46
47
  ```
47
48
  flake8 ui src tests
48
49
  pytest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: owlplanner
3
- Version: 2025.2.27
3
+ Version: 2025.3.11
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
@@ -711,7 +711,13 @@ Description-Content-Type: text/markdown
711
711
  -------------------------------------------------------------------------------------
712
712
 
713
713
  ### TL;DR
714
- Owl is a planning tool that uses a linear programming optimization algorithm to provide guidance on retirement decisions. There are a few ways to run Owl.
714
+ Owl is a retirement planning tool that uses a linear programming optimization algorithm
715
+ to provide guidance on retirement decisions, including Roth conversions.
716
+ Users can select varying return rates to perform historical back testing,
717
+ stochastic rates for performing Monte Carlo analyses,
718
+ or fixed rates either derived from historical averages, or set by the user.
719
+
720
+ There are a few ways to run Owl:
715
721
 
716
722
  - Run Owl directly on the Streamlit Community Server at [owlplanner.streamlit.app](https://owlplanner.streamlit.app).
717
723
 
@@ -759,7 +765,7 @@ mathematical model can be found [here](https://raw.github.com/mdlacasse/Owl/main
759
765
  It is anticipated that most end users will use Owl through the graphical interface
760
766
  either at [owlplanner.streamlit.app](https://owlplanner.streamlit.app)
761
767
  or [installed](INSTALL.md) on their own computer.
762
- The underlying Python package can also be used directly through Python scripts or a Jupyter Notebook
768
+ The underlying Python package can also be used directly through Python scripts or Jupyter Notebooks
763
769
  as described [here](USER_GUIDE.md).
764
770
 
765
771
  Not every retirement decision strategy can be framed as an easy-to-solve optimization problem.
@@ -792,7 +798,7 @@ Asset allocations are selected for the duration of the plan, and these can glide
792
798
  or along a configurable s-curve over the lifespan of the individual.
793
799
 
794
800
  Spending profiles are adjusted for inflation, and so are all other indexable quantities. Proflies can be
795
- flat or follow a *smile* curve which is also adjustable through two simple parameters.
801
+ flat or follow a *smile* curve which is also adjustable through three simple parameters.
796
802
 
797
803
  Available rates are from 1928 to last year and can be used to test historical performance.
798
804
  Fixed rates can also be provided, as well as *histochastic* rates, which are generated using
@@ -868,7 +874,7 @@ assets to support, even with no estate being left.
868
874
  ---------------------------------------------------------------
869
875
  ## Documentation
870
876
 
871
- - Documentation for the app user interface is available from the interface itself.
877
+ - Documentation for the app user interface is available from the interface [itself](https://owlplanner.streamlit.app/Documentation).
872
878
  - Installation guide and software requirements can be found [here](INSTALL.md).
873
879
  - User guide for the underlying Python package as used in a Jupyter notebook can be found [here](USER_GUIDE.md).
874
880