From 302bc76c40f3d303d2290471aa6b098d0ec0b4fe Mon Sep 17 00:00:00 2001 From: Juliette-Gerbaux Date: Mon, 5 Aug 2024 17:50:37 +0200 Subject: [PATCH 1/2] Fix mypy --- tests/functional/conftest.py | 4 +- tests/functional/test_andromede.py | 2 +- tests/functional/test_andromede_yml.py | 17 ++++---- tests/functional/test_xpansion.py | 10 ++++- tests/integration/test_benders_decomposed.py | 20 ++++----- tests/models/conftest.py | 6 +-- tests/models/test_ac_link.py | 8 ++-- tests/models/test_electrolyzer.py | 2 +- tests/models/test_electrolyzer_n_inputs.py | 32 +++++++------- .../models/test_electrolyzer_n_inputs_yaml.py | 33 ++++++++------- tests/models/test_quota_co2.py | 8 ++-- tests/models/test_quota_co2_yaml.py | 9 ++-- .../parsing/test_expression_parsing.py | 4 +- tests/unittests/expressions/test_equality.py | 4 +- .../unittests/expressions/test_expressions.py | 10 ++--- .../expressions/test_linear_expressions.py | 42 +++++++++---------- .../expressions/test_port_resolver.py | 4 +- tests/unittests/model/test_model_parsing.py | 6 +-- .../study/test_components_parsing.py | 18 +++++--- tests/unittests/test_data.py | 2 +- tests/unittests/test_model.py | 2 +- tests/unittests/test_utils.py | 2 +- 22 files changed, 131 insertions(+), 114 deletions(-) diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index 9d443ee1..91b3b539 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -14,7 +14,7 @@ import pytest from andromede.model.parsing import parse_yaml_library -from andromede.model.resolve_library import resolve_library +from andromede.model.resolve_library import resolve_library, Library @pytest.fixture(scope="session") @@ -23,7 +23,7 @@ def libs_dir() -> Path: @pytest.fixture(scope="session") -def lib(libs_dir: Path): +def lib(libs_dir: Path) -> Library: lib_file = libs_dir / "lib.yml" with lib_file.open() as f: diff --git a/tests/functional/test_andromede.py b/tests/functional/test_andromede.py index f3a3aa36..8e837a45 100644 --- a/tests/functional/test_andromede.py +++ b/tests/functional/test_andromede.py @@ -197,7 +197,7 @@ def generate_data( for scenario in range(scenarios): for absolute_timestep in range(horizon): if absolute_timestep == 0: - data[TimeScenarioIndex(absolute_timestep, scenario)] = -18 + data[TimeScenarioIndex(absolute_timestep, scenario)] = -18.0 else: data[TimeScenarioIndex(absolute_timestep, scenario)] = 2 * efficiency diff --git a/tests/functional/test_andromede_yml.py b/tests/functional/test_andromede_yml.py index c959f0f4..53a87711 100644 --- a/tests/functional/test_andromede_yml.py +++ b/tests/functional/test_andromede_yml.py @@ -21,9 +21,10 @@ TimeScenarioSeriesData, create_component, ) +from andromede.model.library import Library -def test_network(lib) -> None: +def test_network(lib: Library) -> None: network = Network("test") assert network.id == "test" assert list(network.nodes) == [] @@ -47,7 +48,7 @@ def test_network(lib) -> None: network.get_component("unknown") -def test_basic_balance(lib) -> None: +def test_basic_balance(lib: Library) -> None: """ Balance on one node with one fixed demand and one generation, on 1 timestep. """ @@ -88,7 +89,7 @@ def test_basic_balance(lib) -> None: assert problem.solver.Objective().Value() == 3000 -def test_link(lib) -> None: +def test_link(lib: Library) -> None: """ Balance on one node with one fixed demand and one generation, on 1 timestep. """ @@ -146,7 +147,7 @@ def test_link(lib) -> None: assert variable.solution_value() == -100 -def test_stacking_generation(lib) -> None: +def test_stacking_generation(lib: Library) -> None: """ Balance on one node with one fixed demand and 2 generations with different costs, on 1 timestep. """ @@ -198,7 +199,7 @@ def test_stacking_generation(lib) -> None: assert problem.solver.Objective().Value() == 30 * 100 + 50 * 50 -def test_spillage(lib) -> None: +def test_spillage(lib: Library) -> None: """ Balance on one node with one fixed demand and 1 generation higher than demand and 1 timestep . """ @@ -238,7 +239,7 @@ def test_spillage(lib) -> None: assert problem.solver.Objective().Value() == 30 * 200 + 50 * 10 -def test_min_up_down_times(lib) -> None: +def test_min_up_down_times(lib: Library) -> None: """ Model on 3 time steps with one thermal generation and one demand on a single node. - Demand is the following time series : [500 MW, 0, 0] @@ -332,7 +333,7 @@ def test_min_up_down_times(lib) -> None: assert problem.solver.Objective().Value() == pytest.approx(72000, abs=0.01) -def test_changing_demand(lib) -> None: +def test_changing_demand(lib: Library) -> None: """ Model on 3 time steps simple production, demand - P_max = 500 MW @@ -388,7 +389,7 @@ def test_changing_demand(lib) -> None: assert problem.solver.Objective().Value() == 40000 -def test_min_up_down_times_2(lib) -> None: +def test_min_up_down_times_2(lib: Library) -> None: """ Model on 3 time steps with one thermal generation and one demand on a single node. - Demand is the following time series : [500 MW, 0, 0] diff --git a/tests/functional/test_xpansion.py b/tests/functional/test_xpansion.py index cba44bca..76ff45eb 100644 --- a/tests/functional/test_xpansion.py +++ b/tests/functional/test_xpansion.py @@ -388,8 +388,14 @@ def test_generation_xpansion_two_time_steps_two_scenarios( output = OutputValues(problem) expected_output = OutputValues() - expected_output.component("G1").var("generation").value = [[0, 200], [0, 100]] - expected_output.component("CAND").var("generation").value = [[300, 300], [200, 300]] + expected_output.component("G1").var("generation").value = [ + [0.0, 200.0], + [0.0, 100.0], + ] + expected_output.component("CAND").var("generation").value = [ + [300.0, 300.0], + [200.0, 300.0], + ] expected_output.component("CAND").var("p_max").value = 300.0 assert output == expected_output, f"Output differs from expected: {output}" diff --git a/tests/integration/test_benders_decomposed.py b/tests/integration/test_benders_decomposed.py index a04b7cab..1aef0492 100644 --- a/tests/integration/test_benders_decomposed.py +++ b/tests/integration/test_benders_decomposed.py @@ -286,8 +286,8 @@ def test_benders_decomposed_multi_time_block_single_scenario( """ data = {} - data[TimeIndex(0)] = 200 - data[TimeIndex(1)] = 300 + data[TimeIndex(0)] = 200.0 + data[TimeIndex(1)] = 300.0 demand_data = TimeSeriesData(time_series=data) @@ -327,7 +327,7 @@ def test_benders_decomposed_multi_time_block_single_scenario( scenarios, ) - data = { + data_output = { "solution": { "overall_cost": 62_000, "values": { @@ -335,7 +335,7 @@ def test_benders_decomposed_multi_time_block_single_scenario( }, } } - solution = BendersSolution(data) + solution = BendersSolution(data_output) assert xpansion.run() decomposed_solution = xpansion.solution @@ -374,8 +374,8 @@ def test_benders_decomposed_single_time_block_multi_scenario( """ data = {} - data[ScenarioIndex(0)] = 200 - data[ScenarioIndex(1)] = 300 + data[ScenarioIndex(0)] = 200.0 + data[ScenarioIndex(1)] = 300.0 demand_data = ScenarioSeriesData(scenario_series=data) @@ -415,7 +415,7 @@ def test_benders_decomposed_single_time_block_multi_scenario( scenarios, ) - data = { + data_output = { "solution": { "overall_cost": 55_000, "values": { @@ -423,7 +423,7 @@ def test_benders_decomposed_single_time_block_multi_scenario( }, } } - solution = BendersSolution(data) + solution = BendersSolution(data_output) assert xpansion.run() decomposed_solution = xpansion.solution @@ -510,7 +510,7 @@ def test_benders_decomposed_multi_time_block_multi_scenario( scenarios, ) - data = { + data_output = { "solution": { "overall_cost": 58_000, "values": { @@ -518,7 +518,7 @@ def test_benders_decomposed_multi_time_block_multi_scenario( }, } } - solution = BendersSolution(data) + solution = BendersSolution(data_output) assert xpansion.run() decomposed_solution = xpansion.solution diff --git a/tests/models/conftest.py b/tests/models/conftest.py index ee330ed3..8808612c 100644 --- a/tests/models/conftest.py +++ b/tests/models/conftest.py @@ -14,7 +14,7 @@ import pytest from andromede.model.parsing import parse_yaml_library -from andromede.model.resolve_library import resolve_library +from andromede.model.resolve_library import resolve_library, Library @pytest.fixture(scope="session") @@ -28,7 +28,7 @@ def data_dir() -> Path: @pytest.fixture(scope="session") -def lib(data_dir: Path): +def lib(data_dir: Path) -> Library: lib_file = data_dir / "lib.yml" with lib_file.open() as f: @@ -39,7 +39,7 @@ def lib(data_dir: Path): @pytest.fixture(scope="session") -def lib_sc(): +def lib_sc() -> Library: libs_path = Path(__file__).parents[2] / "src/andromede/libs/" lib_sc_file = libs_path / "standard_sc.yml" diff --git a/tests/models/test_ac_link.py b/tests/models/test_ac_link.py index b94bab02..a6befce1 100644 --- a/tests/models/test_ac_link.py +++ b/tests/models/test_ac_link.py @@ -43,7 +43,7 @@ def ac_lib(libs_dir: Path, std_lib: Library) -> Library: return resolve_library(input_lib, preloaded_libraries=[std_lib]) -def test_ac_network_no_links(ac_lib: Library): +def test_ac_network_no_links(ac_lib: Library) -> None: """ The network only has one AC node where a generator and a demand are connected. @@ -87,7 +87,7 @@ def test_ac_network_no_links(ac_lib: Library): assert problem.solver.Objective().Value() == pytest.approx(3000, abs=0.01) -def test_ac_network(ac_lib: Library): +def test_ac_network(ac_lib: Library) -> None: """ The network only has 2 AC nodes connected by 1 AC link. @@ -148,7 +148,7 @@ def test_ac_network(ac_lib: Library): ) -def test_parallel_ac_links(ac_lib: Library): +def test_parallel_ac_links(ac_lib: Library) -> None: """ The network has 2 AC nodes connected by 2 parallel links, where reactance is 1 for line L1, and 2 for line L2. @@ -220,7 +220,7 @@ def test_parallel_ac_links(ac_lib: Library): ) -def test_parallel_ac_links_with_pst(ac_lib: Library): +def test_parallel_ac_links_with_pst(ac_lib: Library) -> None: """ Same case as in parallel_ac_links but: - flow is restricted to 50 MW on line L1, so it cannot diff --git a/tests/models/test_electrolyzer.py b/tests/models/test_electrolyzer.py index f6ea1d7c..e1323070 100644 --- a/tests/models/test_electrolyzer.py +++ b/tests/models/test_electrolyzer.py @@ -128,7 +128,7 @@ ) -def test_electrolyzer(): +def test_electrolyzer() -> None: elec_node = Node(model=ELECTRICAL_NODE_MODEL, id="1") h2_node = Node(model=H2_NODE_MODEL, id="2") diff --git a/tests/models/test_electrolyzer_n_inputs.py b/tests/models/test_electrolyzer_n_inputs.py index 6c6f5be5..53f3f3bc 100644 --- a/tests/models/test_electrolyzer_n_inputs.py +++ b/tests/models/test_electrolyzer_n_inputs.py @@ -50,7 +50,7 @@ """ -def test_electrolyzer_n_inputs_1(): +def test_electrolyzer_n_inputs_1() -> None: """ Test with an electrolyzer for each input @@ -133,15 +133,15 @@ def test_electrolyzer_n_inputs_1(): print(ep2_gen) print(gp_gen) - assert math.isclose(ep1_gen, 70) - assert math.isclose(ep2_gen, 42) - assert math.isclose(gp_gen, 30) + assert math.isclose(ep1_gen, 70) # type:ignore + assert math.isclose(ep2_gen, 42) # type:ignore + assert math.isclose(gp_gen, 30) # type:ignore assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 1990) -def test_electrolyzer_n_inputs_2(): +def test_electrolyzer_n_inputs_2() -> None: """ Test with one electrolyzer that has two inputs @@ -222,15 +222,15 @@ def test_electrolyzer_n_inputs_2(): print(ep2_gen) print(gp_gen) - assert math.isclose(ep1_gen, 70) - assert math.isclose(ep2_gen, 42) - assert math.isclose(gp_gen, 30) + assert math.isclose(ep1_gen, 70) # type:ignore + assert math.isclose(ep2_gen, 42) # type:ignore + assert math.isclose(gp_gen, 30) # type:ignore assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 1990) -def test_electrolyzer_n_inputs_3(): +def test_electrolyzer_n_inputs_3() -> None: """ Test with a consumption_electrolyzer with two inputs @@ -317,15 +317,15 @@ def test_electrolyzer_n_inputs_3(): ep2_gen = output.component("ep2").var("generation").value gp_gen = output.component("gp").var("generation").value - assert math.isclose(ep1_gen, 70) - assert math.isclose(ep2_gen, 30) - assert math.isclose(gp_gen, 30) + assert math.isclose(ep1_gen, 70) # type:ignore + assert math.isclose(ep2_gen, 30) # type:ignore + assert math.isclose(gp_gen, 30) # type:ignore assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 1750) -def test_electrolyzer_n_inputs_4(): +def test_electrolyzer_n_inputs_4() -> None: """ Test with one electrolyzer with one input that takes every inputs @@ -405,9 +405,9 @@ def test_electrolyzer_n_inputs_4(): ep2_gen = output.component("ep2").var("generation").value gp_gen = output.component("gp").var("generation").value - assert math.isclose(ep1_gen, 70) - assert math.isclose(ep2_gen, 30) - assert math.isclose(gp_gen, 30) + assert math.isclose(ep1_gen, 70) # type:ignore + assert math.isclose(ep2_gen, 30) # type:ignore + assert math.isclose(gp_gen, 30) # type:ignore assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 1750) diff --git a/tests/models/test_electrolyzer_n_inputs_yaml.py b/tests/models/test_electrolyzer_n_inputs_yaml.py index ac6e8a25..f783e535 100644 --- a/tests/models/test_electrolyzer_n_inputs_yaml.py +++ b/tests/models/test_electrolyzer_n_inputs_yaml.py @@ -22,6 +22,7 @@ PortRef, create_component, ) +from andromede.model.library import Library """ for every following test we have two electrical productions with an electrolyzer converting to a gaz flow @@ -43,7 +44,7 @@ """ -def test_electrolyzer_n_inputs_1(data_dir: Path, lib: Path, lib_sc: Path): +def test_electrolyzer_n_inputs_1(data_dir: Path, lib: Library, lib_sc: Library) -> None: """ Test with an electrolyzer for each input @@ -138,15 +139,15 @@ def test_electrolyzer_n_inputs_1(data_dir: Path, lib: Path, lib_sc: Path): print(ep2_gen) print(gp_gen) - assert math.isclose(ep1_gen, 70) - assert math.isclose(ep2_gen, 42) - assert math.isclose(gp_gen, 30) + assert math.isclose(ep1_gen, 70) # type:ignore + assert math.isclose(ep2_gen, 42) # type:ignore + assert math.isclose(gp_gen, 30) # type:ignore assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 1990) -def test_electrolyzer_n_inputs_2(data_dir: Path, lib: Path, lib_sc: Path): +def test_electrolyzer_n_inputs_2(data_dir: Path, lib: Library, lib_sc: Library) -> None: """ Test with one electrolyzer that has two inputs @@ -236,15 +237,15 @@ def test_electrolyzer_n_inputs_2(data_dir: Path, lib: Path, lib_sc: Path): print(ep2_gen) print(gp_gen) - assert math.isclose(ep1_gen, 70) - assert math.isclose(ep2_gen, 42) - assert math.isclose(gp_gen, 30) + assert math.isclose(ep1_gen, 70) # type:ignore + assert math.isclose(ep2_gen, 42) # type:ignore + assert math.isclose(gp_gen, 30) # type:ignore assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 1990) -def test_electrolyzer_n_inputs_3(data_dir: Path, lib: Path, lib_sc: Path): +def test_electrolyzer_n_inputs_3(data_dir: Path, lib: Library, lib_sc: Library) -> None: """ Test with a consumption_electrolyzer with two inputs @@ -341,15 +342,15 @@ def test_electrolyzer_n_inputs_3(data_dir: Path, lib: Path, lib_sc: Path): ep2_gen = output.component("ep2").var("generation").value gp_gen = output.component("gp").var("generation").value - assert math.isclose(ep1_gen, 70) - assert math.isclose(ep2_gen, 30) - assert math.isclose(gp_gen, 30) + assert math.isclose(ep1_gen, 70) # type:ignore + assert math.isclose(ep2_gen, 30) # type:ignore + assert math.isclose(gp_gen, 30) # type:ignore assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 1750) -def test_electrolyzer_n_inputs_4(data_dir: Path, lib: Path, lib_sc: Path): +def test_electrolyzer_n_inputs_4(data_dir: Path, lib: Library, lib_sc: Library) -> None: """ Test with one electrolyzer with one input that takes every inputs @@ -440,9 +441,9 @@ def test_electrolyzer_n_inputs_4(data_dir: Path, lib: Path, lib_sc: Path): ep2_gen = output.component("ep2").var("generation").value gp_gen = output.component("gp").var("generation").value - assert math.isclose(ep1_gen, 70) - assert math.isclose(ep2_gen, 30) - assert math.isclose(gp_gen, 30) + assert math.isclose(ep1_gen, 70) # type:ignore + assert math.isclose(ep2_gen, 30) # type:ignore + assert math.isclose(gp_gen, 30) # type:ignore assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 1750) diff --git a/tests/models/test_quota_co2.py b/tests/models/test_quota_co2.py index 07f50e58..5888b81b 100644 --- a/tests/models/test_quota_co2.py +++ b/tests/models/test_quota_co2.py @@ -39,7 +39,7 @@ """ Test of a generation of energy and co2 with a quota to limit the emission""" -def test_quota_co2(): +def test_quota_co2() -> None: n1 = Node(model=NODE_BALANCE_MODEL, id="N1") n2 = Node(model=NODE_BALANCE_MODEL, id="N2") oil1 = create_component(model=C02_POWER_MODEL, id="Oil1") @@ -89,6 +89,6 @@ def test_quota_co2(): assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 5500) - assert math.isclose(oil1_p, 50) - assert math.isclose(coal1_p, 50) - assert math.isclose(l12_flow, -50) + assert math.isclose(oil1_p, 50) # type:ignore + assert math.isclose(coal1_p, 50) # type:ignore + assert math.isclose(l12_flow, -50) # type:ignore diff --git a/tests/models/test_quota_co2_yaml.py b/tests/models/test_quota_co2_yaml.py index f11a2369..1daec031 100644 --- a/tests/models/test_quota_co2_yaml.py +++ b/tests/models/test_quota_co2_yaml.py @@ -22,6 +22,7 @@ PortRef, create_component, ) +from andromede.model.library import Library """ build the quota CO² test system. @@ -38,7 +39,7 @@ """ Test of a generation of energy and co2 with a quota to limit the emission""" -def test_quota_co2(data_dir: Path, lib: Path, lib_sc: Path): +def test_quota_co2(data_dir: Path, lib: Library, lib_sc: Library) -> None: gen_model = lib_sc.models["generator_with_co2"] node_model = lib.models["node"] quota_co2_model = lib_sc.models["quota_co2"] @@ -94,6 +95,6 @@ def test_quota_co2(data_dir: Path, lib: Path, lib_sc: Path): assert status == problem.solver.OPTIMAL assert math.isclose(problem.solver.Objective().Value(), 5500) - assert math.isclose(oil1_p, 50) - assert math.isclose(coal1_p, 50) - assert math.isclose(l12_flow, -50) + assert math.isclose(oil1_p, 50) # type:ignore + assert math.isclose(coal1_p, 50) # type:ignore + assert math.isclose(l12_flow, -50) # type:ignore diff --git a/tests/unittests/expressions/parsing/test_expression_parsing.py b/tests/unittests/expressions/parsing/test_expression_parsing.py index 13fb04a3..9620f4be 100644 --- a/tests/unittests/expressions/parsing/test_expression_parsing.py +++ b/tests/unittests/expressions/parsing/test_expression_parsing.py @@ -152,7 +152,7 @@ def test_parsing_visitor( parameters: Set[str], expression_str: str, expected: ExpressionNode, -): +) -> None: identifiers = ModelIdentifiers(variables, parameters) expr = parse_expression(expression_str, identifiers) print() @@ -170,7 +170,7 @@ def test_parsing_visitor( "x[t 4]", ], ) -def test_parse_cancellation_should_throw(expression_str: str): +def test_parse_cancellation_should_throw(expression_str: str) -> None: # Console log error is displayed ! identifiers = ModelIdentifiers( variables={"x"}, diff --git a/tests/unittests/expressions/test_equality.py b/tests/unittests/expressions/test_equality.py index c042fdde..5d5fd5c2 100644 --- a/tests/unittests/expressions/test_equality.py +++ b/tests/unittests/expressions/test_equality.py @@ -23,7 +23,7 @@ ) -def shifted_x(): +def shifted_x() -> ExpressionNode: return var("x").shift(expression_range(0, 2)) @@ -78,7 +78,7 @@ def test_not_equals(lhs: ExpressionNode, rhs: ExpressionNode) -> None: assert not expressions_equal(lhs, rhs) -def test_tolerance(): +def test_tolerance() -> None: assert expressions_equal(literal(10), literal(10.09), abs_tol=0.1) assert not expressions_equal(literal(10), literal(10.11), abs_tol=0.1) assert expressions_equal(literal(10), literal(10.9), rel_tol=0.1) diff --git a/tests/unittests/expressions/test_expressions.py b/tests/unittests/expressions/test_expressions.py index b990605d..81bebcd3 100644 --- a/tests/unittests/expressions/test_expressions.py +++ b/tests/unittests/expressions/test_expressions.py @@ -212,7 +212,7 @@ def get_variable_structure(self, name: str) -> IndexingStructure: def test_shift() -> None: x = var("x") - expr = x.shift(ExpressionRange(1, 4)) + expr = x.shift(ExpressionRange(literal(1), literal(4))) provider = StructureProvider() @@ -222,7 +222,7 @@ def test_shift() -> None: def test_shifting_sum() -> None: x = var("x") - expr = x.shift(ExpressionRange(1, 4)).sum() + expr = x.shift(ExpressionRange(literal(1), literal(4))).sum() provider = StructureProvider() assert compute_indexation(expr, provider) == IndexingStructure(True, True) @@ -231,7 +231,7 @@ def test_shifting_sum() -> None: def test_eval() -> None: x = var("x") - expr = x.eval(ExpressionRange(1, 4)) + expr = x.eval(ExpressionRange(literal(1), literal(4))) provider = StructureProvider() assert compute_indexation(expr, provider) == IndexingStructure(False, True) @@ -240,7 +240,7 @@ def test_eval() -> None: def test_eval_sum() -> None: x = var("x") - expr = x.eval(ExpressionRange(1, 4)).sum() + expr = x.eval(ExpressionRange(literal(1), literal(4))).sum() provider = StructureProvider() assert compute_indexation(expr, provider) == IndexingStructure(False, True) @@ -259,7 +259,7 @@ def test_sum_over_whole_block() -> None: def test_forbidden_composition_should_raise_value_error() -> None: x = var("x") with pytest.raises(ValueError): - _ = x.shift(ExpressionRange(1, 4)) + var("y") + _ = x.shift(ExpressionRange(literal(1), literal(4))) + var("y") def test_expectation() -> None: diff --git a/tests/unittests/expressions/test_linear_expressions.py b/tests/unittests/expressions/test_linear_expressions.py index 54a11e95..2564aa8f 100644 --- a/tests/unittests/expressions/test_linear_expressions.py +++ b/tests/unittests/expressions/test_linear_expressions.py @@ -16,7 +16,7 @@ from andromede.expression.scenario_operator import Expectation from andromede.expression.time_operator import TimeShift, TimeSum -from andromede.simulation.linear_expression import LinearExpression, Term +from andromede.simulation.linear_expression import LinearExpression, Term, TermKey @pytest.mark.parametrize( @@ -26,7 +26,7 @@ (Term(-1, "c", "x"), "-x"), (Term(2.50, "c", "x"), "+2.5x"), (Term(-3, "c", "x"), "-3x"), - (Term(-3, "c", "x", time_operator=TimeShift(-1)), "-3x.shift([-1])"), + (Term(-3, "c", "x", time_operator=TimeShift([-1])), "-3x.shift([-1])"), (Term(-3, "c", "x", time_aggregator=TimeSum(True)), "-3x.sum(True)"), ( Term( @@ -93,7 +93,7 @@ def test_constant_expressions(lhs: LinearExpression, rhs: LinearExpression) -> N ], ) def test_instantiate_linear_expression_from_dict( - terms_dict: Dict[str, Term], + terms_dict: Dict[TermKey, Term], constant: float, exp_terms: Dict[str, Term], exp_constant: float, @@ -123,8 +123,8 @@ def test_instantiate_linear_expression_from_dict( ), ( LinearExpression(), - LinearExpression([Term(10, "c", "x", TimeShift(-1))]), - LinearExpression([Term(10, "c", "x", TimeShift(-1))]), + LinearExpression([Term(10, "c", "x", time_operator=TimeShift([-1]))]), + LinearExpression([Term(10, "c", "x", time_operator=TimeShift([-1]))]), ), ( LinearExpression(), @@ -137,9 +137,9 @@ def test_instantiate_linear_expression_from_dict( ), ( LinearExpression([Term(10, "c", "x")]), - LinearExpression([Term(10, "c", "x", time_operator=TimeShift(-1))]), + LinearExpression([Term(10, "c", "x", time_operator=TimeShift([-1]))]), LinearExpression( - [Term(10, "c", "x"), Term(10, "c", "x", time_operator=TimeShift(-1))] + [Term(10, "c", "x"), Term(10, "c", "x", time_operator=TimeShift([-1]))] ), ), ( @@ -150,7 +150,7 @@ def test_instantiate_linear_expression_from_dict( 10, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), scenario_operator=Expectation(), ) ] @@ -162,7 +162,7 @@ def test_instantiate_linear_expression_from_dict( 10, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), scenario_operator=Expectation(), ), ] @@ -216,7 +216,7 @@ def test_operation_that_leads_to_term_with_zero_coefficient_should_be_removed_fr 10, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), scenario_operator=Expectation(), ) ], @@ -229,7 +229,7 @@ def test_operation_that_leads_to_term_with_zero_coefficient_should_be_removed_fr 20, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), scenario_operator=Expectation(), ) ], @@ -267,7 +267,7 @@ def test_multiplication_of_two_non_constant_terms_should_raise_value_error() -> 10, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), time_aggregator=TimeSum(False), scenario_operator=Expectation(), ) @@ -280,7 +280,7 @@ def test_multiplication_of_two_non_constant_terms_should_raise_value_error() -> -10, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), time_aggregator=TimeSum(False), scenario_operator=Expectation(), ) @@ -314,8 +314,8 @@ def test_negation(e1: LinearExpression, expected: LinearExpression) -> None: ), ( LinearExpression(), - LinearExpression([Term(10, "c", "x", time_operator=TimeShift(-1))]), - LinearExpression([Term(-10, "c", "x", time_operator=TimeShift(-1))]), + LinearExpression([Term(10, "c", "x", time_operator=TimeShift([-1]))]), + LinearExpression([Term(-10, "c", "x", time_operator=TimeShift([-1]))]), ), ( LinearExpression(), @@ -328,9 +328,9 @@ def test_negation(e1: LinearExpression, expected: LinearExpression) -> None: ), ( LinearExpression([Term(10, "c", "x")]), - LinearExpression([Term(10, "c", "x", time_operator=TimeShift(-1))]), + LinearExpression([Term(10, "c", "x", time_operator=TimeShift([-1]))]), LinearExpression( - [Term(10, "c", "x"), Term(-10, "c", "x", time_operator=TimeShift(-1))] + [Term(10, "c", "x"), Term(-10, "c", "x", time_operator=TimeShift([-1]))] ), ), ( @@ -341,7 +341,7 @@ def test_negation(e1: LinearExpression, expected: LinearExpression) -> None: 10, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), time_aggregator=TimeSum(False), scenario_operator=Expectation(), ) @@ -354,7 +354,7 @@ def test_negation(e1: LinearExpression, expected: LinearExpression) -> None: -10, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), time_aggregator=TimeSum(False), scenario_operator=Expectation(), ), @@ -389,7 +389,7 @@ def test_substraction( 10, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), time_aggregator=TimeSum(False), scenario_operator=Expectation(), ) @@ -403,7 +403,7 @@ def test_substraction( 2, "c", "x", - time_operator=TimeShift(-1), + time_operator=TimeShift([-1]), time_aggregator=TimeSum(False), scenario_operator=Expectation(), ) diff --git a/tests/unittests/expressions/test_port_resolver.py b/tests/unittests/expressions/test_port_resolver.py index e38f20cb..ad1370b4 100644 --- a/tests/unittests/expressions/test_port_resolver.py +++ b/tests/unittests/expressions/test_port_resolver.py @@ -19,7 +19,7 @@ from andromede.model.model import PortFieldId -def test_port_field_resolution(): +def test_port_field_resolution() -> None: ports_expressions: Dict[PortFieldKey, List[ExpressionNode]] = {} key = PortFieldKey("com_id", PortFieldId(field_name="field", port_name="port")) @@ -34,7 +34,7 @@ def test_port_field_resolution(): ) -def test_port_field_resolution_sum(): +def test_port_field_resolution_sum() -> None: ports_expressions: Dict[PortFieldKey, List[ExpressionNode]] = {} key = PortFieldKey("com_id", PortFieldId(field_name="field", port_name="port")) diff --git a/tests/unittests/model/test_model_parsing.py b/tests/unittests/model/test_model_parsing.py index a9234839..6512ed98 100644 --- a/tests/unittests/model/test_model_parsing.py +++ b/tests/unittests/model/test_model_parsing.py @@ -32,7 +32,7 @@ from andromede.model.resolve_library import resolve_library -def test_library_parsing(data_dir: Path): +def test_library_parsing(data_dir: Path) -> None: lib_file = data_dir / "lib.yml" with lib_file.open() as f: @@ -117,7 +117,7 @@ def test_library_parsing(data_dir: Path): ) -def test_library_error_parsing(data_dir: Path): +def test_library_error_parsing(data_dir: Path) -> None: lib_file = data_dir / "model_port_definition_ko.yml" with lib_file.open() as f: @@ -130,7 +130,7 @@ def test_library_error_parsing(data_dir: Path): resolve_library(input_lib) -def test_library_port_model_ok_parsing(data_dir: Path): +def test_library_port_model_ok_parsing(data_dir: Path) -> None: lib_file = data_dir / "model_port_definition_ok.yml" with lib_file.open() as f: diff --git a/tests/unittests/study/test_components_parsing.py b/tests/unittests/study/test_components_parsing.py index ddae9cbd..f72c5c2f 100644 --- a/tests/unittests/study/test_components_parsing.py +++ b/tests/unittests/study/test_components_parsing.py @@ -36,7 +36,9 @@ def input_library( return parse_yaml_library(lib) -def test_parsing_components_ok(input_component, input_library): +def test_parsing_components_ok( + input_component: InputComponents, input_library: InputLibrary +) -> None: assert len(input_component.components) == 2 assert len(input_component.nodes) == 1 assert len(input_component.connections) == 2 @@ -48,13 +50,17 @@ def test_parsing_components_ok(input_component, input_library): assert len(result.connections) == 2 -def test_consistency_check_ok(input_component, input_library): +def test_consistency_check_ok( + input_component: InputComponents, input_library: InputLibrary +) -> None: result_lib = resolve_library(input_library) result_comp = resolve_components_and_cnx(input_component, result_lib) consistency_check(result_comp.components, result_lib.models) -def test_consistency_check_ko(input_component, input_library): +def test_consistency_check_ko( + input_component: InputComponents, input_library: InputLibrary +) -> None: result_lib = resolve_library(input_library) result_comp = resolve_components_and_cnx(input_component, result_lib) result_lib.models.pop("generator") @@ -65,7 +71,9 @@ def test_consistency_check_ko(input_component, input_library): consistency_check(result_comp.components, result_lib.models) -def test_basic_balance_using_yaml(input_component, input_library) -> None: +def test_basic_balance_using_yaml( + input_component: InputComponents, input_library: InputLibrary +) -> None: result_lib = resolve_library(input_library) components_input = resolve_components_and_cnx(input_component, result_lib) consistency_check(components_input.components, result_lib.models) @@ -87,7 +95,7 @@ def generate_data_for_short_term_storage_test(scenarios: int) -> TimeScenarioSer for scenario in range(scenarios): for absolute_timestep in range(10): if absolute_timestep == 0: - data[TimeScenarioIndex(absolute_timestep, scenario)] = -18 + data[TimeScenarioIndex(absolute_timestep, scenario)] = -18.0 else: data[TimeScenarioIndex(absolute_timestep, scenario)] = 2 * efficiency diff --git a/tests/unittests/test_data.py b/tests/unittests/test_data.py index 02f9d979..d41628dc 100644 --- a/tests/unittests/test_data.py +++ b/tests/unittests/test_data.py @@ -333,7 +333,7 @@ def test_requirements_consistency_scenario_varying_parameter_with_correct_data_p database.requirements_consistency(network) -def test_load_data_from_txt(data_dir: Path): +def test_load_data_from_txt(data_dir: Path) -> None: txt_file = "gen-costs" gen_costs = load_ts_from_txt(txt_file, data_dir) diff --git a/tests/unittests/test_model.py b/tests/unittests/test_model.py index c99f7abb..3917af54 100644 --- a/tests/unittests/test_model.py +++ b/tests/unittests/test_model.py @@ -208,7 +208,7 @@ def test_invalid_port_field_definition_should_raise(expression: ExpressionNode) port_field_def(port_name="p", field_name="f", definition=expression) -def test_constraint_equals(): +def test_constraint_equals() -> None: # checks in particular that expressions are correctly compared assert Constraint(name="c", expression=var("x") <= param("p")) == Constraint( name="c", expression=var("x") <= param("p") diff --git a/tests/unittests/test_utils.py b/tests/unittests/test_utils.py index f88477eb..44d4da5c 100644 --- a/tests/unittests/test_utils.py +++ b/tests/unittests/test_utils.py @@ -27,7 +27,7 @@ def test_get_or_add_should_evaluate_lazily() -> None: d = {"key1": "value1"} - def raise_factory() -> None: + def raise_factory() -> str: raise AssertionError("No value should be created") assert get_or_add(d, "key1", raise_factory) == "value1" From 3353e422840c4d1e4f2e83fa0cf2259b4ed2f03d Mon Sep 17 00:00:00 2001 From: Juliette-Gerbaux Date: Mon, 5 Aug 2024 17:53:02 +0200 Subject: [PATCH 2/2] Fix ci --- tests/functional/conftest.py | 2 +- tests/functional/test_andromede_yml.py | 2 +- tests/models/conftest.py | 2 +- tests/models/test_electrolyzer_n_inputs_yaml.py | 2 +- tests/models/test_quota_co2_yaml.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index 91b3b539..004e5dab 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -14,7 +14,7 @@ import pytest from andromede.model.parsing import parse_yaml_library -from andromede.model.resolve_library import resolve_library, Library +from andromede.model.resolve_library import Library, resolve_library @pytest.fixture(scope="session") diff --git a/tests/functional/test_andromede_yml.py b/tests/functional/test_andromede_yml.py index 53a87711..61812b62 100644 --- a/tests/functional/test_andromede_yml.py +++ b/tests/functional/test_andromede_yml.py @@ -4,6 +4,7 @@ from andromede.expression import literal, param, var from andromede.expression.indexing_structure import IndexingStructure from andromede.model import Model, ModelPort, float_parameter, float_variable, model +from andromede.model.library import Library from andromede.model.model import PortFieldDefinition, PortFieldId from andromede.simulation import ( BlockBorderManagement, @@ -21,7 +22,6 @@ TimeScenarioSeriesData, create_component, ) -from andromede.model.library import Library def test_network(lib: Library) -> None: diff --git a/tests/models/conftest.py b/tests/models/conftest.py index 8808612c..10cfd577 100644 --- a/tests/models/conftest.py +++ b/tests/models/conftest.py @@ -14,7 +14,7 @@ import pytest from andromede.model.parsing import parse_yaml_library -from andromede.model.resolve_library import resolve_library, Library +from andromede.model.resolve_library import Library, resolve_library @pytest.fixture(scope="session") diff --git a/tests/models/test_electrolyzer_n_inputs_yaml.py b/tests/models/test_electrolyzer_n_inputs_yaml.py index f783e535..f7bfb8f0 100644 --- a/tests/models/test_electrolyzer_n_inputs_yaml.py +++ b/tests/models/test_electrolyzer_n_inputs_yaml.py @@ -13,6 +13,7 @@ import math from pathlib import Path +from andromede.model.library import Library from andromede.simulation import OutputValues, TimeBlock, build_problem from andromede.study import ( ConstantData, @@ -22,7 +23,6 @@ PortRef, create_component, ) -from andromede.model.library import Library """ for every following test we have two electrical productions with an electrolyzer converting to a gaz flow diff --git a/tests/models/test_quota_co2_yaml.py b/tests/models/test_quota_co2_yaml.py index 1daec031..1c59494e 100644 --- a/tests/models/test_quota_co2_yaml.py +++ b/tests/models/test_quota_co2_yaml.py @@ -13,6 +13,7 @@ import math from pathlib import Path +from andromede.model.library import Library from andromede.simulation import OutputValues, TimeBlock, build_problem from andromede.study import ( ConstantData, @@ -22,7 +23,6 @@ PortRef, create_component, ) -from andromede.model.library import Library """ build the quota CO² test system.