owlplanner 2025.2__py3-none-any.whl → 2025.2.1__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/plan.py CHANGED
@@ -859,12 +859,12 @@ class Plan(object):
859
859
 
860
860
  'year',
861
861
  'anticipated wages',
862
- 'ctrb taxable',
863
- 'ctrb 401k',
864
- 'ctrb Roth 401k',
865
- 'ctrb IRA',
866
- 'ctrb Roth IRA',
867
- 'Roth X',
862
+ 'taxable ctrb',
863
+ '401k ctrb',
864
+ 'Roth 401k ctrb',
865
+ 'IRA ctrb',
866
+ 'Roth IRA ctrb',
867
+ 'Roth conv',
868
868
  'big-ticket items'
869
869
 
870
870
  in any order. A template is provided as an example.
@@ -890,12 +890,12 @@ class Plan(object):
890
890
  for i, iname in enumerate(self.inames):
891
891
  h = self.horizons[i]
892
892
  self.omega_in[i, :h] = self.timeLists[iname]['anticipated wages'].iloc[:h]
893
- self.kappa_ijn[i, 0, :h] = self.timeLists[iname]['ctrb taxable'].iloc[:h]
894
- self.kappa_ijn[i, 1, :h] = self.timeLists[iname]['ctrb 401k'].iloc[:h]
895
- self.kappa_ijn[i, 2, :h] = self.timeLists[iname]['ctrb Roth 401k'].iloc[:h]
896
- self.kappa_ijn[i, 1, :h] += self.timeLists[iname]['ctrb IRA'].iloc[:h]
897
- self.kappa_ijn[i, 2, :h] += self.timeLists[iname]['ctrb Roth IRA'].iloc[:h]
898
- self.myRothX_in[i, :h] = self.timeLists[iname]['Roth X'].iloc[:h]
893
+ self.kappa_ijn[i, 0, :h] = self.timeLists[iname]['taxable ctrb'].iloc[:h]
894
+ self.kappa_ijn[i, 1, :h] = self.timeLists[iname]['401k ctrb'].iloc[:h]
895
+ self.kappa_ijn[i, 2, :h] = self.timeLists[iname]['Roth 401k ctrb'].iloc[:h]
896
+ self.kappa_ijn[i, 1, :h] += self.timeLists[iname]['IRA ctrb'].iloc[:h]
897
+ self.kappa_ijn[i, 2, :h] += self.timeLists[iname]['Roth IRA ctrb'].iloc[:h]
898
+ self.myRothX_in[i, :h] = self.timeLists[iname]['Roth conv'].iloc[:h]
899
899
  self.Lambda_in[i, :h] = self.timeLists[iname]['big-ticket items'].iloc[:h]
900
900
 
901
901
  # In 1st year, reduce wages and contribution depending on starting date.
@@ -947,8 +947,8 @@ class Plan(object):
947
947
  self.myRothX_in[:, :] = 0.
948
948
  self.kappa_ijn[:, :, :] = 0.
949
949
 
950
- cols = ['year', 'anticipated wages', 'ctrb taxable', 'ctrb 401k',
951
- 'ctrb Roth 401k', 'ctrb IRA', 'ctrb Roth IRA', 'Roth X', 'big-ticket items']
950
+ cols = ['year', 'anticipated wages', 'taxable ctrb', '401k ctrb',
951
+ 'Roth 401k ctrb', 'IRA ctrb', 'Roth IRA ctrb', 'Roth conv', 'big-ticket items']
952
952
  for i, iname in enumerate(self.inames):
953
953
  h = self.horizons[i]
954
954
  df = pd.DataFrame(0, index=np.arange(h), columns=cols)
@@ -1993,8 +1993,8 @@ class Plan(object):
1993
1993
  'wages',
1994
1994
  'ssec',
1995
1995
  'pension',
1996
- 'dist',
1997
- 'rmd',
1996
+ '+dist',
1997
+ 'RMD',
1998
1998
  'RothX',
1999
1999
  'wdrwl taxable',
2000
2000
  'wdrwl tax-free',
@@ -2004,12 +2004,12 @@ class Plan(object):
2004
2004
  sources['wages'] = self.omega_in
2005
2005
  sources['ssec'] = self.zetaBar_in
2006
2006
  sources['pension'] = self.pi_in
2007
- sources['wdrwl taxable'] = self.w_ijn[:, 0, :]
2008
- sources['rmd'] = self.rmd_in
2009
- sources['dist'] = self.dist_in
2007
+ sources['taxable wdrwl'] = self.w_ijn[:, 0, :]
2008
+ sources['RMD'] = self.rmd_in
2009
+ sources['+dist'] = self.dist_in
2010
2010
  sources['RothX'] = self.x_in
2011
- sources['wdrwl tax-free'] = self.w_ijn[:, 2, :]
2012
- sources['bti'] = self.Lambda_in
2011
+ sources['tax-free wdrwl'] = self.w_ijn[:, 2, :]
2012
+ sources['BTI'] = self.Lambda_in
2013
2013
 
2014
2014
  savings = {}
2015
2015
  savings['taxable'] = self.b_ijn[:, 0, :]
@@ -2719,7 +2719,7 @@ class Plan(object):
2719
2719
  'all wages': np.sum(self.omega_in, axis=0),
2720
2720
  'all pensions': np.sum(self.pi_in, axis=0),
2721
2721
  'all soc sec': np.sum(self.zetaBar_in, axis=0),
2722
- "all bti's": np.sum(self.Lambda_in, axis=0),
2722
+ "all BTI's": np.sum(self.Lambda_in, axis=0),
2723
2723
  'all wdrwls': np.sum(self.w_ijn, axis=(0, 1)),
2724
2724
  'all deposits': -np.sum(self.d_in, axis=0),
2725
2725
  'ord taxes': -self.T_n,
@@ -2735,12 +2735,12 @@ class Plan(object):
2735
2735
  'wages': self.sources_in['wages'],
2736
2736
  'social sec': self.sources_in['ssec'],
2737
2737
  'pension': self.sources_in['pension'],
2738
- 'txbl acc wdrwl': self.sources_in['wdrwl taxable'],
2739
- 'RMDs': self.sources_in['rmd'],
2740
- '+distributions': self.sources_in['dist'],
2741
- 'Roth conversion': self.sources_in['RothX'],
2742
- 'tax-free wdrwl': self.sources_in['wdrwl tax-free'],
2743
- 'big-ticket items': self.sources_in['bti'],
2738
+ 'txbl acc wdrwl': self.sources_in['txbl acc wdrwl'],
2739
+ 'RMDs': self.sources_in['RMD'],
2740
+ '+distributions': self.sources_in['+dist'],
2741
+ 'Roth conv': self.sources_in['RothX'],
2742
+ 'tax-free wdrwl': self.sources_in['tax-free wdrwl'],
2743
+ 'big-ticket items': self.sources_in['BTI'],
2744
2744
  }
2745
2745
 
2746
2746
  for i in range(self.N_i):
@@ -2751,13 +2751,14 @@ class Plan(object):
2751
2751
  # Account balances except final year.
2752
2752
  accDic = {
2753
2753
  'taxable bal': self.b_ijn[:, 0, :-1],
2754
+ 'taxable ctrb': self.kappa_ijn[:, 0, :],
2754
2755
  'taxable dep': self.d_in,
2755
2756
  'taxable wdrwl': self.w_ijn[:, 0, :],
2756
2757
  'tax-deferred bal': self.b_ijn[:, 1, :-1],
2757
2758
  'tax-deferred ctrb': self.kappa_ijn[:, 1, :],
2758
2759
  'tax-deferred wdrwl': self.w_ijn[:, 1, :],
2759
2760
  '(included RMDs)': self.rmd_in[:, :],
2760
- 'Roth conversion': self.x_in,
2761
+ 'Roth conv': self.x_in,
2761
2762
  'tax-free bal': self.b_ijn[:, 2, :-1],
2762
2763
  'tax-free ctrb': self.kappa_ijn[:, 2, :],
2763
2764
  'tax-free wdrwl': self.w_ijn[:, 2, :],
@@ -2856,7 +2857,7 @@ class Plan(object):
2856
2857
  planData[self.inames[i] + ' tx-def ctrb'] = self.kappa_ijn[i, 1, :]
2857
2858
  planData[self.inames[i] + ' tx-def wdrl'] = self.w_ijn[i, 1, :]
2858
2859
  planData[self.inames[i] + ' (RMD)'] = self.rmd_in[i, :]
2859
- planData[self.inames[i] + ' Roth conversion'] = self.x_in[i, :]
2860
+ planData[self.inames[i] + ' Roth conv'] = self.x_in[i, :]
2860
2861
  planData[self.inames[i] + ' tx-free bal'] = self.b_ijn[i, 2, :-1]
2861
2862
  planData[self.inames[i] + ' tx-free ctrb'] = self.kappa_ijn[i, 2, :]
2862
2863
  planData[self.inames[i] + ' tax-free wdrwl'] = self.w_ijn[i, 2, :]
owlplanner/timelists.py CHANGED
@@ -23,12 +23,12 @@ import pandas as pd
23
23
  timeHorizonItems = [
24
24
  'year',
25
25
  'anticipated wages',
26
- 'ctrb taxable',
27
- 'ctrb 401k',
28
- 'ctrb Roth 401k',
29
- 'ctrb IRA',
30
- 'ctrb Roth IRA',
31
- 'Roth X',
26
+ 'taxable ctrb',
27
+ '401k ctrb',
28
+ 'Roth 401k ctrb',
29
+ 'IRA ctrb',
30
+ 'Roth IRA ctrb',
31
+ 'Roth conv',
32
32
  'big-ticket items',
33
33
  ]
34
34
 
@@ -38,8 +38,8 @@ def read(finput, inames, horizons, mylog):
38
38
  Read listed parameters from an excel spreadsheet or through
39
39
  a dictionary of dataframes through Pandas.
40
40
  Use one sheet for each individual with the following 9 columns:
41
- year, anticipated wages, ctrb taxable, ctrb 401k, ctrb Roth 401k,
42
- ctrb IRA, ctrb Roth IRA, Roth X, and big-ticket items.
41
+ year, anticipated wages, taxable ctrb, 401k ctrb, Roth 401k ctrb,
42
+ IRA ctrb, Roth IRA ctrb, Roth conv, and big-ticket items.
43
43
  Supports xls, xlsx, xlsm, xlsb, odf, ods, and odt file extensions.
44
44
  Returs a dictionary of dataframes by individual's names.
45
45
  """
owlplanner/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "2025.02"
1
+ __version__ = "2025.02.01"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: owlplanner
3
- Version: 2025.2
3
+ Version: 2025.2.1
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
@@ -2,16 +2,16 @@ owlplanner/__init__.py,sha256=QqrdT0Qks20osBTg7h0vJHAxpP9lL7DA99xb0nYbtw4,254
2
2
  owlplanner/abcapi.py,sha256=eemIsdbtzdWCIj5VuuswgphxXMcxJ_GZfUlDi6lttFM,6658
3
3
  owlplanner/config.py,sha256=ouADb6YES5Zgv0UwnEK9Axwvs8drp-ahboQjI4WTrr0,12069
4
4
  owlplanner/logging.py,sha256=pXg_mMgBll-kklqaDRLDNVUFo-5DAa-yqTKtiVrhNWw,2530
5
- owlplanner/plan.py,sha256=hZhx-Dp_t1Lli2q2VdtXkM03qsdPdM7KcDu4wgAxDIE,115577
5
+ owlplanner/plan.py,sha256=kVuv7OfnLnoTxO6LZgRY56Np-yWifGNg_vtlB8R_jZQ,115626
6
6
  owlplanner/progress.py,sha256=YZjL5_m4MMgKPlWlhhKacPLt54tVhVGF1eXxxZapMYs,386
7
7
  owlplanner/rates.py,sha256=aKOmau8i3uqxZGi7HQJpzooT3X-yAZhga5MZJ56pBzk,15627
8
8
  owlplanner/tax2025.py,sha256=b2RgM6TBQa8ggo6ODyh0p_J7j79UUm8z5NiENqa1l_k,7016
9
- owlplanner/timelists.py,sha256=ifxbyMlRW3IMwsiu8zsoodA1CKJQthgk3iPq50vQIds,4104
9
+ owlplanner/timelists.py,sha256=WwymsYAGWcrEzMtc-wrLbn1EVA2fhqXGN4NHLJsH3Fs,4110
10
10
  owlplanner/utils.py,sha256=adIwqGVQFfvekke0JCxYJD3PKHbptVCj3NrQT2TQIB4,2351
11
- owlplanner/version.py,sha256=1_pf7w0m_4k4eWcDSLOiWoM_lv54EH6pA9nuPETGRtk,25
11
+ owlplanner/version.py,sha256=0gSeVv3M2dXUJh4tEDh_HPMJgzKSY9PHw3rX05-ggH8,28
12
12
  owlplanner/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  owlplanner/data/rates.csv,sha256=6fxg56BVVORrj9wJlUGFdGXKvOX5r7CSca8uhUbbuIU,3734
14
- owlplanner-2025.2.dist-info/METADATA,sha256=xII-8KNAoNNr_19KWjuS-9seZBzoBK4P9hEKLfcprto,64512
15
- owlplanner-2025.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- owlplanner-2025.2.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
17
- owlplanner-2025.2.dist-info/RECORD,,
14
+ owlplanner-2025.2.1.dist-info/METADATA,sha256=FUY7f2ri_UxQlUMZDllEohMHAVge-wmCp5bhnpi-gkA,64514
15
+ owlplanner-2025.2.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ owlplanner-2025.2.1.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
17
+ owlplanner-2025.2.1.dist-info/RECORD,,