@@ -76,11 +76,11 @@ def __init__(self, information, technology, preferences):
7676 uc = np .hstack ((np .eye (self .nc ), np .zeros ((self .nc , self .ng ))))
7777 ug = np .hstack ((np .zeros ((self .ng , self .nc )), np .eye (self .ng )))
7878 phiin = np .linalg .inv (np .hstack ((self .phic , self .phig )))
79- phiinc = uc . dot ( phiin )
80- b11 = - self .thetah . dot ( phiinc ). dot ( self .phii )
81- a1 = self .thetah . dot ( phiinc ). dot ( self .gamma )
82- a12 = np .vstack ((self .thetah . dot ( phiinc ). dot (
83- self .ud ) , np .zeros ((self .nk , self .nz ))))
79+ phiinc = uc @ phiin
80+ b11 = - self .thetah @ phiinc @ self .phii
81+ a1 = self .thetah @ phiinc @ self .gamma
82+ a12 = np .vstack ((self .thetah @ phiinc @
83+ self .ud , np .zeros ((self .nk , self .nz ))))
8484
8585 # === Creation of the A Matrix for the state transition of the LQ problem === #
8686
@@ -100,11 +100,11 @@ def __init__(self, information, technology, preferences):
100100
101101 # === Define R,W and Q for the payoff function of the LQ problem === #
102102
103- self .H = np .hstack ((self .llambda , self .pih . dot ( uc ). dot ( phiin ). dot ( self .gamma ) , self .pih . dot (
104- uc ). dot ( phiin ). dot ( self .ud ) - self .ub , - self .pih . dot ( uc ). dot ( phiin ). dot ( self .phii ) ))
105- self .G = ug . dot ( phiin ). dot (
103+ self .H = np .hstack ((self .llambda , self .pih @ uc @ phiin @ self .gamma , self .pih @
104+ uc @ phiin @ self .ud - self .ub , - self .pih @ uc @ phiin @ self .phii ))
105+ self .G = ( ug @ phiin @
106106 np .hstack ((np .zeros ((self .nd , self .nh )), self .gamma , self .ud , - self .phii )))
107- self .S = (self .G .T . dot ( self .G ) + self .H .T . dot ( self .H ) ) / 2
107+ self .S = (self .G .T @ self .G + self .H .T @ self .H ) / 2
108108
109109 self .nx = self .nh + self .nk + self .nz
110110 self .n = self .ni + self .nh + self .nk + self .nz
@@ -122,7 +122,7 @@ def __init__(self, information, technology, preferences):
122122
123123 # === Construct output matrices for our economy using the solution to the LQ problem === #
124124
125- self .A0 = self .A - self .B . dot ( self .F )
125+ self .A0 = self .A - self .B @ self .F
126126
127127 self .Sh = self .A0 [0 :self .nh , 0 :self .nx ]
128128 self .Sk = self .A0 [self .nh :self .nh + self .nk , 0 :self .nx ]
@@ -131,12 +131,12 @@ def __init__(self, information, technology, preferences):
131131 self .Si = - self .F
132132 self .Sd = np .hstack ((np .zeros ((self .nd , self .nh + self .nk )), self .ud ))
133133 self .Sb = np .hstack ((np .zeros ((self .nb , self .nh + self .nk )), self .ub ))
134- self .Sc = uc . dot ( phiin ). dot (- self .phii . dot ( self .Si ) +
135- self .gamma . dot ( self .Sk1 ) + self .Sd )
136- self .Sg = ug . dot ( phiin ). dot (- self .phii . dot ( self .Si ) +
137- self .gamma . dot ( self .Sk1 ) + self .Sd )
138- self .Ss = self .llambda . dot ( np .hstack ((np .eye (self .nh ), np .zeros (
139- (self .nh , self .nk + self .nz ))))) + self .pih . dot ( self .Sc )
134+ self .Sc = uc @ phiin @ (- self .phii @ self .Si +
135+ self .gamma @ self .Sk1 + self .Sd )
136+ self .Sg = ug @ phiin @ (- self .phii @ self .Si +
137+ self .gamma @ self .Sk1 + self .Sd )
138+ self .Ss = self .llambda @ np .hstack ((np .eye (self .nh ), np .zeros (
139+ (self .nh , self .nk + self .nz )))) + self .pih @ self .Sc
140140
141141 # === Calculate eigenvalues of A0 === #
142142 self .A110 = self .A0 [0 :self .nh + self .nk , 0 :self .nh + self .nk ]
@@ -146,14 +146,14 @@ def __init__(self, information, technology, preferences):
146146 # === Construct matrices for Lagrange Multipliers === #
147147
148148 self .Mk = - 2 * self .beta .item () * (np .hstack ((np .zeros ((self .nk , self .nh )), np .eye (
149- self .nk ), np .zeros ((self .nk , self .nz ))))). dot ( self .P ). dot ( self .A0 )
149+ self .nk ), np .zeros ((self .nk , self .nz ))))) @ self .P @ self .A0
150150 self .Mh = - 2 * self .beta .item () * (np .hstack ((np .eye (self .nh ), np .zeros (
151- (self .nh , self .nk )), np .zeros ((self .nh , self .nz ))))). dot ( self .P ). dot ( self .A0 )
151+ (self .nh , self .nk )), np .zeros ((self .nh , self .nz ))))) @ self .P @ self .A0
152152 self .Ms = - (self .Sb - self .Ss )
153- self .Md = - (np .linalg .inv (np .vstack ((self .phic .T , self .phig .T ))). dot (
154- np .vstack ((self .thetah .T . dot ( self .Mh ) + self .pih .T . dot ( self .Ms ) , - self .Sg ) )))
155- self .Mc = - (self .thetah .T . dot ( self .Mh ) + self .pih .T . dot ( self .Ms ) )
156- self .Mi = - (self .thetak .T . dot ( self .Mk ) )
153+ self .Md = - (np .linalg .inv (np .vstack ((self .phic .T , self .phig .T ))) @
154+ np .vstack ((self .thetah .T @ self .Mh + self .pih .T @ self .Ms , - self .Sg )))
155+ self .Mc = - (self .thetah .T @ self .Mh + self .pih .T @ self .Ms )
156+ self .Mi = - (self .thetak .T @ self .Mk )
157157
158158 def compute_steadystate (self , nnc = 2 ):
159159 """
@@ -168,13 +168,13 @@ def compute_steadystate(self, nnc=2):
168168 zx = np .eye (self .A0 .shape [0 ])- self .A0
169169 self .zz = nullspace (zx )
170170 self .zz /= self .zz [nnc ]
171- self .css = self .Sc . dot ( self .zz )
172- self .sss = self .Ss . dot ( self .zz )
173- self .iss = self .Si . dot ( self .zz )
174- self .dss = self .Sd . dot ( self .zz )
175- self .bss = self .Sb . dot ( self .zz )
176- self .kss = self .Sk . dot ( self .zz )
177- self .hss = self .Sh . dot ( self .zz )
171+ self .css = self .Sc @ self .zz
172+ self .sss = self .Ss @ self .zz
173+ self .iss = self .Si @ self .zz
174+ self .dss = self .Sd @ self .zz
175+ self .bss = self .Sb @ self .zz
176+ self .kss = self .Sk @ self .zz
177+ self .hss = self .Sh @ self .zz
178178
179179 def compute_sequence (self , x0 , ts_length = None , Pay = None ):
180180 """
@@ -195,14 +195,14 @@ def compute_sequence(self, x0, ts_length=None, Pay=None):
195195 lq = LQ (self .Q , self .R , self .A , self .B ,
196196 self .C , N = self .W , beta = self .beta )
197197 xp , up , wp = lq .compute_sequence (x0 , ts_length )
198- self .h = self .Sh . dot ( xp )
199- self .k = self .Sk . dot ( xp )
200- self .i = self .Si . dot ( xp )
201- self .b = self .Sb . dot ( xp )
202- self .d = self .Sd . dot ( xp )
203- self .c = self .Sc . dot ( xp )
204- self .g = self .Sg . dot ( xp )
205- self .s = self .Ss . dot ( xp )
198+ self .h = self .Sh @ xp
199+ self .k = self .Sk @ xp
200+ self .i = self .Si @ xp
201+ self .b = self .Sb @ xp
202+ self .d = self .Sd @ xp
203+ self .c = self .Sc @ xp
204+ self .g = self .Sg @ xp
205+ self .s = self .Ss @ xp
206206
207207 # === Value of J-period risk-free bonds === #
208208 # === See p.145: Equation (7.11.2) === #
@@ -212,12 +212,12 @@ def compute_sequence(self, x0, ts_length=None, Pay=None):
212212 self .R2_Price = np .empty ((ts_length + 1 , 1 ))
213213 self .R5_Price = np .empty ((ts_length + 1 , 1 ))
214214 for i in range (ts_length + 1 ):
215- self .R1_Price [i , 0 ] = self .beta * e1 . dot ( self .Mc ). dot ( np .linalg .matrix_power (
216- self .A0 , 1 )). dot ( xp [:, i ]) / e1 . dot ( self .Mc ). dot ( xp [:, i ])
217- self .R2_Price [i , 0 ] = self .beta ** 2 * e1 . dot ( self .Mc ). dot (
218- np .linalg .matrix_power (self .A0 , 2 )). dot ( xp [:, i ]) / e1 . dot ( self .Mc ). dot ( xp [:, i ])
219- self .R5_Price [i , 0 ] = self .beta ** 5 * e1 . dot ( self .Mc ). dot (
220- np .linalg .matrix_power (self .A0 , 5 )). dot ( xp [:, i ]) / e1 . dot ( self .Mc ). dot ( xp [:, i ])
215+ self .R1_Price [i , 0 ] = self .beta * e1 @ self .Mc @ np .linalg .matrix_power (
216+ self .A0 , 1 ) @ xp [:, i ] / ( e1 @ self .Mc @ xp [:, i ])
217+ self .R2_Price [i , 0 ] = self .beta ** 2 * ( e1 @ self .Mc @
218+ np .linalg .matrix_power (self .A0 , 2 ) @ xp [:, i ]) / ( e1 @ self .Mc @ xp [:, i ])
219+ self .R5_Price [i , 0 ] = self .beta ** 5 * ( e1 @ self .Mc @
220+ np .linalg .matrix_power (self .A0 , 5 ) @ xp [:, i ]) / ( e1 @ self .Mc @ xp [:, i ])
221221
222222 # === Gross rates of return on 1-period risk-free bonds === #
223223 self .R1_Gross = 1 / self .R1_Price
@@ -231,20 +231,20 @@ def compute_sequence(self, x0, ts_length=None, Pay=None):
231231 # === Value of asset whose payout vector is Pay*xt === #
232232 # See p.145: Equation (7.11.1)
233233 if isinstance (Pay , np .ndarray ) == True :
234- self .Za = Pay .T . dot ( self .Mc )
234+ self .Za = Pay .T @ self .Mc
235235 self .Q = solve_discrete_lyapunov (
236236 self .A0 .T * self .beta ** 0.5 , self .Za )
237237 self .q = self .beta / (1 - self .beta ) * \
238- np .trace (self .C .T . dot ( self .Q ). dot ( self .C ) )
238+ np .trace (self .C .T @ self .Q @ self .C )
239239 self .Pay_Price = np .empty ((ts_length + 1 , 1 ))
240240 self .Pay_Gross = np .empty ((ts_length + 1 , 1 ))
241241 self .Pay_Gross [0 , 0 ] = np .nan
242242 for i in range (ts_length + 1 ):
243- self .Pay_Price [i , 0 ] = (xp [:, i ].T . dot ( self .Q ). dot (
244- xp [:, i ]) + self .q ) / e1 . dot ( self .Mc ). dot ( xp [:, i ])
243+ self .Pay_Price [i , 0 ] = (xp [:, i ].T @ self .Q @
244+ xp [:, i ] + self .q ) / ( e1 @ self .Mc @ xp [:, i ])
245245 for i in range (ts_length ):
246246 self .Pay_Gross [i + 1 , 0 ] = self .Pay_Price [i + 1 ,
247- 0 ] / (self .Pay_Price [i , 0 ] - Pay . dot ( xp [:, i ]) )
247+ 0 ] / (self .Pay_Price [i , 0 ] - Pay @ xp [:, i ])
248248 return
249249
250250 def irf (self , ts_length = 100 , shock = None ):
@@ -276,22 +276,22 @@ def irf(self, ts_length=100, shock=None):
276276 self .b_irf = np .empty ((ts_length , self .nb ))
277277
278278 for i in range (ts_length ):
279- self .c_irf [i , :] = self .Sc . dot (
280- np .linalg .matrix_power (self .A0 , i )). dot ( self .C ). dot ( shock ).T
281- self .s_irf [i , :] = self .Ss . dot (
282- np .linalg .matrix_power (self .A0 , i )). dot ( self .C ). dot ( shock ).T
283- self .i_irf [i , :] = self .Si . dot (
284- np .linalg .matrix_power (self .A0 , i )). dot ( self .C ). dot ( shock ).T
285- self .k_irf [i , :] = self .Sk . dot (
286- np .linalg .matrix_power (self .A0 , i )). dot ( self .C ). dot ( shock ).T
287- self .h_irf [i , :] = self .Sh . dot (
288- np .linalg .matrix_power (self .A0 , i )). dot ( self .C ). dot ( shock ).T
289- self .g_irf [i , :] = self .Sg . dot (
290- np .linalg .matrix_power (self .A0 , i )). dot ( self .C ). dot ( shock ).T
291- self .d_irf [i , :] = self .Sd . dot (
292- np .linalg .matrix_power (self .A0 , i )). dot ( self .C ). dot ( shock ).T
293- self .b_irf [i , :] = self .Sb . dot (
294- np .linalg .matrix_power (self .A0 , i )). dot ( self .C ). dot ( shock ).T
279+ self .c_irf [i , :] = ( self .Sc @
280+ np .linalg .matrix_power (self .A0 , i ) @ self .C @ shock ).T
281+ self .s_irf [i , :] = ( self .Ss @
282+ np .linalg .matrix_power (self .A0 , i ) @ self .C @ shock ).T
283+ self .i_irf [i , :] = ( self .Si @
284+ np .linalg .matrix_power (self .A0 , i ) @ self .C @ shock ).T
285+ self .k_irf [i , :] = ( self .Sk @
286+ np .linalg .matrix_power (self .A0 , i ) @ self .C @ shock ).T
287+ self .h_irf [i , :] = ( self .Sh @
288+ np .linalg .matrix_power (self .A0 , i ) @ self .C @ shock ).T
289+ self .g_irf [i , :] = ( self .Sg @
290+ np .linalg .matrix_power (self .A0 , i ) @ self .C @ shock ).T
291+ self .d_irf [i , :] = ( self .Sd @
292+ np .linalg .matrix_power (self .A0 , i ) @ self .C @ shock ).T
293+ self .b_irf [i , :] = ( self .Sb @
294+ np .linalg .matrix_power (self .A0 , i ) @ self .C @ shock ).T
295295
296296 return
297297
@@ -305,13 +305,13 @@ def canonical(self):
305305 Ac2 = np .hstack ((np .zeros ((self .nz , self .nh )), self .a22 ))
306306 Ac = np .vstack ((Ac1 , Ac2 ))
307307 Bc = np .vstack ((self .thetah , np .zeros ((self .nz , self .nc ))))
308- Rc1 = np .hstack ((self .llambda .T . dot ( self .llambda ) , -
309- self .llambda .T . dot ( self .ub ) ))
310- Rc2 = np .hstack ((- self .ub .T . dot ( self .llambda ) , self .ub .T . dot ( self .ub ) ))
308+ Rc1 = np .hstack ((self .llambda .T @ self .llambda , -
309+ self .llambda .T @ self .ub ))
310+ Rc2 = np .hstack ((- self .ub .T @ self .llambda , self .ub .T @ self .ub ))
311311 Rc = np .vstack ((Rc1 , Rc2 ))
312- Qc = self .pih .T . dot ( self .pih )
312+ Qc = self .pih .T @ self .pih
313313 Nc = np .hstack (
314- (self .pih .T . dot ( self .llambda ) , - self .pih .T . dot ( self .ub ) ))
314+ (self .pih .T @ self .llambda , - self .pih .T @ self .ub ))
315315
316316 lq_aux = LQ (Qc , Rc , Ac , Bc , N = Nc , beta = self .beta )
317317
@@ -320,9 +320,9 @@ def canonical(self):
320320 self .F_b = F1 [:, 0 :self .nh ]
321321 self .F_f = F1 [:, self .nh :]
322322
323- self .pihat = np .linalg .cholesky (self .pih .T . dot (
324- self .pih ) + self .beta . dot ( self .thetah .T ). dot ( P1 [0 :self .nh , 0 :self .nh ]). dot ( self .thetah )).T
325- self .llambdahat = self .pihat . dot ( self .F_b )
326- self .ubhat = - self .pihat . dot ( self .F_f )
323+ self .pihat = np .linalg .cholesky (( self .pih .T @
324+ self .pih ) + ( self .beta @ self .thetah .T @ P1 [0 :self .nh , 0 :self .nh ] @ self .thetah )).T
325+ self .llambdahat = self .pihat @ self .F_b
326+ self .ubhat = - self .pihat @ self .F_f
327327
328328 return
0 commit comments