def test_step(): havven_model = model.HavvenModel(20) assert (havven_model.manager.time == 1) havven_model.step() assert (havven_model.manager.time == 2) time_delta = 100 for _ in range(time_delta): havven_model.step() assert (havven_model.manager.time == time_delta + 2)
def test_fiat_value(): havven_model = model.HavvenModel(10) assert (isinstance(havven_model.fiat_value(), Dec)) assert (havven_model.fiat_value() == Dec(0)) assert (havven_model.fiat_value(Dec(1), Dec(1), Dec(1)) > Dec(0)) assert (havven_model.fiat_value(havvens=Dec(0), nomins=Dec(0), fiat=Dec(1)) == Dec(1)) assert (havven_model.fiat_value(havvens=Dec(1)) < havven_model.fiat_value(havvens=Dec(2))) assert (havven_model.fiat_value(nomins=Dec(1)) < havven_model.fiat_value(nomins=Dec(2))) assert (havven_model.fiat_value(fiat=Dec(1)) < havven_model.fiat_value(fiat=Dec(2)))
def make_model_without_agents(continuous_order_matching=True): """TODO: make this more generalised""" settings = settingsloader.load_settings() model_settings = settings['Model'] model_settings['agent_fractions'] = settings['AgentFractions'] model_settings['num_agents'] = 0 model_settings['continuous_order_matching'] = continuous_order_matching settings['Agents']['agent_minimum'] = 0 havven_model = model.HavvenModel(model_settings, settings['Fees'], settings['Agents'], settings['Havven']) for item in havven_model.schedule.agents: havven_model.schedule.remove(item) havven_model.agent_manager.agents = {"others": []} return havven_model
def test_endowment(): havven_model = model.HavvenModel(10) agent = havven_model.schedule.agents[0] agent_pre_cur = agent.havvens havven_pre_cur = havven_model.manager.havvens havven_model.endow_havvens(agent, Dec(0)) havven_model.endow_havvens(agent, Dec(-10)) assert (agent.havvens == agent_pre_cur) assert (havven_model.manager.havvens == havven_pre_cur) endowment = Dec(100) havven_model.endow_havvens(agent, endowment) assert (agent.havvens == agent_pre_cur + endowment) assert (havven_model.manager.havvens == havven_pre_cur - endowment)
def test_fee_distribution_period(): havven_model = model.HavvenModel(20) assert (havven_model.fee_manager.fees_distributed == Dec(0)) assert (havven_model.manager.nomins == Dec(0)) for _ in range(havven_model.fee_manager.fee_period - 1): havven_model.step() prenomins = havven_model.manager.nomins predistrib = havven_model.fee_manager.fees_distributed assert (prenomins > Dec(0)) assert (predistrib == Dec(0)) havven_model.step() postnomins = havven_model.manager.nomins postdistrib = havven_model.fee_manager.fees_distributed assert (postnomins == Dec(0)) assert (prenomins <= postdistrib) assert (havven_model.manager.nomins == Dec(0))
def generate_new_caches(data): """ generate a new dataset for each dataset that doesn't already exist in data overwrites the defined default settings for every run generate visualisation results for every step up to max_steps, and save it to 'result' store the result in the format: data["name"] = {"data": result, "settings": settings, "max_steps": max_steps} """ from core.server import get_vis_elements for n, item in enumerate(run_settings): if item["name"] in data and len( data[item['name']]['data']) == item['max_steps']: print("already have:", item['name']) continue print("\nGenerating", item["name"]) result = [] settings = settingsloader.get_defaults() for section in item["settings"]: for setting in item['settings'][section]: settings[section][setting] = item["settings"][section][setting] model_settings = settings['Model'] model_settings['agent_fractions'] = settings['AgentFractions'] havven_model = model.HavvenModel(model_settings, settings['Fees'], settings['Agents'], settings['Havven']) vis_elements = get_vis_elements() # # The following is for running the loop without tqdm # # as when profiling the model tqdm shows up as ~17% runtime # for i in range(item["max_steps"]): # if not i % 100: # print(f"{n+1}/{len(run_settings)} [{'='*(i//100)}{'-'*(item['max_steps']//100 - i//100)}" + # f"] {i}/{item['max_steps']}") for i in tqdm.tqdm(range(item["max_steps"])): havven_model.step() step_data = [] for element in vis_elements: if i == 0: if hasattr(element, "sent_data"): element.sent_data = False element_data = element.render(havven_model) else: element_data = element.render(havven_model) else: element_data = element.render(havven_model) step_data.append(element_data) result.append(step_data) data[item["name"]] = { "data": result, "settings": settings, "max_steps": item["max_steps"], "description": item["description"] } return data