Skip to content

Commit c3a568c

Browse files
committed
format
1 parent f2a32e7 commit c3a568c

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

iot/inverse_optimal_tax.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,9 @@ def sw_weights(self):
383383
+ ((self.theta_z * self.eti * self.mtr) / (1 - self.mtr))
384384
+ ((self.eti * self.z * self.mtr_prime) / (1 - self.mtr) ** 2)
385385
)
386-
integral = np.trapz(g_z * self.f, self.z) # renormalize to integrate to 1
386+
integral = np.trapz(
387+
g_z * self.f, self.z
388+
) # renormalize to integrate to 1
387389
g_z = g_z / integral
388390

389391
# use Lockwood and Weinzierl formula, which should be equivalent but using numerical differentiation
@@ -402,7 +404,7 @@ def sw_weights(self):
402404
return g_z, g_z_numerical
403405

404406

405-
def find_eti(iot, g_z = None, eti_0 = 0.25):
407+
def find_eti(iot, g_z=None, eti_0=0.25):
406408
"""
407409
This function solves for the ETI that would result in the
408410
policy represented via MTRs in IOT being consistent with the
@@ -420,12 +422,16 @@ def find_eti(iot, g_z = None, eti_0 = 0.25):
420422
Returns:
421423
eti_beliefs (array-like): vector of ETI beliefs over z
422424
"""
423-
425+
424426
if g_z is None:
425427
g_z = iot.g_z
426-
428+
427429
# we solve an ODE of the form f'(z) + P(z)f(z) = Q(z)
428-
P_z = 1/iot.z + iot.f_prime/iot.f + iot.mtr_prime/(iot.mtr * (1-iot.mtr))
430+
P_z = (
431+
1 / iot.z
432+
+ iot.f_prime / iot.f
433+
+ iot.mtr_prime / (iot.mtr * (1 - iot.mtr))
434+
)
429435
# integrating factor for ODE: mu(z) * f'(z) + mu(z) * P(z) * f(z) = mu(z) * Q(z)
430436
mu_z = np.exp(np.cumsum(P_z))
431437
Q_z = (g_z - 1) * (1 - iot.mtr) / (iot.mtr * iot.z)

iot/iot_user.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -226,14 +226,12 @@ def JJZFig4(self, policy="Current Law", var="g_z", upper_bound=500_000):
226226
g_weights = df.g_z_numerical
227227

228228
# g1 with mtr_prime = 0
229-
g1 = (
230-
((df.theta_z * self.iot[k].eti * df.mtr) / (1 - df.mtr))
231-
+ ((self.iot[k].eti * df.z * 0) / (1 - df.mtr) ** 2)
229+
g1 = ((df.theta_z * self.iot[k].eti * df.mtr) / (1 - df.mtr)) + (
230+
(self.iot[k].eti * df.z * 0) / (1 - df.mtr) ** 2
232231
)
233232
# g2 with theta_z = 0
234-
g2 = (
235-
((0 * self.iot[k].eti * df.mtr) / (1 - df.mtr))
236-
+ ((self.iot[k].eti * df.z * df.mtr_prime) / (1 - df.mtr) ** 2)
233+
g2 = ((0 * self.iot[k].eti * df.mtr) / (1 - df.mtr)) + (
234+
(self.iot[k].eti * df.z * df.mtr_prime) / (1 - df.mtr) ** 2
237235
)
238236
integral = np.trapz(g1, df.z)
239237
# g1 = g1 / integral
@@ -244,7 +242,10 @@ def JJZFig4(self, policy="Current Law", var="g_z", upper_bound=500_000):
244242
self.income_measure: df.z,
245243
"Overall Weight": g_weights,
246244
"Tax Base Elasticity": 1 + g1,
247-
"Nonconstant MTRs": 1 + g1 + g2 + np.abs(g1) * (np.sign(g1) != np.sign(g2))
245+
"Nonconstant MTRs": 1
246+
+ g1
247+
+ g2
248+
+ np.abs(g1) * (np.sign(g1) != np.sign(g2)),
248249
}
249250
)
250251

0 commit comments

Comments
 (0)