def central_bank__getattr(self, args): import os from src.bank import Bank from src.central_bank import CentralBank from src.household import Household from src.firm import Firm from src.environment import Environment # needed for the bankDirectory text = "This test checks central_bank.getattr \n" self.print_info(text) # # INITIALIZATION # environment_directory = str(args[0]) identifier = str(args[1]) log_directory = str(args[2]) # Configure logging parameters so we get output while the program runs logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', filename=log_directory + identifier + ".log", level=logging.INFO) logging.info('START logging for test central_bank__getattr in run: %s', environment_directory + identifier + ".xml") # Construct bank filename environment = Environment(environment_directory, identifier) # get the bank_directory from the environment bank_directory = environment.bank_directory # and loop over all banks in the directory listing = os.listdir(bank_directory) bank_filename = bank_directory + listing[0] # generate a household household = Household() household.identifier = "test_household" environment.households.append(household) # generate a firm firm = Firm() firm.identifier = "test_firm" environment.firms.append(firm) # generate a bank bank = Bank() bank.identifier = "test_bank" environment.banks.append(bank) # generate a central bank cb = CentralBank() cb.identifier = "test_central_bank" environment.central_bank.append(cb) # # TESTING # print('Accessing rates through bank.parameters["interest_rate_cb_loans"] :') print(cb.parameters["interest_rate_cb_loans"]) print("Accessing rates through bank.interest_rate_cb_loans:") print(cb.interest_rate_cb_loans)
def central_bank__str(self, args): import os from src.bank import Bank from src.central_bank import CentralBank from src.household import Household from src.firm import Firm from src.environment import Environment # needed for the bankDirectory text = "This test checks central_bank.str \n" self.print_info(text) # # INITIALIZATION # environment_directory = str(args[0]) identifier = str(args[1]) log_directory = str(args[2]) # Configure logging parameters so we get output while the program runs logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', filename=log_directory + identifier + ".log", level=logging.INFO) logging.info('START logging for test central_bank__str in run: %s', environment_directory + identifier + ".xml") # Construct bank filename environment = Environment(environment_directory, identifier) # get the bank_directory from the environment bank_directory = environment.bank_directory # and loop over all banks in the directory listing = os.listdir(bank_directory) bank_filename = bank_directory + listing[0] # generate a household household = Household() household.identifier = "test_household" environment.households.append(household) # generate a firm firm = Firm() firm.identifier = "test_firm" environment.firms.append(firm) # generate a bank bank = Bank() bank.identifier = "test_bank" environment.banks.append(bank) # generate a central bank cb = CentralBank() cb.identifier = "test_central_bank" environment.central_bank.append(cb) # # TESTING # print(cb.__str__())
def initialize_central_bank_from_files(self, central_bank_directory): from src.central_bank import CentralBank # this routine is called more than once, so we have to reset the list of households each time while len(self.central_bank) > 0: self.central_bank.pop() # we list all the files in the specified directory listing = os.listdir(central_bank_directory) # and check if the number of files is in line with the parameters if (len(listing) != 1): logging.error(" ERROR: number of configuration files in %s (=%s) does not match one central bank", central_bank_directory, str(len(listing))) # we read the files sequentially for infile in listing: cb = CentralBank() cb.get_parameters_from_file(central_bank_directory + infile, self) # and read parameters to the firms, only to add them to the environment self.central_bank.append(cb)
def central_bank__clear_accounts(self, args): import os from src.bank import Bank from src.central_bank import CentralBank from src.household import Household from src.firm import Firm from src.environment import Environment # needed for the bankDirectory text = "This test checks central_bank.clear_accounts \n" text = text + " Checking if after the clear_accounts the total amount \n" text = text + " of transactions in zero. \n" self.print_info(text) # # INITIALIZATION # environment_directory = str(args[0]) identifier = str(args[1]) log_directory = str(args[2]) # Configure logging parameters so we get output while the program runs logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', filename=log_directory + identifier + ".log", level=logging.INFO) logging.info( 'START logging for test central_bank__clear_accounts in run: %s', environment_directory + identifier + ".xml") # Construct bank filename environment = Environment(environment_directory, identifier) # get the bank_directory from the environment bank_directory = environment.bank_directory # and loop over all banks in the directory listing = os.listdir(bank_directory) bank_filename = bank_directory + listing[0] # generate a household household = Household() household.identifier = "test_household" environment.households.append(household) # generate a firm firm = Firm() firm.identifier = "test_firm" environment.firms.append(firm) # generate a bank bank = Bank() bank.identifier = "test_bank" environment.banks.append(bank) # generate a central bank cb = CentralBank() cb.identifier = "test_central_bank" environment.central_bank.append(cb) # # TESTING # account = 0.0 tranx = 0 for transaction in cb.accounts: account = account + transaction.amount tranx = tranx + 1 print(tranx) print(account) cb.add_transaction("deposits", "", "test_household", cb.identifier, 0.0, 0.09, 0, -1, environment) cb.add_transaction("deposits", "", "test_household", cb.identifier, 20.0, 0.09, 0, -1, environment) account = 0.0 tranx = 0 for transaction in cb.accounts: account = account + transaction.amount tranx = tranx + 1 print(tranx) print(account) cb.clear_accounts() account = 0.0 tranx = 0 for transaction in cb.accounts: account = account + transaction.amount tranx = tranx + 1 print(tranx) print(account)
def central_bank__add_transaction(self, args): import os from src.bank import Bank from src.central_bank import CentralBank from src.household import Household from src.firm import Firm from src.environment import Environment # needed for the bankDirectory text = "This test checks central_bank.add_transaction \n" text = text + " The most simple way to test this function is to assign an new \n" text = text + " transaction to central bank. Therefore, lets just assign the following \n" text = text + " transaction and check whether it has been added: \n" text = text + ' (type = "deposits", fromID = -1, toID = bank.identifier, amount = 10, \n' text = text + " interest = 0.09, maturity = 0, timeOfDefault = -1) \n" self.print_info(text) # # INITIALIZATION # environment_directory = str(args[0]) identifier = str(args[1]) log_directory = str(args[2]) # Configure logging parameters so we get output while the program runs logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', filename=log_directory + identifier + ".log", level=logging.INFO) logging.info( 'START logging for test central_bank__add_transaction in run: %s', environment_directory + identifier + ".xml") # Construct bank filename environment = Environment(environment_directory, identifier) # get the bank_directory from the environment bank_directory = environment.bank_directory # and loop over all banks in the directory listing = os.listdir(bank_directory) bank_filename = bank_directory + listing[0] # generate a household household = Household() household.identifier = "test_household" environment.households.append(household) # generate a firm firm = Firm() firm.identifier = "test_firm" environment.firms.append(firm) # generate a bank bank = Bank() bank.identifier = "test_bank" environment.banks.append(bank) # generate a central bank cb = CentralBank() cb.identifier = "test_central_bank" environment.central_bank.append(cb) # # TESTING # print(cb) print("Adding new transaction: \n") print(environment.get_agent_by_id(cb.identifier)) cb.add_transaction("deposits", "", "test_household", cb.identifier, 10, 0.09, 0, -1, environment) # environment.households[0:1][0] is only for testing purposes DO NOT USE IN PRODUCTION # what it does is is takes the first household in environment, but if there are no # households (which happens in testing) it doesn't break down print(cb)
def central_bank__get_account_num_transactions(self, args): import os from src.bank import Bank from src.central_bank import CentralBank from src.household import Household from src.firm import Firm from src.environment import Environment # needed for the bankDirectory text = "This test checks central_bank.get_account_num_transactions \n" text = text + " The purpose of this method is to count the numbers of transaction for \n" text = text + " accounts banks hold. Our central bank has 3 transactions by default. \n" self.print_info(text) # # INITIALIZATION # environment_directory = str(args[0]) identifier = str(args[1]) log_directory = str(args[2]) # Configure logging parameters so we get output while the program runs logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', filename=log_directory + identifier + ".log", level=logging.INFO) logging.info( 'START logging for test central_bank__get_account_num_transactions in run: %s', environment_directory + identifier + ".xml") # Construct bank filename environment = Environment(environment_directory, identifier) # get the bank_directory from the environment bank_directory = environment.bank_directory # and loop over all banks in the directory listing = os.listdir(bank_directory) bank_filename = bank_directory + listing[0] # generate a household household = Household() household.identifier = "test_household" environment.households.append(household) # generate a firm firm = Firm() firm.identifier = "test_firm" environment.firms.append(firm) # generate a bank bank = Bank() bank.identifier = "test_bank" environment.banks.append(bank) # generate a central bank cb = CentralBank() cb.identifier = "test_central_bank" environment.central_bank.append(cb) # # TESTING # environment.new_transaction("deposits", "", cb.identifier, "test_firm", 100, 0.0, 0, -1) environment.new_transaction("cash", "", cb.identifier, "test_firm", 200, 0.0, 0, -1) environment.new_transaction("loans", "", cb.identifier, "test_firm", 300, 0.0, 0, -1) num_transactions = 0.0 # counting all types in account together print(cb) # and checking if the number of transaction # is increasing by one for type in ["deposits", "cash", "loans"]: if type == "deposits": num_transactions = num_transactions + cb.get_account_num_transactions( type) print("D = " + str(num_transactions)) if type == "cash": num_transactions = num_transactions + cb.get_account_num_transactions( type) print("D+M = " + str(num_transactions)) if type == "loans": num_transactions = num_transactions + cb.get_account_num_transactions( type) print("D+M+L = " + str(num_transactions))
def central_bank__clear_accounts(self, args): import os from src.bank import Bank from src.central_bank import CentralBank from src.household import Household from src.firm import Firm from src.environment import Environment # needed for the bankDirectory text = "This test checks central_bank.clear_accounts \n" text = text + " Checking if after the clear_accounts the total amount \n" text = text + " of transactions in zero. \n" self.print_info(text) # # INITIALIZATION # environment_directory = str(args[0]) identifier = str(args[1]) log_directory = str(args[2]) # Configure logging parameters so we get output while the program runs logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', filename=log_directory + identifier + ".log", level=logging.INFO) logging.info('START logging for test central_bank__clear_accounts in run: %s', environment_directory + identifier + ".xml") # Construct bank filename environment = Environment(environment_directory, identifier) # get the bank_directory from the environment bank_directory = environment.bank_directory # and loop over all banks in the directory listing = os.listdir(bank_directory) bank_filename = bank_directory + listing[0] # generate a household household = Household() household.identifier = "test_household" environment.households.append(household) # generate a firm firm = Firm() firm.identifier = "test_firm" environment.firms.append(firm) # generate a bank bank = Bank() bank.identifier = "test_bank" environment.banks.append(bank) # generate a central bank cb = CentralBank() cb.identifier = "test_central_bank" environment.central_bank.append(cb) # # TESTING # account = 0.0 tranx = 0 for transaction in cb.accounts: account = account + transaction.amount tranx = tranx + 1 print(tranx) print(account) cb.add_transaction("deposits", "", "test_household", cb.identifier, 0.0, 0.09, 0, -1, environment) cb.add_transaction("deposits", "", "test_household", cb.identifier, 20.0, 0.09, 0, -1, environment) account = 0.0 tranx = 0 for transaction in cb.accounts: account = account + transaction.amount tranx = tranx + 1 print(tranx) print(account) cb.clear_accounts() account = 0.0 tranx = 0 for transaction in cb.accounts: account = account + transaction.amount tranx = tranx + 1 print(tranx) print(account)
def central_bank__add_transaction(self, args): import os from src.bank import Bank from src.central_bank import CentralBank from src.household import Household from src.firm import Firm from src.environment import Environment # needed for the bankDirectory text = "This test checks central_bank.add_transaction \n" text = text + " The most simple way to test this function is to assign an new \n" text = text + " transaction to central bank. Therefore, lets just assign the following \n" text = text + " transaction and check whether it has been added: \n" text = text + ' (type = "deposits", fromID = -1, toID = bank.identifier, amount = 10, \n' text = text + " interest = 0.09, maturity = 0, timeOfDefault = -1) \n" self.print_info(text) # # INITIALIZATION # environment_directory = str(args[0]) identifier = str(args[1]) log_directory = str(args[2]) # Configure logging parameters so we get output while the program runs logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', filename=log_directory + identifier + ".log", level=logging.INFO) logging.info('START logging for test central_bank__add_transaction in run: %s', environment_directory + identifier + ".xml") # Construct bank filename environment = Environment(environment_directory, identifier) # get the bank_directory from the environment bank_directory = environment.bank_directory # and loop over all banks in the directory listing = os.listdir(bank_directory) bank_filename = bank_directory + listing[0] # generate a household household = Household() household.identifier = "test_household" environment.households.append(household) # generate a firm firm = Firm() firm.identifier = "test_firm" environment.firms.append(firm) # generate a bank bank = Bank() bank.identifier = "test_bank" environment.banks.append(bank) # generate a central bank cb = CentralBank() cb.identifier = "test_central_bank" environment.central_bank.append(cb) # # TESTING # print(cb) print("Adding new transaction: \n") print(environment.get_agent_by_id(cb.identifier)) cb.add_transaction("deposits", "", "test_household", cb.identifier, 10, 0.09, 0, -1, environment) # environment.households[0:1][0] is only for testing purposes DO NOT USE IN PRODUCTION # what it does is is takes the first household in environment, but if there are no # households (which happens in testing) it doesn't break down print(cb)
def central_bank__get_account_num_transactions(self, args): import os from src.bank import Bank from src.central_bank import CentralBank from src.household import Household from src.firm import Firm from src.environment import Environment # needed for the bankDirectory text = "This test checks central_bank.get_account_num_transactions \n" text = text + " The purpose of this method is to count the numbers of transaction for \n" text = text + " accounts banks hold. Our central bank has 3 transactions by default. \n" self.print_info(text) # # INITIALIZATION # environment_directory = str(args[0]) identifier = str(args[1]) log_directory = str(args[2]) # Configure logging parameters so we get output while the program runs logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', filename=log_directory + identifier + ".log", level=logging.INFO) logging.info('START logging for test central_bank__get_account_num_transactions in run: %s', environment_directory + identifier + ".xml") # Construct bank filename environment = Environment(environment_directory, identifier) # get the bank_directory from the environment bank_directory = environment.bank_directory # and loop over all banks in the directory listing = os.listdir(bank_directory) bank_filename = bank_directory + listing[0] # generate a household household = Household() household.identifier = "test_household" environment.households.append(household) # generate a firm firm = Firm() firm.identifier = "test_firm" environment.firms.append(firm) # generate a bank bank = Bank() bank.identifier = "test_bank" environment.banks.append(bank) # generate a central bank cb = CentralBank() cb.identifier = "test_central_bank" environment.central_bank.append(cb) # # TESTING # environment.new_transaction("deposits", "", cb.identifier, "test_firm", 100, 0.0, 0, -1) environment.new_transaction("cash", "", cb.identifier, "test_firm", 200, 0.0, 0, -1) environment.new_transaction("loans", "", cb.identifier, "test_firm", 300, 0.0, 0, -1) num_transactions = 0.0 # counting all types in account together print(cb) # and checking if the number of transaction # is increasing by one for type in ["deposits", "cash", "loans"]: if type == "deposits": num_transactions = num_transactions + cb.get_account_num_transactions(type) print("D = " + str(num_transactions)) if type == "cash": num_transactions = num_transactions + cb.get_account_num_transactions(type) print("D+M = " + str(num_transactions)) if type == "loans": num_transactions = num_transactions + cb.get_account_num_transactions(type) print("D+M+L = " + str(num_transactions))