Пример #1
0
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)
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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)