owlplanner 2025.3.7__py3-none-any.whl → 2025.3.11__py3-none-any.whl
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/config.py +3 -3
- owlplanner/plan.py +3 -3
- owlplanner/version.py +1 -1
- {owlplanner-2025.3.7.dist-info → owlplanner-2025.3.11.dist-info}/METADATA +3 -3
- {owlplanner-2025.3.7.dist-info → owlplanner-2025.3.11.dist-info}/RECORD +7 -7
- {owlplanner-2025.3.7.dist-info → owlplanner-2025.3.11.dist-info}/WHEEL +0 -0
- {owlplanner-2025.3.7.dist-info → owlplanner-2025.3.11.dist-info}/licenses/LICENSE +0 -0
owlplanner/config.py
CHANGED
|
@@ -55,7 +55,7 @@ def saveConfig(myplan, file, mylog):
|
|
|
55
55
|
diconf["Fixed Income"] = {
|
|
56
56
|
"Pension amounts": (myplan.pensionAmounts / 1000).tolist(),
|
|
57
57
|
"Pension ages": myplan.pensionAges.tolist(),
|
|
58
|
-
"Pension indexed": myplan.
|
|
58
|
+
"Pension indexed": myplan.pensionIsIndexed,
|
|
59
59
|
"Social security amounts": (myplan.ssecAmounts / 1000).tolist(),
|
|
60
60
|
"Social security ages": myplan.ssecAges.tolist(),
|
|
61
61
|
}
|
|
@@ -222,8 +222,8 @@ def readConfig(file, *, verbose=True, logstreams=None, readContributions=True):
|
|
|
222
222
|
p.setSocialSecurity(ssecAmounts, ssecAges)
|
|
223
223
|
pensionAmounts = np.array(diconf["Fixed Income"]["Pension amounts"], dtype=np.float32)
|
|
224
224
|
pensionAges = np.array(diconf["Fixed Income"]["Pension ages"], dtype=np.int32)
|
|
225
|
-
|
|
226
|
-
p.setPension(pensionAmounts, pensionAges,
|
|
225
|
+
pensionIsIndexed = diconf["Fixed Income"]["Pension indexed"]
|
|
226
|
+
p.setPension(pensionAmounts, pensionAges, pensionIsIndexed)
|
|
227
227
|
|
|
228
228
|
# Rates Selection.
|
|
229
229
|
p.setDividendRate(float(diconf["Rates Selection"]["Dividend tax rate"]))
|
owlplanner/plan.py
CHANGED
|
@@ -291,7 +291,7 @@ class Plan(object):
|
|
|
291
291
|
self.zeta_in = np.zeros((self.N_i, self.N_n))
|
|
292
292
|
self.pensionAmounts = np.zeros(self.N_i)
|
|
293
293
|
self.pensionAges = 65 * np.ones(self.N_i, dtype=np.int32)
|
|
294
|
-
self.
|
|
294
|
+
self.pensionIsIndexed = [False, False]
|
|
295
295
|
self.ssecAmounts = np.zeros(self.N_i)
|
|
296
296
|
self.ssecAges = 67 * np.ones(self.N_i, dtype=np.int32)
|
|
297
297
|
|
|
@@ -531,7 +531,7 @@ class Plan(object):
|
|
|
531
531
|
|
|
532
532
|
self.pensionAmounts = np.array(amounts)
|
|
533
533
|
self.pensionAges = np.array(ages, dtype=np.int32)
|
|
534
|
-
self.
|
|
534
|
+
self.pensionIsIndexed = indexed
|
|
535
535
|
self.caseStatus = "modified"
|
|
536
536
|
self._adjustedParameters = False
|
|
537
537
|
|
|
@@ -1008,7 +1008,7 @@ class Plan(object):
|
|
|
1008
1008
|
self.xiBar_n = self.xi_n * self.gamma_n[:-1]
|
|
1009
1009
|
self.piBar_in = np.array(self.pi_in)
|
|
1010
1010
|
for i in range(self.N_i):
|
|
1011
|
-
if self.
|
|
1011
|
+
if self.pensionIsIndexed[i]:
|
|
1012
1012
|
self.piBar_in[i] *= self.gamma_n[:-1]
|
|
1013
1013
|
|
|
1014
1014
|
self._adjustedParameters = True
|
owlplanner/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "2025.03.
|
|
1
|
+
__version__ = "2025.03.11"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: owlplanner
|
|
3
|
-
Version: 2025.3.
|
|
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
|
|
@@ -765,7 +765,7 @@ mathematical model can be found [here](https://raw.github.com/mdlacasse/Owl/main
|
|
|
765
765
|
It is anticipated that most end users will use Owl through the graphical interface
|
|
766
766
|
either at [owlplanner.streamlit.app](https://owlplanner.streamlit.app)
|
|
767
767
|
or [installed](INSTALL.md) on their own computer.
|
|
768
|
-
The underlying Python package can also be used directly through Python scripts or
|
|
768
|
+
The underlying Python package can also be used directly through Python scripts or Jupyter Notebooks
|
|
769
769
|
as described [here](USER_GUIDE.md).
|
|
770
770
|
|
|
771
771
|
Not every retirement decision strategy can be framed as an easy-to-solve optimization problem.
|
|
@@ -798,7 +798,7 @@ Asset allocations are selected for the duration of the plan, and these can glide
|
|
|
798
798
|
or along a configurable s-curve over the lifespan of the individual.
|
|
799
799
|
|
|
800
800
|
Spending profiles are adjusted for inflation, and so are all other indexable quantities. Proflies can be
|
|
801
|
-
flat or follow a *smile* curve which is also adjustable through
|
|
801
|
+
flat or follow a *smile* curve which is also adjustable through three simple parameters.
|
|
802
802
|
|
|
803
803
|
Available rates are from 1928 to last year and can be used to test historical performance.
|
|
804
804
|
Fixed rates can also be provided, as well as *histochastic* rates, which are generated using
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
owlplanner/__init__.py,sha256=QqrdT0Qks20osBTg7h0vJHAxpP9lL7DA99xb0nYbtw4,254
|
|
2
2
|
owlplanner/abcapi.py,sha256=LbzW_KcNy0IeHp42MUHwGu_H67B2h_e1_vu-c2ACTkQ,6646
|
|
3
|
-
owlplanner/config.py,sha256=
|
|
3
|
+
owlplanner/config.py,sha256=uJ6jZ9Rx2CB2P5cFRscsUCXOW6uml7I4pta2ozjW0uo,12263
|
|
4
4
|
owlplanner/logging.py,sha256=tYMw04O-XYSzjTj36fmKJGLcE1VkK6k6oJNeqtKXzuc,2530
|
|
5
|
-
owlplanner/plan.py,sha256=
|
|
5
|
+
owlplanner/plan.py,sha256=mCcoocK9g1nCUpQDaMVUTiwugKPuDZaEYbrSPPi0sBY,115404
|
|
6
6
|
owlplanner/progress.py,sha256=8jlCvvtgDI89zXVNMBg1-lnEyhpPvKQS2X5oAIpoOVQ,384
|
|
7
7
|
owlplanner/rates.py,sha256=TN407qU4n-bac1oymkQ_n2QKEPwFQxy6JZVGwgIkLQU,15585
|
|
8
8
|
owlplanner/tax2025.py,sha256=B-A5eU3wxdcAaxRCbT3qI-JEKoD_ZeNbg_86XhNdQEI,7745
|
|
9
9
|
owlplanner/timelists.py,sha256=tYieZU67FT6TCcQQis36JaXGI7dT6NqD7RvdEjgJL4M,4026
|
|
10
10
|
owlplanner/utils.py,sha256=HM70W60qB41zfnbl2LltNwAuLYHyy5XYbwnbNcaa6FE,2351
|
|
11
|
-
owlplanner/version.py,sha256=
|
|
11
|
+
owlplanner/version.py,sha256=HrtvlhxZp9gln32M2lagzUjBWC3oqV1rUecAVUAAJj8,28
|
|
12
12
|
owlplanner/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
13
|
owlplanner/data/rates.csv,sha256=6fxg56BVVORrj9wJlUGFdGXKvOX5r7CSca8uhUbbuIU,3734
|
|
14
|
-
owlplanner-2025.3.
|
|
15
|
-
owlplanner-2025.3.
|
|
16
|
-
owlplanner-2025.3.
|
|
17
|
-
owlplanner-2025.3.
|
|
14
|
+
owlplanner-2025.3.11.dist-info/METADATA,sha256=h06pbBAcJCEqWvY_zOybpnIk5xEaVhax8R2YESfn73o,53801
|
|
15
|
+
owlplanner-2025.3.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
16
|
+
owlplanner-2025.3.11.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
|
17
|
+
owlplanner-2025.3.11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|