Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OG-USA Open Economy (based off PR #710) #714

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
5 changes: 3 additions & 2 deletions deploy/taxbrain_server/celery_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,15 @@ def elasticity_gdp_task_async(year, user_mods, first_budget_year, elast_params):


@celery_app.task
def ogusa_async(user_mods, ogusa_params, guid):
def ogusa_async(start_year, user_mods, ogusa_params, guid):
print("user mods: ", user_mods)
user_mods = convert_int_key(user_mods)
user_reform = {'policy': user_mods}
for key in EXPECTED_KEYS:
if key not in user_reform:
user_reform[key] = {}
diff_data = run_ogusa.run_micro_macro(reform=user_reform,
diff_data = run_ogusa.run_micro_macro(start_year=start_year,
reform=user_reform,
user_params=ogusa_params,
guid=guid)

Expand Down
8 changes: 7 additions & 1 deletion deploy/taxbrain_server/flask_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,14 +179,20 @@ def example():

@app.route('/ogusa_start_job', methods=['POST'])
def ogusa_start_job():
start_year = int(request.form["start_year"])
user_mods = json.loads(request.form['user_mods'])
ogusa_params = json.loads(request.form['ogusa_params'])

user_mods = {int(k): v for k, v in user_mods.iteritems()}

with ticket_lock_context():
guid = uuid.uuid1().hex
job = ogusa_async.delay(user_mods=user_mods, ogusa_params=ogusa_params, guid=guid)
job = ogusa_async.delay(
start_year=start_year,
user_mods=user_mods,
ogusa_params=ogusa_params,
guid=guid
)
RUNNING_JOBS[job.id] = job
print('job_id', job)
print('GUID IS ', guid)
Expand Down
52 changes: 32 additions & 20 deletions deploy/taxbrain_server/run_ogusa.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,16 @@
from ogusa.scripts.execute import runner


def run_micro_macro(reform, user_params, guid):
def run_micro_macro(start_year, reform, user_params, guid):

small_open = user_params if bool(user_params.get("small_open")) else False
budget_balance = bool(user_params.get("budget_balance", False))

start_time = time.time()

REFORM_DIR = "./OUTPUT_REFORM_" + guid
BASELINE_DIR = "./OUTPUT_BASELINE_" + guid

# Add start year from reform to user parameters
if isinstance(reform, tuple):
start_year = sorted(reform[0].keys())[0]
else:
start_year = sorted(reform.keys())[0]
user_params['start_year'] = start_year

with open("log_{}.log".format(guid), 'w') as f:
f.write("guid: {}\n".format(guid))
f.write("reform: {}\n".format(reform))
Expand All @@ -37,12 +33,15 @@ def run_micro_macro(reform, user_params, guid):
Run baseline
------------------------------------------------------------------------
'''

user_params["start_year"] = start_year
output_base = BASELINE_DIR
kwargs={'output_base':output_base, 'baseline_dir':BASELINE_DIR,
'test':False, 'time_path':True, 'baseline':True,
'analytical_mtrs':False, 'age_specific':False,
'user_params':user_params,'guid':guid,
'run_micro':True, 'small_open': False, 'budget_balance':False, 'baseline_spending':False}
'run_micro':True, 'small_open': small_open, 'budget_balance': budget_balance,
'baseline_spending':False}
#p2 = Process(target=runner, kwargs=kwargs)
#p2.start()
runner(**kwargs)
Expand All @@ -58,7 +57,8 @@ def run_micro_macro(reform, user_params, guid):
'test':False, 'time_path':True, 'baseline':False,
'analytical_mtrs':False, 'age_specific':False,
'user_params':user_params,'guid':guid,
'run_micro':True, 'small_open': False, 'budget_balance':False, 'baseline_spending':False}
'run_micro':True, 'small_open': small_open, 'budget_balance': budget_balance,
'baseline_spending':False}
#p1 = Process(target=runner, kwargs=kwargs)
#p1.start()
runner(**kwargs)
Expand All @@ -75,13 +75,25 @@ def run_micro_macro(reform, user_params, guid):
if __name__ == "__main__":

reform = {
2017: {
'_II_rt1': [.09],
'_II_rt2': [.135],
'_II_rt3': [.225],
'_II_rt4': [.252],
'_II_rt5': [.297],
'_II_rt6': [.315],
'_II_rt7': [0.3564],
}, }
run_micro_macro(reform=reform, user_params={'frisch': 0.44}, guid='abc')
u'growdiff_response': {},
u'consumption': {},
u'growdiff_baseline': {},
u'behavior': {},
u'policy': {
2017: {
u'_II_no_em_nu18': [False],
u'_NIIT_PT_taxed': [False],
u'_FICA_ss_trt': [0.1],
u'_ID_BenefitCap_Switch': [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]],
u'_ALD_InvInc_ec_base_RyanBrady': [False],
u'_EITC_indiv': [False],
u'_ID_BenefitSurtax_Switch': [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]],
u'_CTC_new_refund_limited': [False],
u'_CG_nodiff': [False]
}
},
u'gdp_elasticity': {}
}
user_params = {u'g_y_annual': 0.04, u'frisch': 0.3}

run_micro_macro(reform=reform, user_params=user_params, guid='abc')
5 changes: 0 additions & 5 deletions templates/dynamic/dynamic_input_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,6 @@ <h2>Tax-Calculator Code Build</h2>
<div class="sidebar-button">
<a href="#" ></a>
<input id="tax-submit" class="btn btn-secondary btn-block btn-animate {{ is_disabled }}" {{ is_disabled }} type="submit" value="Start Dynamic Simulation!">
<div class="construction text-center">
<div class="progress progress-striped" style="width: 100%">
<div class="progress-bar active progress-bar-custom" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div>
</div>
</div>
</div>
</div> <!-- sidebar -->
</div>
Expand Down
8 changes: 8 additions & 0 deletions templates/dynamic/includes/params/inputs/dynamic.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ <h1>Macroeconomic Parameters</h1>
{% endblock %}
</div>

<h2>Open Economy Assumptions</h2>
{% include 'taxbrain/includes/params/inputs/param.html' with param=params.small_open %}
{% include 'taxbrain/includes/params/inputs/param.html' with param=params.world_int_rate %}

<h2>Budget Closure Parameters</h2>
{% include 'taxbrain/includes/params/inputs/param.html' with param=params.budget_balance %}
{% include 'taxbrain/includes/params/inputs/param.html' with param=params.debt_ratio_ss %}

<h2>Macroeconomic Parameters</h2>
{% include 'taxbrain/includes/params/inputs/param.html' with param=params.g_y_annual %}
{% include 'taxbrain/includes/params/inputs/param.html' with param=params.frisch %}
Expand Down
9 changes: 1 addition & 8 deletions templates/dynamic/landing.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,21 +72,14 @@ <h1>Choose a Dynamic Simulation Type</h1>
{% flatblock "dynamic_behavioral_blurb" %}
</td>
</tr>
{% if include_ogusa %}
<tr padding="15px">
<td>
<a href="/dynamic/ogusa/{{pk}}/?start_year={{start_year}}" class="text-white btn btn-secondary disabled">Overlapping Generations Simulation</a>
<a href="/dynamic/ogusa/{{pk}}/?start_year={{start_year}}" class="text-white btn btn-secondary">Overlapping Generations Simulation</a>
</td>
<td>
<div class="construction">
<div class="progress progress-striped" style="min-width: 400px; width: 100%">
<div class="progress-bar active progress-bar-custom" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div>
</div>
</div>
{% flatblock "dynamic_olg_blurb" %}
</td>
</tr>
{% endif %}
<tr padding="15px">
<td padding-bottom="1em">
<a href="/dynamic/macro/{{pk}}/?start_year={{start_year}}" class="text-white btn btn-secondary">Macro Elasticities Simulation</a>
Expand Down
27 changes: 2 additions & 25 deletions webapp/apps/dynamic/compute.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import taxcalc
from ..taxbrain.compute import DropqCompute, MockCompute
from .models import OGUSAWorkerNodesCounter
from .helpers import filter_ogusa_only
from ..constants import START_YEAR

dqversion_info = taxcalc._version.get_versions()
Expand All @@ -33,27 +32,8 @@ def remote_register_job(self, theurl, data, timeout=TIMEOUT_IN_SECONDS):
response = requests.post(theurl, data=data, timeout=timeout)
return response

def submit_json_ogusa_calculation(self, ogusa_mods, first_budget_year,
microsim_data, pack_up_user_mods):
return self.submit_ogusa_calculation(ogusa_mods, first_budget_year,
microsim_data, pack_up_user_mods=False)

def submit_ogusa_calculation(self, ogusa_mods, first_budget_year, microsim_data,
pack_up_user_mods=True):

print "mods is ", ogusa_mods
ogusa_params = filter_ogusa_only(ogusa_mods)
data = {}
if pack_up_user_mods:
microsim_params = package_up_vars(microsim_data, first_budget_year)
microsim_params = {first_budget_year:microsim_params}
print "microsim data is", microsim_params
else:
data['taxio_format'] = True
data['first_budget_year'] = first_budget_year
microsim_params = microsim_data


def submit_ogusa_calculation(self, data):
print "mods is ", data
print "submit dynamic work"

hostnames = OGUSA_WORKERS
Expand All @@ -62,9 +42,6 @@ def submit_ogusa_calculation(self, ogusa_mods, first_budget_year, microsim_data,
'callback': "http://{}/dynamic/dynamic_finished".format(CALLBACK_HOSTNAME),
}

data['ogusa_params'] = json.dumps(ogusa_params)
data['user_mods'] = json.dumps(microsim_params)
data['first_year'] = first_budget_year
job_ids = []
guids = []

Expand Down
10 changes: 8 additions & 2 deletions webapp/apps/dynamic/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,10 @@ class Meta:
exclude = ['creation_date']
widgets = {}
labels = {}
boolean_fields = [
"small_open",
"budget_balance"
]
for param in OGUSA_DEFAULT_PARAMS.values():
for field in param.col_fields:
attrs = {
Expand All @@ -584,8 +588,10 @@ class Meta:

if param.coming_soon:
attrs['disabled'] = True
attrs['checked'] = False
widgets[field.id] = forms.CheckboxInput(attrs=attrs, check_test=bool_like)

if param.tc_id in boolean_fields:
checkbox = forms.CheckboxInput(attrs=attrs, check_test=bool_like)
widgets[field.id] = checkbox
else:
widgets[field.id] = forms.TextInput(attrs=attrs)

Expand Down
2 changes: 1 addition & 1 deletion webapp/apps/dynamic/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ def filter_ogusa_only(user_values):
print "Removing ", k, v
del user_values[k]
else:
user_values[k] = float(v)
user_values[k] = float(v[0]) if isinstance(v, list) else float(v)

return user_values

Expand Down
25 changes: 25 additions & 0 deletions webapp/apps/dynamic/migrations/0016_auto_20171026_1617.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations
import webapp.apps.taxbrain.models


class Migration(migrations.Migration):

dependencies = [
('dynamic', '0015_auto_20170918_1255'),
]

operations = [
migrations.AddField(
model_name='dynamicsaveinputs',
name='small_open',
field=models.NullBooleanField(default=None),
),
migrations.AddField(
model_name='dynamicsaveinputs',
name='world_int_rate',
field=webapp.apps.taxbrain.models.CommaSeparatedField(default=None, max_length=200, null=True, blank=True),
),
]
25 changes: 25 additions & 0 deletions webapp/apps/dynamic/migrations/0017_auto_20171026_2319.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations
import webapp.apps.taxbrain.models


class Migration(migrations.Migration):

dependencies = [
('dynamic', '0016_auto_20171026_1617'),
]

operations = [
migrations.AddField(
model_name='dynamicsaveinputs',
name='budget_balance',
field=models.NullBooleanField(default=None),
),
migrations.AddField(
model_name='dynamicsaveinputs',
name='debt_ratio_ss',
field=webapp.apps.taxbrain.models.CommaSeparatedField(default=None, max_length=200, null=True, blank=True),
),
]
6 changes: 5 additions & 1 deletion webapp/apps/dynamic/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@ class DynamicSaveInputs(models.Model):
"""
This model contains all the parameters for the dynamic tax model and the tax
result.
"""

"""
small_open = models.NullBooleanField(default=None, blank=True, null=True)
world_int_rate = CommaSeparatedField(default=None, null=True, blank=True)
budget_balance = models.NullBooleanField(default=None, blank=True, null=True)
debt_ratio_ss = CommaSeparatedField(default=None, null=True, blank=True)

# Parameters used for the dynamic model
g_y_annual = CommaSeparatedField(default=None, null=True, blank=True)
Expand Down
Loading