Source code for climapan_lab.src.governments.Goverment

# Government
import ambr as am
import numpy as np
import pandas as pd


[docs] class Government(am.Agent): """A government agent"""
[docs] def setup(self): self.taxRate = self.p.taxRate self.expenditure = 0 self.totalTaxes = 0 self.fiscal = 0 self.tax = 0 self.budget = 0 self.transfer = 0 self.bond = 0 self.bond_list = [0] self.iB = self.p.iB
[docs] def checkConsistency(self): return self.expenditure == self.totalTaxes
[docs] def agentAssign(self): # short out agents without loanDemand > 0 # updateConsumerList = self.model.consumer_agents.select(self.model.consumer_agents.newCreditAsked > 0) updateCSFList = self.model.csfirm_agents.select( self.model.csfirm_agents.bankrupt == True ) updateCPList = self.model.cpfirm_agents.select( self.model.cpfirm_agents.bankrupt == True )
# self.orderedAgentsInterestsRaw = np.argsort(np.concatenate([updateCSFList.defaultProb, updateCPList.defaultProb, self.model.greenEFirm.defaultProb, self.model.brownEFirm.defaultProb])) # self.orderedAgentsInterests = np.concatenate([updateCSFList.id, updateCPList.id, self.model.greenEFirm.id, self.model.brownEFirm.id])[self.orderedAgentsInterestsRaw] # def _calculate_wealth(self, agent): # if agent.getEmploymentState(): # self.numberOfEmployed += 1 # if self.numberOfUnemployed > 0: # self.numberOfUnemployed -= 1 # else: # self.numberOfUnemployed += 1 # if self.numberOfEmployed > 0: # self.numberOfEmployed -= 1 # wealth = agent.getWealth() def _calculate_firm_bailout(self, agent): """ This internal function of the Bank class is used to represent the demands between firm agents and the bank --- Args: agent: The target firm agent --- Returns: """ if agent.getNetWorth() < 0: self.expenditure -= np.sum(agent.getNetWorth()) ### Direct Transfers to Households:
[docs] def transfer_expenditure(self, value): self.transfer += value
### put the government calculation here (unemployment dole, tax)
[docs] def E_Gov(self): unemployed_count = np.sum(self.model.aliveConsumers.getUnemploymentState() == 1) self.expenditure = ( self.p.unemploymentDole * float(unemployed_count) + self.fiscal ) return self.expenditure
[docs] def UE_Gov(self): unemployed_count = np.sum(self.model.aliveConsumers.getUnemploymentState() == 1) self.ue_gov = self.p.unemploymentDole * float(unemployed_count) return self.ue_gov
[docs] def update_budget(self, value): self.budget += value
# budget balance condition: ### Government issue bond to cover any deficit:
[docs] def issue_bond(self): if self.tax >= self.expenditure + (1 + self.iB) * np.sum(self.bond_list): self.bond = 0 else: self.bond = ( self.expenditure + (1 + self.iB) * np.sum(self.bond_list) - self.tax )