def test_set_not_chaged_variable(): dont_cache_variable = MemoryConfig(max_memory_occupation=1, variables_to_drop=['salary']) simulation = get_simulation(single, memory_config=dont_cache_variable) holder = simulation.person.get_holder('salary') array = np.asarray([2000]) holder.set_input('2015-01', array) assert_equal(simulation.calculate('salary', '2015-01'), array)
def test_set_not_cached_variable(single): dont_cache_variable = MemoryConfig(max_memory_occupation=1, variables_to_drop=['salary']) simulation = single simulation.memory_config = dont_cache_variable holder = simulation.person.get_holder('salary') array = numpy.asarray([2000]) holder.set_input('2015-01', array) assert simulation.calculate('salary', '2015-01') == array
def simulation(period, data, tbs): # Traduction des roles attribués au format openfisca data["quimenof"] = "enfant" data.loc[data["quifoy"] == 1, "quimenof"] = "conjoint" data.loc[data["quifoy"] == 0, "quimenof"] = "personne_de_reference" data["quifoyof"] = "personne_a_charge" data.loc[data["quifoy"] == 1, "quifoyof"] = "conjoint" data.loc[data["quifoy"] == 0, "quifoyof"] = "declarant_principal" data["quifamof"] = "enfant" data.loc[data["quifam"] == 1, "quifamof"] = "conjoint" data.loc[data["quifam"] == 0, "quifamof"] = "demandeur" sb = SimulationBuilder() sb.create_entities(tbs) sb.declare_person_entity("individu", data.index) # Creates openfisca entities and generates grouped listentities = {"foy": "foyer_fiscal", "men": "menage", "fam": "famille"} instances = {} dictionnaire_datagrouped = {"individu": data} for ent, ofent in listentities.items(): persons_ent = data["id" + ent].values persons_ent_roles = data["qui" + ent + "of"].values ent_ids = data["id" + ent].unique() instances[ofent] = sb.declare_entity(ofent, ent_ids) sb.join_with_persons(instances[ofent], persons_ent, roles=persons_ent_roles) # The following ssumes data defined for an entity are the same for all rows in # the same entity. Or at least that the first non null value found for an # entity will always be the total value for an entity (which is the case for # f4ba). These checks are performed in the checkdata function defined below. dictionnaire_datagrouped[ofent] = (data.groupby( "id" + ent, as_index=False).first().sort_values(by="id" + ent)) # These variables should not be attributed to any OpenFisca Entity columns_not_OF_variables = set([ "idmen", "idfoy", "idfam", "noindiv", "level_0", "quifam", "quifoy", "quimen", "idmen_x", "idmen_y", "wprm", "index", "idmen_original", "idfoy_original", "idfam_original", "quifamof", "quifoyof", "quimenof", ]) simulation = sb.build(tbs) memory_config = MemoryConfig( max_memory_occupation= 0.95, # When 95% of the virtual memory is full, switch to disk storage priority_variables=["salary", "age"], # Always store these variables in memory variables_to_drop=non_cached_variables, ) simulation.memory_config = memory_config # Attribution des variables à la bonne entité OpenFisca for colonne in data.columns: if colonne not in columns_not_OF_variables: # try: simulation.set_input( colonne, period, dictionnaire_datagrouped[tbs.get_variable(colonne).entity.key] [colonne], ) return simulation, dictionnaire_datagrouped
def test_get_memory_usage_with_trace(): simulation = get_simulation(single, trace=True) salary_holder = simulation.person.get_holder('salary') salary_holder.set_input(make_period(2017), np.asarray([30000])) simulation.calculate('salary', '2017-01') simulation.calculate('salary', '2017-01') simulation.calculate('salary', '2017-02') simulation.calculate_add('salary', '2017') # 12 calculations memory_usage = salary_holder.get_memory_usage() assert_equal(memory_usage['nb_requests'], 15) assert_equal(memory_usage['nb_requests_by_array'], 1.25) # 15 calculations / 12 arrays force_storage_on_disk = MemoryConfig(max_memory_occupation=0) def test_delete_arrays_on_disk(): simulation = get_simulation( single, memory_config=force_storage_on_disk) # Force using disk salary_holder = simulation.person.get_holder('salary') salary_holder.set_input(make_period(2017), np.asarray([30000])) salary_holder.set_input(make_period(2018), np.asarray([60000])) assert_equal(simulation.person('salary', '2017-01'), 2500) assert_equal(simulation.person('salary', '2018-01'), 5000) salary_holder.delete_arrays(period=2018) salary_holder.set_input(make_period(2018), np.asarray([15000])) assert_equal(simulation.person('salary', '2017-01'), 2500) assert_equal(simulation.person('salary', '2018-01'), 1250)