def test_solve(ixmp_cli, test_mp): populate_test_platform(test_mp) cmd = [ '--platform', test_mp.name, '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], 'solve', '--remove-solution' ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # test failing solving without solution removal cmd = [ '--platform', test_mp.name, '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], 'solve' ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 1, result.output # missing scenario cmd = [ '--platform', test_mp.name, '--model', 'non-existing', '--scenario', models['dantzig']['scenario'], 'solve' ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 1, result.output assert "Error: model='non-existing'" in result.output # no platform/scenario provided cmd = ['solve'] result = ixmp_cli.invoke(cmd) assert result.exit_code != 0, result.output assert "Error: give --url before command solve" in result.output
def test_import_ts(ixmp_cli, test_mp, test_data_path): # Ensure the 'canning problem'/'standard' TimeSeries exists populate_test_platform(test_mp) # Invoke the CLI to import data to version 1 of the TimeSeries result = ixmp_cli.invoke([ '--platform', test_mp.name, '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], '--version', '1', 'import', 'timeseries', '--firstyear', '2020', '--lastyear', '2200', str(test_data_path / 'timeseries_canning.csv'), ]) assert result.exit_code == 0, result.output # Expected data exp = pd.DataFrame.from_dict({ 'region': ['World'], 'variable': ['Testing'], 'unit': ['???'], 'year': [2020], 'value': [28.3], 'model': ['canning problem'], 'scenario': ['standard'], }) # The specified TimeSeries version contains the expected data scen = ixmp.Scenario(test_mp, **models['dantzig'], version=1) assert_frame_equal(scen.timeseries(variable=['Testing']), exp) # The data is not present in other versions scen = ixmp.Scenario(test_mp, **models['dantzig'], version=2) assert len(scen.timeseries(variable=['Testing'])) == 0
def test_format_scenario_list(test_mp_f): # Use the function-scoped fixture for precise version numbers mp = test_mp_f populate_test_platform(mp) # Expected results assert [ "", "Douglas Adams/", " Hitchhiker#1", "", "canning problem/", " standard#2 1–3", "", "2 model name(s)", "2 scenario name(s)", "2 (model, scenario) combination(s)", "4 total scenarios", ] == utils.format_scenario_list(mp) # With as_url=True assert (list( map( lambda s: s.format(mp.name), [ "ixmp://{}/Douglas Adams/Hitchhiker#1", "ixmp://{}/canning problem/standard#2", ], )) == utils.format_scenario_list(mp, as_url=True))
def test_format_scenario_list(test_mp): populate_test_platform(test_mp) exp = [ '', 'Douglas Adams/', ' Hitchhiker#1', '', 'canning problem/', ' standard#2 1–3', '', '2 model name(s)', '2 scenario name(s)', '2 (model, scenario) combination(s)', '4 total scenarios', ] # Expected results assert exp == utils.format_scenario_list(test_mp) # With as_url=True exp = list( map(lambda s: s.format(test_mp.name), [ 'ixmp://{}/Douglas Adams/Hitchhiker#1', 'ixmp://{}/canning problem/standard#2', ])) assert exp == utils.format_scenario_list(test_mp, as_url=True)
def test_format_scenario_list(test_mp): populate_test_platform(test_mp) exp = [ "", "Douglas Adams/", " Hitchhiker#1", "", "canning problem/", " standard#2 1–3", "", "2 model name(s)", "2 scenario name(s)", "2 (model, scenario) combination(s)", "4 total scenarios", ] # Expected results assert exp == utils.format_scenario_list(test_mp) # With as_url=True exp = list( map( lambda s: s.format(test_mp.name), [ "ixmp://{}/Douglas Adams/Hitchhiker#1", "ixmp://{}/canning problem/standard#2", ], ) ) assert exp == utils.format_scenario_list(test_mp, as_url=True)
def test_excel_io(ixmp_cli, test_mp, tmp_path): populate_test_platform(test_mp) tmp_path /= "dantzig.xlsx" url = ( f"ixmp://{test_mp.name}/{models['dantzig']['model']}/" f"{models['dantzig']['scenario']}" ) # Invoke the CLI to export data to Excel cmd = ["--url", url, "export", str(tmp_path)] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Export with a maximum row limit per sheet tmp_path2 = tmp_path.with_name("dantzig2.xlsx") cmd = cmd[:-1] + [str(tmp_path2), "--max-row", 2] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Fails without platform/scenario info assert ixmp_cli.invoke(cmd[2:]).exit_code == UsageError.exit_code # Invoke the CLI to read data from Excel cmd = ["--url", url, "import", "scenario", str(tmp_path)] # Fails without platform/scenario info assert ixmp_cli.invoke(cmd[2:]).exit_code == UsageError.exit_code # Fails without --discard-solution result = ixmp_cli.invoke(cmd) assert result.exit_code == 1 assert "This Scenario has a solution" in result.output # Succeeds with --discard-solution cmd.insert(-1, "--discard-solution") result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Import into a new model name: fails without --init-items cmd = [ "--url", f"ixmp://{test_mp.name}/foo model/bar scenario#new", "import", "scenario", str(tmp_path), ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 1, result.output # Succeeds with --init-items cmd.insert(-1, "--init-items") result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Import from a file that has multiple sheets (due to row limit) cmd[-1] = str(tmp_path2) result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output
def test_excel_io(ixmp_cli, test_mp, tmp_path): populate_test_platform(test_mp) tmp_path /= 'dantzig.xlsx' # Invoke the CLI to export data to Excel cmd = [ '--platform', test_mp.name, '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], 'export', str(tmp_path), ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Fails without platform/scenario info assert ixmp_cli.invoke(cmd[6:]).exit_code == UsageError.exit_code # Invoke the CLI to read data from Excel cmd = [ '--platform', test_mp.name, '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], 'import', 'scenario', str(tmp_path), ] # Fails without platform/scenario info assert ixmp_cli.invoke(cmd[6:]).exit_code == UsageError.exit_code # Fails without --discard-solution result = ixmp_cli.invoke(cmd) assert result.exit_code == 1 assert 'This Scenario has a solution' in result.output # Succeeds with --discard-solution cmd.insert(-1, '--discard-solution') result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Import into a new model name fails without --init-items cmd = [ '--platform', test_mp.name, '--model', 'foo model', '--scenario', 'bar scenario', '--version', 'new', 'import', 'scenario', str(tmp_path), ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 1 # Succeeds cmd.insert(-1, '--init-items') result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output
def test_solve(ixmp_cli, test_mp): populate_test_platform(test_mp) cmd = [ "--platform", test_mp.name, "--model", models["dantzig"]["model"], "--scenario", models["dantzig"]["scenario"], "solve", "--remove-solution", ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # test failing solving without solution removal cmd = [ "--platform", test_mp.name, "--model", models["dantzig"]["model"], "--scenario", models["dantzig"]["scenario"], "solve", ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 1, result.output # missing scenario cmd = [ "--platform", test_mp.name, "--model", "non-existing", "--scenario", models["dantzig"]["scenario"], "solve", ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 1, result.output assert "Error: model='non-existing'" in result.output result = ixmp_cli.invoke([f"--url=ixmp://{test_mp.name}/foo/bar", "solve"]) assert UsageError.exit_code == result.exit_code, result.output assert "Error: not found" in result.output # no platform/scenario provided cmd = ["solve"] result = ixmp_cli.invoke(cmd) assert result.exit_code != 0, result.output assert "Error: give --url before command solve" in result.output
def test_import_ts(ixmp_cli, test_mp, test_data_path): # Ensure the 'canning problem'/'standard' TimeSeries exists populate_test_platform(test_mp) # Invoke the CLI to import data to version 1 of the TimeSeries result = ixmp_cli.invoke( [ "--platform", test_mp.name, "--model", models["dantzig"]["model"], "--scenario", models["dantzig"]["scenario"], "--version", "1", "import", "timeseries", "--firstyear", "2020", "--lastyear", "2200", str(test_data_path / "timeseries_canning.csv"), ] ) assert result.exit_code == 0, result.output # Expected data exp = pd.DataFrame.from_dict( { "region": ["World"], "variable": ["Testing"], "unit": ["???"], "year": [2020], "value": [28.3], "model": ["canning problem"], "scenario": ["standard"], } ) # The specified TimeSeries version contains the expected data scen = ixmp.Scenario(test_mp, **models["dantzig"], version=1) assert_frame_equal(scen.timeseries(variable=["Testing"]), exp) # The data is not present in other versions scen = ixmp.Scenario(test_mp, **models["dantzig"], version=2) assert len(scen.timeseries(variable=["Testing"])) == 0
def test_excel_io_filters(ixmp_cli, test_mp, tmp_path): populate_test_platform(test_mp) tmp_path /= "dantzig.xlsx" url = ( f"ixmp://{test_mp.name}/{models['dantzig']['model']}/" f"{models['dantzig']['scenario']}" ) # Invoke the CLI to export data to Excel, with filters cmd = [ "--url", url, "export", str(tmp_path), "--", "i=seattle", ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Import into a new model name url = f"ixmp://{test_mp.name}/foo model/bar scenario#new" cmd = [ "--url", url, "import", "scenario", "--init-items", str(tmp_path), ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Load one of the imported parameters scen = ixmp.Scenario(test_mp, "foo model", "bar scenario") d = scen.par("d") # Data in (imported from) file has only filtered elements assert set(d["i"].unique()) == {"seattle"} assert len(d) == 3
def mp(test_mp): """A Platform containing test data.""" populate_test_platform(test_mp) yield test_mp
def test_excel_io(ixmp_cli, test_mp, tmp_path): populate_test_platform(test_mp) tmp_path /= 'dantzig.xlsx' # Invoke the CLI to export data to Excel cmd = [ '--platform', test_mp.name, '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], 'export', str(tmp_path), ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Export with a maximum row limit per sheet tmp_path2 = tmp_path.with_name('dantzig2.xlsx') cmd = cmd[:-1] + [str(tmp_path2), '--max-row', 2] result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Fails without platform/scenario info assert ixmp_cli.invoke(cmd[6:]).exit_code == UsageError.exit_code # Invoke the CLI to read data from Excel cmd = [ '--platform', test_mp.name, '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], 'import', 'scenario', str(tmp_path), ] # Fails without platform/scenario info assert ixmp_cli.invoke(cmd[6:]).exit_code == UsageError.exit_code # Fails without --discard-solution result = ixmp_cli.invoke(cmd) assert result.exit_code == 1 assert 'This Scenario has a solution' in result.output # Succeeds with --discard-solution cmd.insert(-1, '--discard-solution') result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Import into a new model name fails without --init-items cmd = [ '--platform', test_mp.name, '--model', 'foo model', '--scenario', 'bar scenario', '--version', 'new', 'import', 'scenario', str(tmp_path), ] result = ixmp_cli.invoke(cmd) assert result.exit_code == 1 # Succeeds cmd.insert(-1, '--init-items') result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output # Import from a file that has multiple sheets (due to row limit) cmd[cmd.index(str(tmp_path))] = str(tmp_path2) result = ixmp_cli.invoke(cmd) assert result.exit_code == 0, result.output