예제 #1
0
 def test_agg_func_get_set(self, model, agg_func):
     if agg_func == "custom":
         agg_func = custom_test_func
     p = AggregatedIndexParameter(model, [], agg_func=agg_func)
     assert p.agg_func == agg_func
     p.agg_func = "product"
     assert p.agg_func == "product"
예제 #2
0
    def test_agg_anyall(self, simple_linear_model):
        """Test the "any" and "all" aggregation functions"""
        model = simple_linear_model
        model.timestepper.delta = 1
        model.timestepper.start = "2017-01-01"
        model.timestepper.end = "2017-01-03"

        scenarioA = Scenario(model, "Scenario A", size=2)
        scenarioB = Scenario(model, "Scenario B", size=5)
        num_comb = len(model.scenarios.get_combinations())

        parameters = {
            0: DummyIndexParameter(model, 0, name="p0"),
            1: DummyIndexParameter(model, 1, name="p1"),
            2: DummyIndexParameter(model, 2, name="p2"),
        }

        data = [(0, 0), (1, 0), (0, 1), (1, 1), (1, 1, 1), (0, 2)]
        data_parameters = [[parameters[i] for i in d] for d in data]
        expected = [(np.any(d), np.all(d)) for d in data]

        for n, params in enumerate(data_parameters):
            for m, agg_func in enumerate(["any", "all"]):
                p = AggregatedIndexParameter(model, params, agg_func=agg_func)
                e = np.ones([len(model.timestepper), num_comb
                             ]) * expected[n][m]
                r = AssertionRecorder(model,
                                      p,
                                      expected_data=e,
                                      name="assertion {}-{}".format(
                                          n, agg_func))

        model.run()
예제 #3
0
def test_aggregated_index_parameter(model):
    """Basic tests of AggregatedIndexParameter"""

    parameters = []
    parameters.append(DummyIndexParameter(2))
    parameters.append(DummyIndexParameter(3))

    timestep = scenario_index = None  # lazy

    agg_index = AggregatedIndexParameter(parameters, "sum")
    assert (agg_index.index(timestep, scenario_index) == 5)

    agg_index = AggregatedIndexParameter(parameters, "max")
    assert (agg_index.index(timestep, scenario_index) == 3)

    agg_index = AggregatedIndexParameter(parameters, "min")
    assert (agg_index.index(timestep, scenario_index) == 2)
예제 #4
0
def test_aggregated_index_parameter_anyall(model):
    """Test `any` and `all` predicates"""
    timestep = scenario_index = None  # lazy
    data = [(0, 0), (1, 0), (0, 1), (1, 1), (1, 1, 1)]
    expected = [(False, False), (True, False), (True, False), (True, True),
                (True, True)]
    for item, (expected_any, expected_all) in zip(data, expected):
        parameters = [DummyIndexParameter(i) for i in item]
        agg_index_any = AggregatedIndexParameter(parameters, "any")
        agg_index_all = AggregatedIndexParameter(parameters, "all")
        assert (agg_index_any.index(timestep,
                                    scenario_index) == int(expected_any))
        assert (agg_index_all.index(timestep,
                                    scenario_index) == int(expected_all))
예제 #5
0
    def test_agg(self, simple_linear_model, agg_func):
        model = simple_linear_model
        model.timestepper.delta = 1
        model.timestepper.start = "2017-01-01"
        model.timestepper.end = "2017-01-03"

        scenarioA = Scenario(model, "Scenario A", size=2)
        scenarioB = Scenario(model, "Scenario B", size=5)

        p1 = DummyIndexParameter(model, 2)
        p2 = DummyIndexParameter(model, 3)

        p = AggregatedIndexParameter(model, [p1, p2], agg_func=agg_func)

        func = TestAggregatedIndexParameter.funcs[agg_func]

        @assert_rec(model, p)
        def expected_func(timestep, scenario_index):
            x = p1.get_index(scenario_index)
            y = p2.get_index(scenario_index)
            return func(np.array([x, y], np.int32))

        model.run()