Source code for policy_modules.fpl

#!/usr/bin/env python
from utility_modules.get_parameters import get_params
from policy_modules.calculate_regression import FplRegression

import pandas as pd
import numpy as np
[docs]class Fpl: # Borg singleton config object __shared_state = {} def __init__(self, policy_params = None, sys_params = None): # implement the borg pattern self.__dict__ = self.__shared_state if policy_params != None: #read in data gid_mcaid = policy_params['mcaid_elig'] gid_fpl = policy_params['fpl'] max_year = int(sys_params['max_year']) #read in fpl data self.fpl = get_params(gid_fpl) self.regression_model= FplRegression(policy_params) #make a dataframe for prediction if (max(self.fpl.year) < max_year): future = pd.DataFrame(range(max(self.fpl.year)+1, max_year+1)) future.columns = ['year'] #predict new years and return data future['base'] = self.regression_model.calculate_regression_line(self.fpl.year, self.fpl.base, future[['year']]) future['inc'] = self.regression_model.calculate_regression_line(self.fpl.year, self.fpl.inc, future[['year']]) self.fpl = self.fpl.append(future)
[docs] def set_year(self, curr_year): """ return slice of pertinant year allows this to be reset at begining of each simulation year """ if curr_year not in self.fpl.year.values: return else: self.base = self.fpl[self.fpl.year == curr_year][['base']].values self.inc = self.fpl[self.fpl.year == curr_year][['inc']].values
[docs] def calculate_fpl(self, df): """ calculate fpl based off of income note: data specified from set_year method curr_data pd.DataFrame of current year fpl data income: pd.series of income family_size: pd.series of family_size """ income = df['fam_income'] family_size = df['family_size'] base = np.repeat(self.base, df.shape[0]) inc = np.repeat(self.inc, df.shape[0]) fpl = income/(base + (family_size-1)*inc) * 100 return(fpl)
[docs] def calculate_ind_fpl(self, df): """ calculate individual_fpl based on individual_Income note: data specified from set_year method curr_data pd.DataFrame of current year fpl data ind_income: pd.series of ind_income family_size: always 1 """ income = df['ind_income'] family_size = 1 base = np.repeat(self.base, df.shape[0]) inc = np.repeat(self.inc, df.shape[0]) ind_fpl = income / (base + (family_size - 1) * inc) * 100 return (ind_fpl)
# from Ben -- calculating the income threshold for a FPL value
[docs] def calculate_income(self, fpl, family_size, df): """ calculate income based off of fpl note: data specified from set_year method curr_data pd.DataFrame of current year fpl data fpl: pd.series of fpl family_size: pd.series of family_size """ base = np.repeat(self.base, df.shape[0]) inc = np.repeat(self.inc, df.shape[0]) income = fpl*((base + (family_size-1)*inc) / 100) return(income)