From 4d32748d207fd092633dd7ac2f3c447e04bfea9f Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Fri, 20 Mar 2020 23:15:56 +0100 Subject: [PATCH 01/44] Add backend.io.s_write_excel --- ixmp/backend/base.py | 14 ++++++++++-- ixmp/backend/io.py | 38 ++++++++++++++++++++++++++++++++ ixmp/backend/jdbc.py | 8 +++++++ ixmp/core.py | 12 ++++++++++ ixmp/tests/core/test_scenario.py | 7 ++++++ 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 ixmp/backend/io.py diff --git a/ixmp/backend/base.py b/ixmp/backend/base.py index a62770dda..27593753b 100644 --- a/ixmp/backend/base.py +++ b/ixmp/backend/base.py @@ -4,6 +4,7 @@ from ixmp.core import TimeSeries, Scenario from . import ItemType +from .io import s_write_excel class Backend(ABC): @@ -270,6 +271,12 @@ def write_file(self, path, item_type: ItemType, **kwargs): the `path` and `item_type` methods. For all other combinations, it **must** raise :class:`NotImplementedError`. + The default implementation supports: + + - `path` ending in '.xlsx', `item_type` is ItemType.MODEL: write a + single Scenario given by kwargs['filters']['scenario'] to file using + :meth:`pandas.DataFrame.to_excel`. + Parameters ---------- path : os.PathLike @@ -289,8 +296,11 @@ def write_file(self, path, item_type: ItemType, **kwargs): -------- read_file """ - # TODO move message_ix.core.to_excel here - raise NotImplementedError + s, filters = self._handle_rw_filters(kwargs.pop('filters', {})) + if path.suffix == '.xlsx' and item_type is ItemType.MODEL and s: + s_write_excel(self, s, path) + else: + raise NotImplementedError @staticmethod def _handle_rw_filters(filters: dict): diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py new file mode 100644 index 000000000..565caaec6 --- /dev/null +++ b/ixmp/backend/io.py @@ -0,0 +1,38 @@ +import pandas as pd + + +def s_write_excel(be, s, path): + """Write *s* to a Microsoft Excel file at *path*.""" + # List items to be exported + name_type = {} + for ix_type in ('set', 'par', 'var', 'equ'): + for name in be.list_items(s, ix_type): + name_type[name] = ix_type + + # Open file + writer = pd.ExcelWriter(path, engine='xlsxwriter') + + # Extract and write data + for name, ix_type in name_type.items(): + data = be.item_get_elements(s, ix_type, name) + + if isinstance(data, dict): + data = pd.Series(data, name=name).to_frame() + if ix_type in ('par', 'var', 'equ'): + # Scalar parameter + data = data.transpose() + elif isinstance(data, pd.Series): + data.name = name + + if data.empty: + continue + + data.to_excel(writer, sheet_name=name, index=False) + + # Also write the name -> type map + pd.Series(name_type, name='ix_type') \ + .rename_axis(index='item') \ + .reset_index() \ + .to_excel(writer, sheet_name='ix_type_mapping', index=False) + + writer.save() diff --git a/ixmp/backend/jdbc.py b/ixmp/backend/jdbc.py index b123d1fde..92ddce78a 100644 --- a/ixmp/backend/jdbc.py +++ b/ixmp/backend/jdbc.py @@ -353,6 +353,14 @@ def write_file(self, path, item_type: ItemType, **kwargs): -------- .Backend.write_file """ + try: + # Call the default implementation, e.g. for .xlsx + super().write_file(path, item_type, **kwargs) + except NotImplementedError: + pass + else: + return + ts, filters = self._handle_rw_filters(kwargs.pop('filters', {})) if path.suffix == '.gdx' and item_type is ItemType.SET | ItemType.PAR: if len(filters): diff --git a/ixmp/core.py b/ixmp/core.py index 0ccac8857..c75c4c979 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -1441,6 +1441,18 @@ def set_meta(self, name, value): """ self._backend('set_meta', name, value) + # Input and output + def to_excel(self, path): + """Write Scenario to a Microsoft Excel file. + + Parameters + ---------- + path : os.PathLike + File to write. Must have suffix '.xlsx'. + """ + self.platform._backend.write_file(path, ItemType.MODEL, + filters=dict(scenario=self)) + def to_iamc_template(df): """Format pd.DataFrame *df* in IAMC style. diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index 73dd0bc00..9b123aa56 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -192,6 +192,13 @@ def test_load_scenario_data_clear_cache(self, mp): scen.load_scenario_data() scen.platform._backend.cache_invalidate(scen, 'par', 'd') + # I/O + def test_to_excel(self, scen, tmp_path): + # Solved Scenario can be written to file + scen.to_excel(tmp_path / 'output.xlsx') + + # TODO test contents of the file + # Combined tests def test_meta(self, mp): test_dict = { From 6458b1a3ebe0a475eedb91aeac1ebeb725fa3198 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 00:05:27 +0100 Subject: [PATCH 02/44] Add backend.io.s_read_excel --- ixmp/backend/base.py | 15 ++++-- ixmp/backend/io.py | 90 ++++++++++++++++++++++++++++++++ ixmp/backend/jdbc.py | 8 +++ ixmp/core.py | 25 +++++++++ ixmp/tests/core/test_scenario.py | 15 ++++-- 5 files changed, 147 insertions(+), 6 deletions(-) diff --git a/ixmp/backend/base.py b/ixmp/backend/base.py index 27593753b..246931e13 100644 --- a/ixmp/backend/base.py +++ b/ixmp/backend/base.py @@ -4,7 +4,7 @@ from ixmp.core import TimeSeries, Scenario from . import ItemType -from .io import s_write_excel +from .io import s_read_excel, s_write_excel class Backend(ABC): @@ -233,6 +233,12 @@ def read_file(self, path, item_type: ItemType, **kwargs): the `path` and `item_type` methods. For all other combinations, it **must** raise :class:`NotImplementedError`. + The default implementation supports: + + - `path` ending in '.xlsx', `item_type` is ItemType.MODEL: read a + single Scenario given by kwargs['filters']['scenario'] from file + using :meth:`pandas.DataFrame.read_excel`. + Parameters ---------- path : os.PathLike @@ -261,8 +267,11 @@ def read_file(self, path, item_type: ItemType, **kwargs): -------- write_file """ - # TODO move message_ix.core.read_excel here - raise NotImplementedError + s, filters = self._handle_rw_filters(kwargs.pop('filters', {})) + if path.suffix == '.xlsx' and item_type is ItemType.MODEL and s: + s_read_excel(self, s, path, **kwargs) + else: + raise NotImplementedError def write_file(self, path, item_type: ItemType, **kwargs): """OPTIONAL: Write Platform, TimeSeries, or Scenario data to file. diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py index 565caaec6..564e8f598 100644 --- a/ixmp/backend/io.py +++ b/ixmp/backend/io.py @@ -1,6 +1,11 @@ +import logging + import pandas as pd +log = logging.getLogger(__name__) + + def s_write_excel(be, s, path): """Write *s* to a Microsoft Excel file at *path*.""" # List items to be exported @@ -36,3 +41,88 @@ def s_write_excel(be, s, path): .to_excel(writer, sheet_name='ix_type_mapping', index=False) writer.save() + + +def s_read_excel(be, s, path, add_units=False, init_items=False, + commit_steps=False): + """Read data from a Microsoft Excel file at *path* into *s*. + + Parameters + ---------- + be : Backend + s : Scenario + path : os.PathLike + add_units : bool, optional + Add missing units, if any, to the Platform instance. + init_items : bool, optional + Initialize sets and parameters that do not already exist in the + Scenario. + commit_steps : bool, optional + Commit changes after every data addition. + """ + log.info(f'Reading data from {path}') + + # Get item name -> ixmp type mapping + xf = pd.ExcelFile(path) + name_type = xf.parse('ix_type_mapping').set_index('item')['ix_type'] + + # List of sets to add + sets_to_add = [(n, None) for n in name_type.index[name_type == 'set']] + + # Add sets + for name, data in sets_to_add: + first_pass = data is None + if first_pass: + data = xf.parse(name) + if (first_pass and data.columns == [name]) or not first_pass: + # Index set or second appearance; add immediately + if init_items: + idx_sets = data.columns if len(data.columns) > 1 else None + s.init_set(name, idx_sets) + if data.columns == [name]: + data = data[name].values + s.add_set(name, data) + else: + # Reappend to the list to process later + sets_to_add.append[(name, data)] + + if commit_steps: + s.commit(f'Loaded initial data from {path}') + s.check_out() + + if add_units: + units = set(be.get_units()) + + # Read parameter data + for name, ix_type in name_type[name_type != 'set'].items(): + if ix_type in ('equ', 'var'): + log.info(f'Not importing item {name!r} of type {ix_type!r}') + continue + + df = xf.parse(name) + + if add_units: + to_add = set(df['unit'].unique()) - units + for unit in to_add: + log.info(f'Adding missing unit: {unit}') + be.set_unit(unit, f'Loaded from {path}') + + # Update the set + units |= to_add + + idx_sets = list( + filter(lambda v: v not in ('value', 'unit'), df.columns) + ) + + if init_items: + s.init_par(name, idx_sets) + + if not len(idx_sets): + # No index sets -> scalar parameter + df['key'] = None + + s.add_par(name, df) + + if commit_steps: + s.commit(f'Loaded {name} from {path}') + s.check_out() diff --git a/ixmp/backend/jdbc.py b/ixmp/backend/jdbc.py index 92ddce78a..b39e9ea17 100644 --- a/ixmp/backend/jdbc.py +++ b/ixmp/backend/jdbc.py @@ -301,6 +301,14 @@ def read_file(self, path, item_type: ItemType, **kwargs): -------- .Backend.read_file """ + try: + # Call the default implementation, e.g. for .xlsx + super().read_file(path, item_type, **kwargs) + except NotImplementedError: + pass + else: + return + ts, filters = self._handle_rw_filters(kwargs.pop('filters', {})) if path.suffix == '.gdx' and item_type is ItemType.MODEL: kw = {'check_solution', 'comment', 'equ_list', 'var_list'} diff --git a/ixmp/core.py b/ixmp/core.py index c75c4c979..38f2ebb8c 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -1453,6 +1453,31 @@ def to_excel(self, path): self.platform._backend.write_file(path, ItemType.MODEL, filters=dict(scenario=self)) + def read_excel(self, path, add_units=False, init_items=False, + commit_steps=False): + """Read a Microsoft Excel file into the Scenario. + + Parameters + ---------- + path : os.PathLike + File to read. Must have suffix '.xlsx'. + add_units : bool, optional + Add missing units, if any, to the Platform instance. + init_items : bool, optional + Initialize sets and parameters that do not already exist in the + Scenario. + commit_steps : bool, optional + Commit changes after every data addition. + """ + self.platform._backend.read_file( + path, + ItemType.MODEL, + filters=dict(scenario=self), + add_units=add_units, + init_items=init_items, + commit_steps=commit_steps, + ) + def to_iamc_template(df): """Format pd.DataFrame *df* in IAMC style. diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index 9b123aa56..4187841de 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -193,11 +193,20 @@ def test_load_scenario_data_clear_cache(self, mp): scen.platform._backend.cache_invalidate(scen, 'par', 'd') # I/O - def test_to_excel(self, scen, tmp_path): + def test_excel_io(self, scen, scen_empty, tmp_path): + tmp_path /= 'output.xlsx' + # Solved Scenario can be written to file - scen.to_excel(tmp_path / 'output.xlsx') + scen.to_excel(tmp_path) + + # File can be read + scen_empty.read_excel(tmp_path, init_items=True) + + # Contents of the Scenarios are the same + assert scen_empty.par_list() == scen.par_list() + assert scen_empty.set_list() == scen.set_list() - # TODO test contents of the file + # TODO test more thoroughly # Combined tests def test_meta(self, mp): From 0613cf84e442d90c5c7a670c0c9570c0d5e0d80e Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 00:08:12 +0100 Subject: [PATCH 03/44] Expand TestScenario.test_excel_io --- ixmp/tests/core/test_scenario.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index 4187841de..c53ce61c1 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -200,13 +200,16 @@ def test_excel_io(self, scen, scen_empty, tmp_path): scen.to_excel(tmp_path) # File can be read - scen_empty.read_excel(tmp_path, init_items=True) + scen_empty.read_excel(tmp_path, init_items=True, commit_steps=True) # Contents of the Scenarios are the same assert scen_empty.par_list() == scen.par_list() assert scen_empty.set_list() == scen.set_list() + # TODO make an exact comparison of the Scenarios - # TODO test more thoroughly + # TODO test with: + # - add_units = True on an empty Platform + # - init_items = False # Combined tests def test_meta(self, mp): From f551acc46fa38250e3eacb59e3063311411ce29a Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 00:22:37 +0100 Subject: [PATCH 04/44] Adjust tests.backend.test_base.test_class --- ixmp/tests/backend/test_base.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ixmp/tests/backend/test_base.py b/ixmp/tests/backend/test_base.py index 0eca463f8..8e50517c9 100644 --- a/ixmp/tests/backend/test_base.py +++ b/ixmp/tests/backend/test_base.py @@ -1,3 +1,5 @@ +from pathlib import Path + import pytest from ixmp.backend import ItemType @@ -62,10 +64,10 @@ class BE2(Backend): # Methods with a default implementation can be called with pytest.raises(NotImplementedError): - be.read_file('path', ItemType.VAR) + be.read_file(Path('foo'), ItemType.VAR) with pytest.raises(NotImplementedError): - be.write_file('path', ItemType.VAR) + be.write_file(Path('foo'), ItemType.VAR) def test_cache_non_hashable(): From ddfe9e7d8253843c34b0b03515d178f0c782ea8a Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 00:28:25 +0100 Subject: [PATCH 05/44] Remove unused utils.pd_read, .pd_write --- ixmp/tests/test_utils.py | 49 ---------------------------------------- ixmp/utils.py | 28 ----------------------- 2 files changed, 77 deletions(-) diff --git a/ixmp/tests/test_utils.py b/ixmp/tests/test_utils.py index 9f1ce5c2e..463a510ad 100644 --- a/ixmp/tests/test_utils.py +++ b/ixmp/tests/test_utils.py @@ -1,6 +1,4 @@ """Tests for ixmp.utils.""" -import pandas as pd -from pandas.testing import assert_frame_equal import pytest from pytest import mark, param @@ -8,53 +6,6 @@ from ixmp.testing import populate_test_platform -def make_obs(fname, exp, **kwargs): - utils.pd_write(exp, fname, index=False) - obs = utils.pd_read(fname, **kwargs) - return obs - - -def test_pd_io_csv(tmp_path): - - fname = tmp_path / "test.csv" - exp = pd.DataFrame({'a': [0, 1], 'b': [2, 3]}) - obs = make_obs(fname, exp) - assert_frame_equal(obs, exp) - - -def test_pd_io_xlsx(tmp_path): - - fname = tmp_path / "test.xlsx" - exp = pd.DataFrame({'a': [0, 1], 'b': [2, 3]}) - obs = make_obs(fname, exp) - assert_frame_equal(obs, exp) - - -def test_pd_io_xlsx_multi(tmp_path): - - fname = tmp_path / "test.xlsx" - exp = { - 'sheet1': pd.DataFrame({'a': [0, 1], 'b': [2, 3]}), - 'sheet2': pd.DataFrame({'c': [4, 5], 'd': [6, 7]}), - } - obs = make_obs(fname, exp, sheet_name=None) - for k, _exp in exp.items(): - _obs = obs[k] - assert_frame_equal(_obs, _exp) - - -def test_pd_write(tmp_path): - - fname = 'test.csv' - d = tmp_path / "sub" - d.mkdir() - - data_frame = [1, 2, 3, 4] - - with pytest.raises(ValueError): - assert utils.pd_write(data_frame, fname) - - def test_check_year(): # If y is a string value, raise a Value Error. diff --git a/ixmp/utils.py b/ixmp/utils.py index 7ec9a3f56..958af0a89 100644 --- a/ixmp/utils.py +++ b/ixmp/utils.py @@ -4,7 +4,6 @@ from urllib.parse import urlparse import pandas as pd -from pathlib import Path # globally accessible logger @@ -119,33 +118,6 @@ def parse_url(url): return platform_info, scenario_info -def pd_read(f, *args, **kwargs): - """Try to read a file with pandas, no fancy stuff""" - f = Path(f) - if f.suffix == '.csv': - return pd.read_csv(f, *args, **kwargs) - else: - return pd.read_excel(f, *args, **kwargs) - - -def pd_write(df, f, *args, **kwargs): - """Try to write one or more dfs with pandas, no fancy stuff""" - f = Path(f) - is_pd = isinstance(df, (pd.DataFrame, pd.Series)) - if f.suffix == '.csv': - if not is_pd: - raise ValueError('Must pass a Dataframe if using csv files') - df.to_csv(f, *args, **kwargs) - else: - writer = pd.ExcelWriter(f, engine='xlsxwriter') - if is_pd: - sheet_name = kwargs.pop('sheet_name', 'Sheet1') - df = {sheet_name: df} - for k, v in df.items(): - v.to_excel(writer, sheet_name=k, *args, **kwargs) - writer.save() - - def year_list(x): """Return the elements of x that can be cast to year (int).""" lst = [] From 730c0a4e7b2dcd3ab33c7124b3e95647417009d9 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 00:41:01 +0100 Subject: [PATCH 06/44] Coerce path inputs to {to,read}_excel to pathlib.Path --- ixmp/core.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ixmp/core.py b/ixmp/core.py index 38f2ebb8c..003df4d08 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -1,6 +1,7 @@ from functools import partial from itertools import repeat, zip_longest import logging +from pathlib import Path from warnings import warn import numpy as np @@ -1450,7 +1451,7 @@ def to_excel(self, path): path : os.PathLike File to write. Must have suffix '.xlsx'. """ - self.platform._backend.write_file(path, ItemType.MODEL, + self.platform._backend.write_file(Path(path), ItemType.MODEL, filters=dict(scenario=self)) def read_excel(self, path, add_units=False, init_items=False, @@ -1470,7 +1471,7 @@ def read_excel(self, path, add_units=False, init_items=False, Commit changes after every data addition. """ self.platform._backend.read_file( - path, + Path(path), ItemType.MODEL, filters=dict(scenario=self), add_units=add_units, From 5b8a70504eeb29d463bdb9e7b4cd4e60bd920715 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 11:16:36 +0100 Subject: [PATCH 07/44] Handle old- and new-style sheets for index sets --- ixmp/backend/base.py | 2 +- ixmp/backend/io.py | 96 ++++++++++++++++++++++---------- ixmp/tests/core/test_scenario.py | 17 +++++- 3 files changed, 82 insertions(+), 33 deletions(-) diff --git a/ixmp/backend/base.py b/ixmp/backend/base.py index 246931e13..88f242c5c 100644 --- a/ixmp/backend/base.py +++ b/ixmp/backend/base.py @@ -761,7 +761,7 @@ def item_get_elements(self, s: Scenario, type, name, filters=None): When *type* is 'set' and *name* an index set (not indexed by other sets). dict - When *type* is 'equ', 'par', or 'set' and *name* is scalar (zero- + When *type* is 'equ', 'par', or 'var' and *name* is scalar (zero- dimensional). The value has the keys 'value' and 'unit' (for 'par') or 'lvl' and 'mrg' (for 'equ' or 'var'). pandas.DataFrame diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py index 564e8f598..d8e423cf2 100644 --- a/ixmp/backend/io.py +++ b/ixmp/backend/io.py @@ -8,38 +8,40 @@ def s_write_excel(be, s, path): """Write *s* to a Microsoft Excel file at *path*.""" - # List items to be exported + # item name -> ixmp type name_type = {} for ix_type in ('set', 'par', 'var', 'equ'): - for name in be.list_items(s, ix_type): - name_type[name] = ix_type + name_type.update({n: ix_type for n in be.list_items(s, ix_type)}) # Open file writer = pd.ExcelWriter(path, engine='xlsxwriter') - # Extract and write data + # Write the name -> type map + pd.Series(name_type, name='ix_type') \ + .rename_axis(index='item') \ + .reset_index() \ + .to_excel(writer, sheet_name='ix_type_mapping', index=False) + for name, ix_type in name_type.items(): + # Extract data: dict, pd.Series, or pd.DataFrame data = be.item_get_elements(s, ix_type, name) if isinstance(data, dict): - data = pd.Series(data, name=name).to_frame() - if ix_type in ('par', 'var', 'equ'): - # Scalar parameter - data = data.transpose() + # Scalar equ/par/var: series with index like 'value', 'unit'. + # Convert to DataFrame with 1 row. + data = pd.Series(data, name=name) \ + .to_frame() \ + .transpose() elif isinstance(data, pd.Series): + # Index set: use own name as the header data.name = name - if data.empty: + # Write empty sets, but not equ/par/var + if ix_type != 'set' and data.empty: continue data.to_excel(writer, sheet_name=name, index=False) - # Also write the name -> type map - pd.Series(name_type, name='ix_type') \ - .rename_axis(index='item') \ - .reset_index() \ - .to_excel(writer, sheet_name='ix_type_mapping', index=False) - writer.save() @@ -62,67 +64,103 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, """ log.info(f'Reading data from {path}') - # Get item name -> ixmp type mapping + # Get item name -> ixmp type mapping as a pd.Series xf = pd.ExcelFile(path) - name_type = xf.parse('ix_type_mapping').set_index('item')['ix_type'] + name_type = xf.parse('ix_type_mapping', index_col='item')['ix_type'] - # List of sets to add + # List of *set name, data) to add sets_to_add = [(n, None) for n in name_type.index[name_type == 'set']] - # Add sets + # Add sets in two passes: + # 1. Index sets, required to initialize other sets. + # 2. Sets indexed by others. for name, data in sets_to_add: first_pass = data is None if first_pass: + # Read data data = xf.parse(name) - if (first_pass and data.columns == [name]) or not first_pass: + + if (first_pass and len(data.columns) == 1) or not first_pass: # Index set or second appearance; add immediately + idx_sets = data.columns + if init_items: - idx_sets = data.columns if len(data.columns) > 1 else None + # Determine index set(s) for this set + if len(idx_sets) == 1: + if idx_sets == [0]: + # Old-style export with uninformative '0' as a column + # header; assume it's an index set + log.warning(f"Add {name} with header '0' as index set") + idx_sets = None + elif idx_sets == [name]: + # Set's own name as column header -> an index set + idx_sets = None + else: + pass # 1-D set indexed by another set + s.init_set(name, idx_sets) - if data.columns == [name]: + + if idx_sets is None or len(idx_sets) == 1: + # Convert DataFrame into a 1-D vector data = data[name].values + s.add_set(name, data) else: # Reappend to the list to process later - sets_to_add.append[(name, data)] + sets_to_add.append((name, data)) if commit_steps: - s.commit(f'Loaded initial data from {path}') + s.commit(f'Loaded sets from {path}') s.check_out() if add_units: + # List of existing units for reference units = set(be.get_units()) # Read parameter data for name, ix_type in name_type[name_type != 'set'].items(): if ix_type in ('equ', 'var'): - log.info(f'Not importing item {name!r} of type {ix_type!r}') + log.info(f'Cannot import {ix_type} {name!r}') continue + # Only parameters beyond this point + df = xf.parse(name) if add_units: + # New units appearing in this parameter to_add = set(df['unit'].unique()) - units + for unit in to_add: - log.info(f'Adding missing unit: {unit}') + log.info(f'Add missing unit: {unit}') be.set_unit(unit, f'Loaded from {path}') - # Update the set + # Update the reference set to avoid re-adding these units units |= to_add + # NB if equ/var were imported, also need to filter 'lvl', 'mrg' here idx_sets = list( filter(lambda v: v not in ('value', 'unit'), df.columns) ) if init_items: + # Same as init_scalar if idx_sets == [] s.init_par(name, idx_sets) if not len(idx_sets): - # No index sets -> scalar parameter + # No index sets -> scalar parameter; must supply empty 'key' column + # for add_par() df['key'] = None s.add_par(name, df) if commit_steps: - s.commit(f'Loaded {name} from {path}') + # Commit after every parameter + s.commit(f'Loaded {ix_type} {name!r} from {path}') s.check_out() + + # if commit_steps: + # # No changes since check_out() above + # s.discard_changes() + # else: + # s.commit(f'Loaded data from {path}') diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index c53ce61c1..f8cbb2e90 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -196,6 +196,16 @@ def test_load_scenario_data_clear_cache(self, mp): def test_excel_io(self, scen, scen_empty, tmp_path): tmp_path /= 'output.xlsx' + # # Add a 1-D set indexed by another set + # # FIXME remove_solution, check_out, commit, solve, commit should not + # # be needed to make this small data addition. + # scen.remove_solution() + # scen.check_out() + # scen.init_set('foo', 'j') + # scen.add_set('foo', [['new-york'], ['topeka']]) + # scen.commit('') + # scen.solve() + # Solved Scenario can be written to file scen.to_excel(tmp_path) @@ -205,11 +215,12 @@ def test_excel_io(self, scen, scen_empty, tmp_path): # Contents of the Scenarios are the same assert scen_empty.par_list() == scen.par_list() assert scen_empty.set_list() == scen.set_list() + # assert scen_empty.set('foo') == scen.set('foo') # TODO make an exact comparison of the Scenarios - # TODO test with: - # - add_units = True on an empty Platform - # - init_items = False + # TODO test: + # - with add_units = True on an empty Platform + # - with init_items = False # Combined tests def test_meta(self, mp): From 3cdb80405bf2f50fb91e3004ff96b66a667bc6cf Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 11:17:06 +0100 Subject: [PATCH 08/44] Improve exception handling in JDBCBackend._get_item --- ixmp/backend/jdbc.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ixmp/backend/jdbc.py b/ixmp/backend/jdbc.py index b39e9ea17..6719be118 100644 --- a/ixmp/backend/jdbc.py +++ b/ixmp/backend/jdbc.py @@ -834,12 +834,12 @@ def _get_item(self, s, ix_type, name, load=True): try: return getattr(self.jindex[s], f'get{ix_type.title()}')(*args) except java.IxException as e: - if re.match('No item [^ ]* exists in this Scenario', e.args[0]): + msg = f'No {ix_type.title()} {name!r} exists in this Scenario!' + if re.match(msg, e.args[0]): # Re-raise as a Python KeyError - raise KeyError(f'No {ix_type.title()} {name!r} exists in this ' - 'Scenario!') from None + raise KeyError(name) from None else: # pragma: no cover - raise RuntimeError('unhandled Java exception') from e + raise RuntimeError(f'unhandled Java exception: {e}') from None def start_jvm(jvmargs=None): From 89b128cee7e352ff28c071945521893fa586dd2c Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 12:26:17 +0100 Subject: [PATCH 09/44] Complete test_excel_io --- ixmp/tests/core/test_scenario.py | 52 +++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index f8cbb2e90..c05c984d2 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -196,31 +196,55 @@ def test_load_scenario_data_clear_cache(self, mp): def test_excel_io(self, scen, scen_empty, tmp_path): tmp_path /= 'output.xlsx' - # # Add a 1-D set indexed by another set - # # FIXME remove_solution, check_out, commit, solve, commit should not - # # be needed to make this small data addition. - # scen.remove_solution() - # scen.check_out() - # scen.init_set('foo', 'j') - # scen.add_set('foo', [['new-york'], ['topeka']]) - # scen.commit('') - # scen.solve() + # FIXME remove_solution, check_out, commit, solve, commit should not + # be needed to make this small data addition. + scen.remove_solution() + scen.check_out() + # A 1-D set indexed by another set + scen.init_set('foo', 'j') + scen.add_set('foo', [['new-york'], ['topeka']]) + # A scalar parameter with unusual units + scen.platform.add_unit('pounds') + scen.init_scalar('bar', 100, 'pounds') + scen.commit('') + scen.solve() # Solved Scenario can be written to file scen.to_excel(tmp_path) - # File can be read + # With init_items=False, can't be read into an empty Scenario + with pytest.raises(ValueError, match="no set 'i'; " + "try init_items=True"): + scen_empty.read_excel(tmp_path) + + # File can be read with init_items=False scen_empty.read_excel(tmp_path, init_items=True, commit_steps=True) # Contents of the Scenarios are the same assert scen_empty.par_list() == scen.par_list() assert scen_empty.set_list() == scen.set_list() - # assert scen_empty.set('foo') == scen.set('foo') + assert_frame_equal(scen_empty.set('foo'), scen.set('foo')) # TODO make an exact comparison of the Scenarios - # TODO test: - # - with add_units = True on an empty Platform - # - with init_items = False + # Data can be read into an existing Scenario without init_items or + # commit_steps + scen_empty.read_excel(tmp_path) + + # A new, empty Platform (different from the one under scen -> mp -> + # test_mp) that lacks all units + mp = ixmp.Platform(backend='jdbc', driver='hsqldb', + url='jdbc:hsqldb:mem:excel_io') + # A Scenario without the 'dantzig' scheme -> no contents at all + s = ixmp.Scenario(mp, model='foo', scenario='bar', scheme='empty', + version='new') + + # Fails with add_units=False + with pytest.raises(ValueError, match="The unit 'pounds' does not exist" + " in the database!"): + s.read_excel(tmp_path, init_items=True) + + # Succeeds with add_units=True + s.read_excel(tmp_path, add_units=True, init_items=True) # Combined tests def test_meta(self, mp): From 543c010dc889a39cf30c70e02ebbe52c5566e68c Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 12:26:53 +0100 Subject: [PATCH 10/44] Use Scenario.scheme if no model arg to Scenario.solve --- ixmp/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ixmp/core.py b/ixmp/core.py index 003df4d08..7dcd58afd 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -1383,7 +1383,7 @@ def solve(self, model=None, callback=None, cb_kwargs={}, **model_options): 'use `remove_solution()` first!') # Instantiate a model - model = get_model(model, **model_options) + model = get_model(model or self.scheme, **model_options) # Validate *callback* argument if callback is not None and not callable(callback): From 2c750416026ee9d18287a6d9bac2ec70f1a250d3 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 12:27:19 +0100 Subject: [PATCH 11/44] Improve exception handling in JDBCBackend._get_item 2 --- ixmp/backend/jdbc.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ixmp/backend/jdbc.py b/ixmp/backend/jdbc.py index 6719be118..b14cc8c8e 100644 --- a/ixmp/backend/jdbc.py +++ b/ixmp/backend/jdbc.py @@ -834,7 +834,9 @@ def _get_item(self, s, ix_type, name, load=True): try: return getattr(self.jindex[s], f'get{ix_type.title()}')(*args) except java.IxException as e: - msg = f'No {ix_type.title()} {name!r} exists in this Scenario!' + # Regex for similar but not consistent messages from Java code + msg = (f"No (item|{ix_type.title()}) '?{name}'? exists in this " + "Scenario!") if re.match(msg, e.args[0]): # Re-raise as a Python KeyError raise KeyError(name) from None From 9c9894e77e7916d99e2af65d85e5823d4a0ad6ae Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 12:27:32 +0100 Subject: [PATCH 12/44] Document limitations of JDBCBackend --- doc/source/api-backend.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/source/api-backend.rst b/doc/source/api-backend.rst index ba02d8780..fa01128e3 100644 --- a/doc/source/api-backend.rst +++ b/doc/source/api-backend.rst @@ -36,6 +36,10 @@ Provided backends .. tip:: Modifying an item by adding or deleting elements invalidates its cache. + JDBCBackend has the following limitations: + + - The `comment` argument to :meth:`Platform.add_unit` is limited to 64 characters. + .. automethod:: ixmp.backend.jdbc.start_jvm Backend API From db38dd511a7f85430771d8f701f29e844fbeeec3 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 12:28:06 +0100 Subject: [PATCH 13/44] =?UTF-8?q?Handle=20existing=20items=20with=20read?= =?UTF-8?q?=5Fexcel(=E2=80=A6,=20init=5Fitems=3DTrue)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ixmp/backend/io.py | 60 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py index d8e423cf2..cb5799b28 100644 --- a/ixmp/backend/io.py +++ b/ixmp/backend/io.py @@ -1,7 +1,10 @@ +from contextlib import contextmanager import logging import pandas as pd +from ixmp.utils import as_str_list + log = logging.getLogger(__name__) @@ -45,6 +48,32 @@ def s_write_excel(be, s, path): writer.save() +@contextmanager +def handle_existing(scenario, ix_type, name, new_idx_sets, path): + """Context manager for :meth:`~.init_set`, :meth:`.init_par`, etc. + + If the init_*() call within the context fails, this checks whether the + exception is fatal; if so, it is re-raised with a readable message. + """ + try: + yield + except ValueError as e: + if 'exists' not in e.args[0]: + raise # Some other ValueError + + # Check that existing item has the same index sets + + # [] and None are equivalent; convert to be consistent + existing = scenario.idx_sets(name) or None + if isinstance(new_idx_sets, list) and new_idx_sets == []: + new_idx_sets = None + + if existing != new_idx_sets: + raise ValueError(f'{ix_type} {name!r} has index sets ' + f'{existing} in Scenario; {new_idx_sets}' + f'in {path}') + + def s_read_excel(be, s, path, add_units=False, init_items=False, commit_steps=False): """Read data from a Microsoft Excel file at *path* into *s*. @@ -98,13 +127,21 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, else: pass # 1-D set indexed by another set - s.init_set(name, idx_sets) + with handle_existing(s, 'set', name, idx_sets, path): + s.init_set(name, idx_sets) - if idx_sets is None or len(idx_sets) == 1: - # Convert DataFrame into a 1-D vector - data = data[name].values + if len(data.columns) == 1: + # Convert data frame into 1-D vector + data = data.iloc[:, 0].values - s.add_set(name, data) + if idx_sets is not None: + # Indexed set must be input as list of list of str + data = list(map(as_str_list, data)) + + try: + s.add_set(name, data) + except KeyError: + raise ValueError(f'no set {name!r}; try init_items=True') else: # Reappend to the list to process later sets_to_add.append((name, data)) @@ -133,7 +170,9 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, for unit in to_add: log.info(f'Add missing unit: {unit}') - be.set_unit(unit, f'Loaded from {path}') + # FIXME cannot use the comment f'Loaded from {path}' here; too + # long for JDBCBackend + be.set_unit(unit, f'Loaded from file') # Update the reference set to avoid re-adding these units units |= to_add @@ -145,7 +184,8 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, if init_items: # Same as init_scalar if idx_sets == [] - s.init_par(name, idx_sets) + with handle_existing(s, ix_type, name, idx_sets, path): + s.init_par(name, idx_sets) if not len(idx_sets): # No index sets -> scalar parameter; must supply empty 'key' column @@ -158,9 +198,3 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, # Commit after every parameter s.commit(f'Loaded {ix_type} {name!r} from {path}') s.check_out() - - # if commit_steps: - # # No changes since check_out() above - # s.discard_changes() - # else: - # s.commit(f'Loaded data from {path}') From 7469c128b8e9ec49536521ec445b7f67e3d981c9 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 13:01:23 +0100 Subject: [PATCH 14/44] Scenario.add_set() with an empty key is a no-op --- ixmp/core.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ixmp/core.py b/ixmp/core.py index 7dcd58afd..96576e56f 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -882,6 +882,10 @@ def add_set(self, name, key, comment=None): # TODO expand docstring (here or in doc/source/api.rst) with examples, # per test_core.test_add_set. + if len(key) == 0: + # No elements to add + return + # Get index names for set *name*, may raise KeyError idx_names = self.idx_names(name) From 6f73837c50dde29323c49f1674b4fa0c243c830e Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 13:02:21 +0100 Subject: [PATCH 15/44] Omit names from the item name -> ixmp type map if no data written --- ixmp/backend/io.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py index cb5799b28..843eb9ed8 100644 --- a/ixmp/backend/io.py +++ b/ixmp/backend/io.py @@ -19,11 +19,7 @@ def s_write_excel(be, s, path): # Open file writer = pd.ExcelWriter(path, engine='xlsxwriter') - # Write the name -> type map - pd.Series(name_type, name='ix_type') \ - .rename_axis(index='item') \ - .reset_index() \ - .to_excel(writer, sheet_name='ix_type_mapping', index=False) + omitted = set() for name, ix_type in name_type.items(): # Extract data: dict, pd.Series, or pd.DataFrame @@ -41,10 +37,21 @@ def s_write_excel(be, s, path): # Write empty sets, but not equ/par/var if ix_type != 'set' and data.empty: + omitted.add(name) continue data.to_excel(writer, sheet_name=name, index=False) + # Discard entries that were not written + for name in omitted: + name_type.pop(name) + + # Write the name -> type map + pd.Series(name_type, name='ix_type') \ + .rename_axis(index='item') \ + .reset_index() \ + .to_excel(writer, sheet_name='ix_type_mapping', index=False) + writer.save() From 86b984a5e31c1a999af534b6662cdf3e9ed3a57b Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 13:03:43 +0100 Subject: [PATCH 16/44] Only log warning when reading sets/pars with mismatched idx_names --- ixmp/backend/io.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py index 843eb9ed8..dfce89c11 100644 --- a/ixmp/backend/io.py +++ b/ixmp/backend/io.py @@ -59,8 +59,8 @@ def s_write_excel(be, s, path): def handle_existing(scenario, ix_type, name, new_idx_sets, path): """Context manager for :meth:`~.init_set`, :meth:`.init_par`, etc. - If the init_*() call within the context fails, this checks whether the - exception is fatal; if so, it is re-raised with a readable message. + If the init_*() call within the context fails, this logs an intelligible + message. """ try: yield @@ -76,9 +76,9 @@ def handle_existing(scenario, ix_type, name, new_idx_sets, path): new_idx_sets = None if existing != new_idx_sets: - raise ValueError(f'{ix_type} {name!r} has index sets ' - f'{existing} in Scenario; {new_idx_sets}' - f'in {path}') + msg = (f'{ix_type} {name!r} has index sets {existing} in Scenario;' + f' index names {new_idx_sets} in {path.name}') + log.warning(msg) def s_read_excel(be, s, path, add_units=False, init_items=False, @@ -118,7 +118,7 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, if (first_pass and len(data.columns) == 1) or not first_pass: # Index set or second appearance; add immediately - idx_sets = data.columns + idx_sets = data.columns.to_list() if init_items: # Determine index set(s) for this set @@ -141,7 +141,7 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, # Convert data frame into 1-D vector data = data.iloc[:, 0].values - if idx_sets is not None: + if idx_sets is not None and idx_sets != [name]: # Indexed set must be input as list of list of str data = list(map(as_str_list, data)) @@ -161,7 +161,7 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, # List of existing units for reference units = set(be.get_units()) - # Read parameter data + # Add equ/par/var data for name, ix_type in name_type[name_type != 'set'].items(): if ix_type in ('equ', 'var'): log.info(f'Cannot import {ix_type} {name!r}') From 3a457111c1893bd9628ed81c57981b343ad9dba9 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 13:03:58 +0100 Subject: [PATCH 17/44] Update docstrings in backend.io --- ixmp/backend/io.py | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py index dfce89c11..2b5e1106c 100644 --- a/ixmp/backend/io.py +++ b/ixmp/backend/io.py @@ -10,7 +10,12 @@ def s_write_excel(be, s, path): - """Write *s* to a Microsoft Excel file at *path*.""" + """Write *s* to a Microsoft Excel file at *path*. + + See also + -------- + Scenario.to_excel + """ # item name -> ixmp type name_type = {} for ix_type in ('set', 'par', 'var', 'equ'): @@ -85,18 +90,9 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, commit_steps=False): """Read data from a Microsoft Excel file at *path* into *s*. - Parameters - ---------- - be : Backend - s : Scenario - path : os.PathLike - add_units : bool, optional - Add missing units, if any, to the Platform instance. - init_items : bool, optional - Initialize sets and parameters that do not already exist in the - Scenario. - commit_steps : bool, optional - Commit changes after every data addition. + See also + -------- + Scenario.read_excel """ log.info(f'Reading data from {path}') From f110a4a0b05fc74ab69c881bf95ed086484cdc16 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:23:02 +0100 Subject: [PATCH 18/44] Harmonize handling of exceptions, format strings in JDBCBackend --- ixmp/backend/jdbc.py | 62 +++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/ixmp/backend/jdbc.py b/ixmp/backend/jdbc.py index b14cc8c8e..cd131fb43 100644 --- a/ixmp/backend/jdbc.py +++ b/ixmp/backend/jdbc.py @@ -72,7 +72,7 @@ def _create_properties(driver=None, path=None, url=None, user=None, if url is None or path is not None: raise ValueError("use JDBCBackend(driver='oracle', url=…)") - full_url = 'jdbc:oracle:thin:@{}'.format(url) + full_url = f'jdbc:oracle:thin:@{url}' elif driver == 'hsqldb': if path is None and url is None: raise ValueError("use JDBCBackend(driver='hsqldb', path=…)") @@ -87,7 +87,7 @@ def _create_properties(driver=None, path=None, url=None, user=None, # URL spec url_path = (str(PurePosixPath(Path(path).resolve())) .replace('\\', '')) - full_url = 'jdbc:hsqldb:file:{}'.format(url_path) + full_url = f'jdbc:hsqldb:file:{url_path}' user = user or 'ixmp' password = password or 'ixmp' @@ -108,6 +108,11 @@ def _read_properties(file): return properties +def _raise_jexception(exc, msg='unhandled Java exception: '): + """Convert Java/JPype exceptions to ordinary Python RuntimeError.""" + raise RuntimeError(f'{msg}{exc.message()}') from None + + class JDBCBackend(CachingBackend): """Backend using JPype/JDBC to connect to Oracle and HyperSQLDB instances. @@ -189,22 +194,18 @@ def __init__(self, jvmargs=None, **kwargs): try: self.jobj = java.Platform('Python', properties) except java.NoClassDefFoundError as e: # pragma: no cover - raise NameError( - '{}\nCheck that dependencies of ixmp.jar are included in {}' - .format(e, Path(__file__).parents[2] / 'lib')) + raise NameError(f'{e}\nCheck that dependencies of ixmp.jar are ' + f"included in {Path(__file__).parents[2] / 'lib'}") except jpype.JException as e: # pragma: no cover # Handle Java exceptions jclass = e.__class__.__name__ - info = '\n{}\n(Java: {})'.format(e, jclass) if jclass.endswith('HikariPool.PoolInitializationException'): redacted = copy(kwargs) redacted.update({'user': '(HIDDEN)', 'password': '(HIDDEN)'}) - raise RuntimeError('unable to connect to database:\n{!r}{}' - .format(redacted, info)) from None + msg = f'unable to connect to database:\n{redacted!r}' elif jclass.endswith('FlywayException'): - raise RuntimeError('when initializing database:' + info) - else: - raise RuntimeError('unhandled Java exception:' + info) from e + msg = f'when initializing database:' + _raise_jexception(e, f'{msg}\n(Java: {jclass})') # Invoke the parent constructor to initialize the cache super().__init__() @@ -316,8 +317,8 @@ def read_file(self, path, item_type: ItemType, **kwargs): if not isinstance(ts, Scenario): raise ValueError('read from GDX requires a Scenario object') elif set(kwargs.keys()) != kw: - raise ValueError(('keyword arguments {} do not match required ' - '{}').format(kwargs.keys(), kw)) + raise ValueError(f'keyword arguments {kwargs.keys()} do not ' + f'match required {kw}') args = ( str(path.parent), @@ -329,7 +330,7 @@ def read_file(self, path, item_type: ItemType, **kwargs): ) if len(kwargs): - raise ValueError('extra keyword arguments {}'.format(kwargs)) + raise ValueError(f'extra keyword arguments {kwargs}') self.jindex[ts].readSolutionFromGDX(*args) @@ -421,7 +422,7 @@ def get(self, ts, version): try: jobj = method(*args) except java.IxException as e: - raise RuntimeError(*e.args) from None + _raise_jexception(e) # Add to index self.jindex[ts] = jobj @@ -443,7 +444,7 @@ def check_out(self, ts, timeseries_only): try: self.jindex[ts].checkOut(timeseries_only) except java.IxException as e: - raise RuntimeError(e) from None + _raise_jexception(e) def commit(self, ts, comment): self.jindex[ts].commit(comment) @@ -570,12 +571,12 @@ def clone(self, s, platform_dest, model, scenario, annotation, f'Clone between {self.__class__} and' f'{platform_dest._backend.__class__}') elif platform_dest._backend is not self: - msg = 'Cross-platform clone of {}.Scenario with'.format( - s.__class__.__module__.split('.')[0]) + package = s.__class__.__module__.split('.')[0] + msg = f'Cross-platform clone of {package}.Scenario with' if keep_solution is False: - raise NotImplementedError(msg + ' `keep_solution=False`') + raise NotImplementedError(f'{msg} `keep_solution=False`') elif 'message_ix' in msg and first_model_year is not None: - raise NotImplementedError(msg + ' first_model_year != None') + raise NotImplementedError(f'{msg} first_model_year != None') # Prepare arguments args = [platform_dest._backend.jobj, model, scenario, annotation, @@ -619,13 +620,10 @@ def init_item(self, s, type, name, idx_sets, idx_names): try: func(name, idx_sets, idx_names) except jpype.JException as e: - e = str(e) - if 'This Scenario cannot be edited' in e: - raise RuntimeError(e) - elif 'already exists' in e: - raise ValueError('{!r} already exists'.format(name)) + if 'already exists' in e.args[0]: + raise ValueError(f'{name!r} already exists') else: - raise + _raise_jexception(e) def delete_item(self, s, type, name): getattr(self.jindex[s], f'remove{type.title()}')(name) @@ -763,7 +761,7 @@ def item_set_elements(self, s, type, name, elements): # Re-raise as Python ValueError raise ValueError(msg) from None else: # pragma: no cover - raise RuntimeError(str(e)) from None + _raise_jexception(e) self.cache_invalidate(s, type, name) @@ -788,7 +786,7 @@ def set_meta(self, s, name, value): _type = {int: 'Num', float: 'Num', str: 'Str', bool: 'Bool'}[_type] method_name = 'setMeta' + _type except KeyError: - raise TypeError('Cannot store metadata of type {}'.format(_type)) + raise TypeError(f'Cannot store metadata of type {_type}') getattr(self.jindex[s], method_name)(name, value) @@ -841,7 +839,7 @@ def _get_item(self, s, ix_type, name, load=True): # Re-raise as a Python KeyError raise KeyError(name) from None else: # pragma: no cover - raise RuntimeError(f'unhandled Java exception: {e}') from None + _raise_jexception(e) def start_jvm(jvmargs=None): @@ -882,9 +880,9 @@ def start_jvm(jvmargs=None): convertStrings=True, ) - log.debug('JAVA_HOME: {}'.format(os.environ.get('JAVA_HOME', '(not set)'))) - log.debug('jpype.getDefaultJVMPath: {}'.format(jpype.getDefaultJVMPath())) - log.debug('args to startJVM: {} {}'.format(args, kwargs)) + log.debug(f"JAVA_HOME: {os.environ.get('JAVA_HOME', '(not set)')}") + log.debug(f'jpype.getDefaultJVMPath: {jpype.getDefaultJVMPath()}') + log.debug(f'args to startJVM: {args} {kwargs}') jpype.startJVM(*args, **kwargs) From 0d2233a598d32a3c174108ea39b2a53e05467a5b Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:23:34 +0100 Subject: [PATCH 19/44] Add 'export' and expand 'import' CLI commands for Excel scenario data --- ixmp/cli.py | 97 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 9 deletions(-) diff --git a/ixmp/cli.py b/ixmp/cli.py index b648e62bb..1759407ec 100644 --- a/ixmp/cli.py +++ b/ixmp/cli.py @@ -1,3 +1,5 @@ +from pathlib import Path + import click import ixmp @@ -5,6 +7,19 @@ ScenarioClass = ixmp.Scenario +class VersionType(click.ParamType): + def convert(self, value, param, ctx): + if value == 'new': + return value + elif isinstance(value, int): + return value + else: + try: + return int(value) + except ValueError: + self.fail(f"{value!r} must be an integer or 'new'") + + @click.group() @click.option('--url', metavar='ixmp://PLATFORM/MODEL/SCENARIO[#VERSION]', help='Scenario URL.') @@ -13,7 +28,7 @@ help='Database properties file.') @click.option('--model', help='Model name.') @click.option('--scenario', help='Scenario name.') -@click.option('--version', type=int, help='Scenario version.') +@click.option('--version', type=VersionType(), help='Scenario version.') @click.pass_context def main(ctx, url, platform, dbprops, model, scenario, version): # Load the indicated Platform @@ -51,6 +66,8 @@ def main(ctx, url, platform, dbprops, model, scenario, version): version=version) except KeyError: pass + except Exception as e: + raise click.ClickException(e.args[0]) @main.command() @@ -94,19 +111,81 @@ def config(action, key, value): ixmp.config.save() -@main.command('import') -@click.option('--firstyear', type=int, help='First year of data to include.') -@click.option('--lastyear', type=int, help='Final year of data to include.') -@click.argument('data', type=click.Path(exists=True, dir_okay=False)) +@main.command() +@click.argument('path', type=click.Path(writable=True)) +@click.pass_obj +def export(context, path): + """Export scenario data to PATH.""" + # NB want to use type=click.Path(..., path_type=Path), but fails on bytes + path = Path(path) + + if not context or 'scen' not in context: + raise click.UsageError('give --url, or --platform, --model, and ' + '--scenario, before export') + + context['scen'].to_excel(path) + + +@main.group('import') @click.pass_obj -def import_command(context, firstyear, lastyear, data): - """Import time series data. +def import_group(context): + """Import time series or scenario data. - DATA is the path to a file containing input data in CSV or Excel format. + DATA is the path to a file containing input data in CSV (time series only) + or Excel format. """ + if not context or 'scen' not in context: + raise click.UsageError('give --url, or --platform, --model, and ' + '--scenario, before command import') + + +@import_group.command('timeseries') +@click.option('--firstyear', type=int, help='First year of data to include.') +@click.option('--lastyear', type=int, help='Final year of data to include.') +@click.argument('file', type=click.Path(exists=True, dir_okay=False)) +@click.pass_obj +def import_timeseries(context, file, firstyear, lastyear): + """Import time series data.""" from ixmp.utils import import_timeseries - import_timeseries(context['scen'], data, firstyear, lastyear) + import_timeseries(context['scen'], Path(file), firstyear, lastyear) + + +@import_group.command('scenario') +@click.option('--discard-solution', is_flag=True, + help='Discard solution data if necessary.') +@click.option('--add-units', is_flag=True, + help='Add units to the Platform.') +@click.option('--init-items', is_flag=True, + help='Initialize sets and parameters.') +@click.option('--commit-steps', is_flag=True, + help='Commit after each step.') +@click.argument('file', type=click.Path(exists=True, dir_okay=False)) +@click.pass_obj +def import_scenario(context, file, discard_solution, add_units, init_items, + commit_steps): + """Import scenario data.""" + scenario = context['scen'] + + if scenario.has_solution() and discard_solution: + scenario.remove_solution() + + try: + scenario.check_out() + except ValueError as e: + raise click.ClickException(e.args[0]) # Show exception message to user + except RuntimeError as e: + if 'not yet saved' in e.args[0]: + pass # --version=new; no need to check out + else: + raise + + scenario.read_excel( + Path(file), + add_units=add_units, + init_items=init_items, + commit_steps=commit_steps, + ) @main.command() From 3d0a6b9c83662d5a57e8eb4141edb19631535830 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:23:47 +0100 Subject: [PATCH 20/44] Test Excel I/O CLI --- ixmp/tests/test_cli.py | 52 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/ixmp/tests/test_cli.py b/ixmp/tests/test_cli.py index 53a430e6b..936c6f72e 100644 --- a/ixmp/tests/test_cli.py +++ b/ixmp/tests/test_cli.py @@ -128,7 +128,7 @@ def call(*args, exit_0=True): assert r.exit_code == 1 -def test_import(ixmp_cli, test_mp, test_data_path): +def test_import_ts(ixmp_cli, test_mp, test_data_path): # Ensure the 'canning problem'/'standard' TimeSeries exists populate_test_platform(test_mp) @@ -138,7 +138,7 @@ def test_import(ixmp_cli, test_mp, test_data_path): '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], '--version', '1', - 'import', + 'import', 'timeseries' '--firstyear', '2020', str(test_data_path / 'timeseries_canning.csv'), ]) @@ -165,6 +165,54 @@ def test_import(ixmp_cli, test_mp, test_data_path): assert len(scen.timeseries(variable=['Testing'])) == 0 +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 + result = ixmp_cli.invoke([ + '--platform', test_mp.name, + '--model', models['dantzig']['model'], + '--scenario', models['dantzig']['scenario'], + 'export', str(tmp_path), + ]) + assert result.exit_code == 0, result.output + + # 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 --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_report(ixmp_cli): # 'report' without specifying a platform/scenario is a UsageError result = ixmp_cli.invoke(['report', 'key']) From ab636e3d31b0d3f1e57f86a9a43fe13a9606dcb9 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:31:25 +0100 Subject: [PATCH 21/44] Read CSV or Excel in utils.import_timeseries --- ixmp/utils.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ixmp/utils.py b/ixmp/utils.py index 958af0a89..c70444f02 100644 --- a/ixmp/utils.py +++ b/ixmp/utils.py @@ -1,5 +1,6 @@ from collections.abc import Iterable import logging +from pathlib import Path import re from urllib.parse import urlparse @@ -144,7 +145,15 @@ def filtered(df, filters): def import_timeseries(scenario, data, firstyear=None, lastyear=None): """Import from a *data* file into *scenario*.""" - df = pd_read(data) + # TODO move into backend.io + data = Path(data) + if data.suffix == '.csv': + df = pd.read_csv(data) + elif data.suffix == '.xlsx': + df = pd.read_excel(data) + else: + raise ValueError(f'cannot read from {data.suffix} file') + df = df.rename(columns={c: str(c).lower() for c in df.columns}) cols = year_list(df.columns) From e84922ae94489d24848e62cab71add39b995aa41 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:31:50 +0100 Subject: [PATCH 22/44] Add missing comma in test_import_ts --- ixmp/tests/test_cli.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ixmp/tests/test_cli.py b/ixmp/tests/test_cli.py index 936c6f72e..e679fd0a1 100644 --- a/ixmp/tests/test_cli.py +++ b/ixmp/tests/test_cli.py @@ -138,11 +138,11 @@ def test_import_ts(ixmp_cli, test_mp, test_data_path): '--model', models['dantzig']['model'], '--scenario', models['dantzig']['scenario'], '--version', '1', - 'import', 'timeseries' + 'import', 'timeseries', '--firstyear', '2020', str(test_data_path / 'timeseries_canning.csv'), ]) - assert result.exit_code == 0 + assert result.exit_code == 0, result.output # Expected data exp = pd.DataFrame.from_dict({ From f46f55ce832f17b1c01d299528de637e09fbef22 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:33:17 +0100 Subject: [PATCH 23/44] Adjust test_scenario.test_set --- ixmp/tests/core/test_scenario.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index c05c984d2..f36085fdc 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -313,8 +313,7 @@ def test_set(scen_empty): scen = scen_empty # Add element to a non-existent set - with pytest.raises(KeyError, - match="No Item 'foo' exists in this Scenario!"): + with pytest.raises(KeyError, match=repr('foo')): scen.add_set('foo', 'bar') # Initialize a 0-D set From ad9dd12c86aa4b6b93e2a4a2de60a3de7f7d0224 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:39:08 +0100 Subject: [PATCH 24/44] Specify exceptions raised by Backend.item_get_elements --- ixmp/backend/base.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ixmp/backend/base.py b/ixmp/backend/base.py index 88f242c5c..96d2659b4 100644 --- a/ixmp/backend/base.py +++ b/ixmp/backend/base.py @@ -769,6 +769,11 @@ def item_get_elements(self, s: Scenario, type, name, filters=None): one column per index name with dimension values; plus the columns 'value' and 'unit' (for 'par') or 'lvl' and 'mrg' (for 'equ' or 'var'). + + Raises + ------ + KeyError + If *name* does not exist in *s*. """ @abstractmethod From 4fd571baba5b951bd43ace65dc13d1b06d39315e Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:39:53 +0100 Subject: [PATCH 25/44] Adjust TestScenario.test_from_url --- ixmp/tests/core/test_scenario.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index f36085fdc..c5c20a049 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -52,8 +52,8 @@ def test_default_version(self, mp): scen = ixmp.Scenario(mp, **models['dantzig']) assert scen.version == 2 - def test_scenario_from_url(self, mp, caplog): - url = 'ixmp://{}/Douglas Adams/Hitchhiker'.format(mp.name) + def test_from_url(self, mp, caplog): + url = f'ixmp://{mp.name}/Douglas Adams/Hitchhiker' # Default version is loaded scen, mp = ixmp.Scenario.from_url(url) @@ -65,9 +65,9 @@ def test_scenario_from_url(self, mp, caplog): scen, mp = ixmp.Scenario.from_url(url + '#10000', errors='raise') # Giving an invalid scenario with errors='warn' raises an exception - msg = ("RuntimeError: There was a problem getting 'Hitchhikerfoo' in " - "table 'SCENARIO' from the database!\nwhen loading Scenario " - f"from url {url}") + msg = ("There was a problem getting 'Hitchhikerfoo' in table " + "'SCENARIO' from the database!\nwhen loading Scenario from url " + ) + url with assert_logs(caplog, msg): scen, mp = ixmp.Scenario.from_url(url + 'foo') assert scen is None and isinstance(mp, ixmp.Platform) From d56360195e7186b31581b7ce4327060cb6a601ed Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 14:45:13 +0100 Subject: [PATCH 26/44] Update release notes --- RELEASE_NOTES.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst index 197307252..17241a2a0 100644 --- a/RELEASE_NOTES.rst +++ b/RELEASE_NOTES.rst @@ -4,6 +4,7 @@ Next release All changes ----------- +- `#286 `_: Add :meth:`.Scenario.to_excel` and :meth:`.read_excel`; this functionality is transferred to ixmp from :mod:`message_ix`. - `#270 `_: Include all tests in the ixmp package. - `#212 `_: Add :meth:`Model.initialize` API to help populate new Scenarios according to a model scheme. - `#267 `_: Apply units to reported quantities. From ac7ab5abf7a1c078caf1fb1c88251a7013c2518d Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 15:20:15 +0100 Subject: [PATCH 27/44] Add 'file-io' documentation page --- doc/source/api-python.rst | 2 +- doc/source/api.rst | 1 + doc/source/file-io.rst | 76 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 doc/source/file-io.rst diff --git a/doc/source/api-python.rst b/doc/source/api-python.rst index 5c6b9d300..1fd34e395 100644 --- a/doc/source/api-python.rst +++ b/doc/source/api-python.rst @@ -204,7 +204,7 @@ Utilities .. currentmodule:: ixmp.utils .. automodule:: ixmp.utils - :members: format_scenario_list, parse_url, update_par + :members: format_scenario_list, import_timeseries, parse_url, update_par Testing utilities diff --git a/doc/source/api.rst b/doc/source/api.rst index a5c8b50fd..b90bfc423 100644 --- a/doc/source/api.rst +++ b/doc/source/api.rst @@ -10,6 +10,7 @@ On separate pages: api-python api-backend + file-io api-model reporting diff --git a/doc/source/file-io.rst b/doc/source/file-io.rst new file mode 100644 index 000000000..7a7b5b03d --- /dev/null +++ b/doc/source/file-io.rst @@ -0,0 +1,76 @@ +File formats and input/output +***************************** + +In addition to the data management features provided by :doc:`api-backend`, ixmp is able to write and read :class:`TimeSeries` and :class:`Scenario` data to and from files. +This page describes those options and formats. + +Time series data +================ + +Time series data can be: + +- Read using :func:`.import_timeseries`, or the CLI command ``ixmp import timeseries FILE``. +- Written using :meth:`.export_timeseries_data`. + +Both CSV and Excel files in the IAMC time-series format are supported. + +Scenario/model data +=================== + +Scenario data can be read from/written to Microsoft Excel files using :meth:`.Scenario.read_excel` and :meth:`.to_excel`, and the CLI commands ``ixmp import scenario FILE`` and ``ixmp export FILE``. +The files have the following structure: + +- One sheet named 'ix_type_mapping' with two columns: + + - 'item': the name of an ixmp item. + - 'ix_type': the item's type as a length-3 string: 'set', 'par', 'var', or 'equ'. + +- One sheet per item. +- Sets: + + - Sheets for index sets have one column, with a header cell that is the set name. + - Sheets for one-dimensional indexed sets have one column, with a header cell that is the index set name. + - Sheets for multi-dimensional indexed sets have multiple columns. + - Sets with no elements are represented by empty sheets. + +- Parameters, variables, and equations: + + - Sheets have zero (for scalar items) or more columns with headers that are the index *names* (not necessarily sets; see below) for those dimensions. + - Parameter sheets have 'value' and 'unit' columns. + - Variable and equation sheets have 'lvl' and 'mrg' columns. + - Items with no elements are not included in the file. + +Limitations +----------- + +Reading variables and equations + The ixmp API provides no way to set the data of variables and equations, because these are considered model solution data. + + Thus, while :meth:`.to_excel` will write files containing variable and equation data, :meth:`.read_excel` can not add these to a Scenario, and only emits log messages indicating that they are ignored. + +Multiple dimensions indexed by the same set + :meth:`.read_excel` provides the `init_items` argument to create new sets and parameters when reading a file. + However, the file format does not capture information needed to reconstruct the original data in all cases. + + For example:: + + scenario.init_set('foo') + scenario.add_set('foo', ['a', 'b', 'c']) + scenario.init_par(name='bar', idx_sets=['foo']) + scenario.init_par( + name='baz', + idx_sets=['foo', 'foo'], + idx_names=['foo', 'another_dimension']) + scenario.to_excel('file.xlsx') + + :file:`file.xlsx` will contain sheets named 'bar' and 'baz'. + The sheet 'bar' will have column headers 'foo', 'value', and 'unit', which are adequate to reconstruct the parameter. + However, the sheet 'baz' will have column headers 'foo' and 'another_dimension'; this information does not allow ixmp to infer that 'another_dimension' is indexed by 'foo'. + + To work around this limitation, initialize 'baz' with the correct dimensions before reading its data:: + + new_scenario.init_par( + name='baz', + idx_sets=['foo', 'foo'], + idx_names=['foo', 'another_dimension']) + new_scenario.read_excel('file.xlsx', init_items=True) From 56ec0a25644c697a05c89f815a0a4124bbcb76e0 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 15:24:00 +0100 Subject: [PATCH 28/44] Check type before len of key in Scenario.add_set --- ixmp/core.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ixmp/core.py b/ixmp/core.py index 96576e56f..cabf4bc73 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -882,9 +882,8 @@ def add_set(self, name, key, comment=None): # TODO expand docstring (here or in doc/source/api.rst) with examples, # per test_core.test_add_set. - if len(key) == 0: - # No elements to add - return + if isinstance(key, list) and len(key) == 0: + return # No elements to add # Get index names for set *name*, may raise KeyError idx_names = self.idx_names(name) From 11bb0e0c032cd4d201005d5445191ed1a7e58ae5 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 16:15:22 +0100 Subject: [PATCH 29/44] Move utils.import_timeseries to backend.io.ts_read_file - TimeSeries.read_file: new method. - TimeSeries.add_timeseries: add a `year_lim` argument, so limiting data by year can be done even when not reading from file. - core.to_iamc_template: rename to core.to_iamc_layout, update docstring, remove duplicate set computation. - Simplify cli.import_timeseries. - Update docs. --- doc/source/api-python.rst | 2 +- doc/source/file-io.rst | 4 +-- ixmp/backend/base.py | 6 ++-- ixmp/backend/io.py | 25 ++++++++++++++ ixmp/cli.py | 4 +-- ixmp/core.py | 72 ++++++++++++++++++++++++++++++--------- ixmp/utils.py | 33 ------------------ 7 files changed, 88 insertions(+), 58 deletions(-) diff --git a/doc/source/api-python.rst b/doc/source/api-python.rst index 1fd34e395..5c6b9d300 100644 --- a/doc/source/api-python.rst +++ b/doc/source/api-python.rst @@ -204,7 +204,7 @@ Utilities .. currentmodule:: ixmp.utils .. automodule:: ixmp.utils - :members: format_scenario_list, import_timeseries, parse_url, update_par + :members: format_scenario_list, parse_url, update_par Testing utilities diff --git a/doc/source/file-io.rst b/doc/source/file-io.rst index 7a7b5b03d..18f0fb366 100644 --- a/doc/source/file-io.rst +++ b/doc/source/file-io.rst @@ -9,8 +9,8 @@ Time series data Time series data can be: -- Read using :func:`.import_timeseries`, or the CLI command ``ixmp import timeseries FILE``. -- Written using :meth:`.export_timeseries_data`. +- Read using :meth:`.import_timeseries`, or the CLI command ``ixmp import timeseries FILE`` for a single TimeSeries object. +- Written using :meth:`.export_timeseries_data` for multiple TimeSeries objects at once. Both CSV and Excel files in the IAMC time-series format are supported. diff --git a/ixmp/backend/base.py b/ixmp/backend/base.py index 96d2659b4..9f8af54e0 100644 --- a/ixmp/backend/base.py +++ b/ixmp/backend/base.py @@ -4,7 +4,7 @@ from ixmp.core import TimeSeries, Scenario from . import ItemType -from .io import s_read_excel, s_write_excel +from .io import ts_read_file, s_read_excel, s_write_excel class Backend(ABC): @@ -268,7 +268,9 @@ def read_file(self, path, item_type: ItemType, **kwargs): write_file """ s, filters = self._handle_rw_filters(kwargs.pop('filters', {})) - if path.suffix == '.xlsx' and item_type is ItemType.MODEL and s: + if path.suffix in ('.csv', '.xlsx') and item_type is ItemType.TS and s: + ts_read_file(s, path, **kwargs) + elif path.suffix == '.xlsx' and item_type is ItemType.MODEL and s: s_read_excel(self, s, path, **kwargs) else: raise NotImplementedError diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py index 2b5e1106c..f7bd5d590 100644 --- a/ixmp/backend/io.py +++ b/ixmp/backend/io.py @@ -9,6 +9,31 @@ log = logging.getLogger(__name__) +def ts_read_file(ts, path, firstyear=None, lastyear=None): + """Read data from a CSV or Microsoft Excel file at *path* into *ts*. + + See also + -------- + TimeSeries.add_timeseries + TimeSeries.read_file + """ + + if path.suffix == '.csv': + df = pd.read_csv(path) + elif path.suffix == '.xlsx': + df = pd.read_excel(path) + + ts.check_out(timeseries_only=True) + ts.add_timeseries(df, year_lim=(firstyear, lastyear)) + + msg = f'adding timeseries data from {path}' + if firstyear: + msg += f' from {firstyear}' + if lastyear: + msg += f' until {lastyear}' + ts.commit(msg) + + def s_write_excel(be, s, path): """Write *s* to a Microsoft Excel file at *path*. diff --git a/ixmp/cli.py b/ixmp/cli.py index 1759407ec..e719d2f44 100644 --- a/ixmp/cli.py +++ b/ixmp/cli.py @@ -146,9 +146,7 @@ def import_group(context): @click.pass_obj def import_timeseries(context, file, firstyear, lastyear): """Import time series data.""" - from ixmp.utils import import_timeseries - - import_timeseries(context['scen'], Path(file), firstyear, lastyear) + context['scen'].read_file(Path(file), firstyear, lastyear) @import_group.command('scenario') diff --git a/ixmp/core.py b/ixmp/core.py index cabf4bc73..3ffcf2c83 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -467,7 +467,7 @@ def preload_timeseries(self): """ self._backend('preload') - def add_timeseries(self, df, meta=False): + def add_timeseries(self, df, meta=False, year_lim=(None, None)): """Add data to the TimeSeries. Parameters @@ -495,11 +495,15 @@ def add_timeseries(self, df, meta=False): If :obj:`True`, store `df` as metadata. Metadata is treated specially when :meth:`Scenario.clone` is called for Scenarios created with ``scheme='MESSAGE'``. + + year_lim : tuple of (int or None, int or None`), optional + Respectively, minimum and maximum years to add from *df*; data for + other years is ignored. """ meta = bool(meta) # Ensure consistent column names - df = to_iamc_template(df) + df = to_iamc_layout(df) if 'value' in df.columns: # Long format; pivot to wide @@ -521,6 +525,15 @@ def add_timeseries(self, df, meta=False): # Columns (year) as integer df.columns = df.columns.astype(int) + # Identify columns to drop + to_drop = set() + if year_lim[0]: + to_drop |= set(filter(lambda y: y < year_lim[0], df.columns)) + if year_lim[1]: + to_drop |= set(filter(lambda y: y > year_lim[1], df.columns)) + + df.drop(to_drop, axis=1, inplace=True) + # Add one time series per row for (r, v, u, sa), data in df.iterrows(): # Values as float; exclude NA @@ -583,7 +596,7 @@ def remove_timeseries(self, df): - `year` """ # Ensure consistent column names - df = to_iamc_template(df) + df = to_iamc_layout(df) id_cols = ['region', 'variable', 'unit', 'subannual'] if 'year' not in df.columns: @@ -649,6 +662,26 @@ def get_geodata(self): .reset_index(drop=True) \ .astype({'meta': 'int64', 'year': 'int64'}) + def read_file(self, path, firstyear=None, lastyear=None): + """Read time series data from a CSV or Microsoft Excel file. + + Parameters + ---------- + path : os.PathLike + File to read. Must have suffix '.csv' or '.xlsx'. + firstyear : int, optional + Only read data from years equal to or later than this year. + lastyear : int, optional + Only read data from years equal to or earlier than this year. + """ + self.platform._backend.read_file( + Path(path), + ItemType.TS, + filters=dict(scenario=self), + firstyear=firstyear, + lastyear=lastyear, + ) + # %% class Scenario @@ -1483,40 +1516,45 @@ def read_excel(self, path, add_units=False, init_items=False, ) -def to_iamc_template(df): - """Format pd.DataFrame *df* in IAMC style. +def to_iamc_layout(df): + """Transform *df* to a standard IAMC layout. + + The returned object has: + + - Any (Multi)Index levels reset as columns. + - Lower-case column names 'region', 'variable', 'subannual', and 'unit'. + - If not present in *df*, the value 'Year' in the 'subannual' column. Parameters ---------- - df : :class:`pandas.DataFrame` + df : pandas.DataFrame May have a 'node' column, which will be renamed to 'region'. Returns ------- - :class:`pandas.DataFrame` - The returned object has: - - - Any (Multi)Index levels reset as columns. - - Lower-case column names 'region', 'variable', and 'unit'. + pandas.DataFrame Raises ------ ValueError If 'region', 'variable', or 'unit' is not among the column names. """ - # reset the index if meaningful entries are included there + # Reset the index if meaningful entries are included there if not list(df.index.names) == [None]: df.reset_index(inplace=True) - # rename columns to standard notation + # Rename columns in lower case, and transform 'node' to 'region' cols = {c: str(c).lower() for c in df.columns} cols.update(node='region') df = df.rename(columns=cols) + + required_cols = ['region', 'variable', 'unit'] + missing = list(set(required_cols) - set(df.columns)) + if len(missing): + raise ValueError(f'missing required columns {missing!r}') + + # Add a column 'subannual' with the default value if 'subannual' not in df.columns: df['subannual'] = 'Year' - required_cols = ['region', 'variable', 'unit'] - if not set(required_cols).issubset(set(df.columns)): - missing = list(set(required_cols) - set(df.columns)) - raise ValueError("missing required columns `{}`!".format(missing)) return df diff --git a/ixmp/utils.py b/ixmp/utils.py index c70444f02..fbeb01f47 100644 --- a/ixmp/utils.py +++ b/ixmp/utils.py @@ -143,39 +143,6 @@ def filtered(df, filters): return df[mask] -def import_timeseries(scenario, data, firstyear=None, lastyear=None): - """Import from a *data* file into *scenario*.""" - # TODO move into backend.io - data = Path(data) - if data.suffix == '.csv': - df = pd.read_csv(data) - elif data.suffix == '.xlsx': - df = pd.read_excel(data) - else: - raise ValueError(f'cannot read from {data.suffix} file') - - df = df.rename(columns={c: str(c).lower() for c in df.columns}) - - cols = year_list(df.columns) - years = [int(i) for i in cols] - fyear = int(firstyear or min(years)) - lyear = int(lastyear or max(years)) - cols = [c for c in cols if int(c) >= fyear and int(c) <= lyear] - df = df[['region', 'variable', 'unit'] + cols] - df.region = [x if x == 'World' else 'R11_' + x for x in df.region] - - scenario.check_out(timeseries_only=True) - scenario.add_timeseries(df) - - annot = 'adding timeseries data from file {}'.format(data) - if firstyear is not None: - annot = '{} from {}'.format(annot, firstyear) - if lastyear is not None: - annot = '{} until {}'.format(annot, lastyear) - - scenario.commit(annot) - - def format_scenario_list(platform, model=None, scenario=None, match=None, default_only=False, as_url=False): """Return a formatted list of TimeSeries on *platform*. From 47278d77a21a1ea03a7bac4a237ec5896475c064 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Sat, 21 Mar 2020 16:21:29 +0100 Subject: [PATCH 30/44] Remove unused import in utils --- ixmp/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ixmp/utils.py b/ixmp/utils.py index fbeb01f47..4af888f21 100644 --- a/ixmp/utils.py +++ b/ixmp/utils.py @@ -1,6 +1,5 @@ from collections.abc import Iterable import logging -from pathlib import Path import re from urllib.parse import urlparse From 15ee2b51ad0a47076aa860d175bb5043ad3044e5 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Mon, 23 Mar 2020 12:05:55 +0100 Subject: [PATCH 31/44] Add IXMP_JDBC_EXCEPTION_VERBOSE global option & tests, use in CI --- .appveyor.yml | 2 ++ .travis.yml | 19 ++++++++++--------- ixmp/backend/jdbc.py | 13 +++++++++++-- ixmp/tests/backend/test_jdbc.py | 28 +++++++++++++++++++++++++++- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 2a30886d0..f55cc6cf4 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -4,6 +4,8 @@ environment: # Use the JDK installed on AppVeyor images JAVA_HOME: C:\Program Files\Java\jdk13 + # Always display verbose exceptions in JDBCBackend + IXMP_JDBC_EXCEPTION_VERBOSE: '1' matrix: - PYTHON_VERSION: "3.6" - PYTHON_VERSION: "3.7" diff --git a/.travis.yml b/.travis.yml index 60ca4b195..23d524ba1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,15 +6,16 @@ language: r r: release -matrix: - include: - - os: linux - env: PYENV=py37 - - os: osx - env: PYENV=py37 -# turn these on once travis support gets a little better, see pyam for example -# - os: windows -# env: PYENV=py37 +env: +- PYENV=py37 +# Always display verbose exceptions in JDBCBackend +- IXMP_JDBC_EXCEPTION_VERBOSE=1 + +os: +- linux +- osx +# TODO turn this on once Travis Windows support improves +# - windows r_packages: - IRkernel diff --git a/ixmp/backend/jdbc.py b/ixmp/backend/jdbc.py index cd131fb43..7a5ebdf74 100644 --- a/ixmp/backend/jdbc.py +++ b/ixmp/backend/jdbc.py @@ -21,6 +21,8 @@ log = logging.getLogger(__name__) +_EXCEPTION_VERBOSE = os.environ.get('IXMP_JDBC_EXCEPTION_VERBOSE', '0') == '1' + # Map of Python to Java log levels LOG_LEVELS = { 'CRITICAL': 'ALL', @@ -110,7 +112,11 @@ def _read_properties(file): def _raise_jexception(exc, msg='unhandled Java exception: '): """Convert Java/JPype exceptions to ordinary Python RuntimeError.""" - raise RuntimeError(f'{msg}{exc.message()}') from None + if _EXCEPTION_VERBOSE: + msg += '\n\n' + exc.stacktrace() + else: + msg += exc.message() + raise RuntimeError(msg) from None class JDBCBackend(CachingBackend): @@ -447,7 +453,10 @@ def check_out(self, ts, timeseries_only): _raise_jexception(e) def commit(self, ts, comment): - self.jindex[ts].commit(comment) + try: + self.jindex[ts].commit(comment) + except java.IxException as e: + _raise_jexception(e) if ts.version == 0: ts.version = self.jindex[ts].getVersion() diff --git a/ixmp/tests/backend/test_jdbc.py b/ixmp/tests/backend/test_jdbc.py index c7c359e8d..e519b3795 100644 --- a/ixmp/tests/backend/test_jdbc.py +++ b/ixmp/tests/backend/test_jdbc.py @@ -1,9 +1,11 @@ +import re + import jpype import pytest from pytest import raises import ixmp -from ixmp.testing import assert_logs, make_dantzig +from ixmp.testing import make_dantzig def test_jvm_warn(recwarn): @@ -119,3 +121,27 @@ def test_gh_216(test_mp): # not in set i; but JDBCBackend removes 'beijing' from the filters before # calling the underlying method (https://github.com/iiasa/ixmp/issues/216) scen.par('a', filters=filters) + + +@pytest.fixture +def exception_verbose_true(): + """A fixture which ensures JDBCBackend raises verbose exceptions. + + The set value is not disturbed for other tests/code. + """ + tmp = ixmp.backend.jdbc._EXCEPTION_VERBOSE # Store current value + ixmp.backend.jdbc._EXCEPTION_VERBOSE = True # Ensure True + yield + ixmp.backend.jdbc._EXCEPTION_VERBOSE = tmp # Restore value + + +def test_verbose_exception(test_mp, exception_verbose_true): + msg = r"""unhandled Java exception:\s+ +at.ac.iiasa.ixmp.exceptions.IxException: There was a problem getting the run.+ +\tat at.ac.iiasa.ixmp.Platform.getScenario\(Platform.java:\d+\) +""" + match = re.compile(msg, re.MULTILINE | re.DOTALL) + + # Exception stack trace is logged for debugging + with pytest.raises(RuntimeError, match=match): + ixmp.Scenario(test_mp, model='foo', scenario='bar', version=-1) From b26795cb878b81799da8288f0f6fd0166e18fcd4 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Mon, 23 Mar 2020 20:27:15 +0100 Subject: [PATCH 32/44] Allow Windows line endings in test_verbose_exception --- ixmp/tests/backend/test_jdbc.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ixmp/tests/backend/test_jdbc.py b/ixmp/tests/backend/test_jdbc.py index e519b3795..bc1176a6c 100644 --- a/ixmp/tests/backend/test_jdbc.py +++ b/ixmp/tests/backend/test_jdbc.py @@ -138,8 +138,7 @@ def exception_verbose_true(): def test_verbose_exception(test_mp, exception_verbose_true): msg = r"""unhandled Java exception:\s+ at.ac.iiasa.ixmp.exceptions.IxException: There was a problem getting the run.+ -\tat at.ac.iiasa.ixmp.Platform.getScenario\(Platform.java:\d+\) -""" +\tat at.ac.iiasa.ixmp.Platform.getScenario\(Platform.java:\d+\)\s*""" match = re.compile(msg, re.MULTILINE | re.DOTALL) # Exception stack trace is logged for debugging From 660b9af898d72bf3a21b03f283976b94a0af678e Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Mon, 23 Mar 2020 20:48:27 +0100 Subject: [PATCH 33/44] Raise ValueError from JDBCBackend.get --- ixmp/backend/base.py | 6 ++++++ ixmp/backend/jdbc.py | 8 ++++++++ ixmp/core.py | 2 +- ixmp/tests/core/test_scenario.py | 5 ++--- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/ixmp/backend/base.py b/ixmp/backend/base.py index 9f8af54e0..214fa7454 100644 --- a/ixmp/backend/base.py +++ b/ixmp/backend/base.py @@ -376,6 +376,12 @@ def get(self, ts: TimeSeries, version): ------- None + Raises + ------ + ValueError + If :attr:`~.TimeSeries.model` or :attr:`~.TimeSeries.scenario` does + not exist on the Platform. + See also -------- ts_set_as_default diff --git a/ixmp/backend/jdbc.py b/ixmp/backend/jdbc.py index 7a5ebdf74..edfe823f9 100644 --- a/ixmp/backend/jdbc.py +++ b/ixmp/backend/jdbc.py @@ -428,6 +428,14 @@ def get(self, ts, version): try: jobj = method(*args) except java.IxException as e: + # Try to re-raise as a ValueError for bad model or scenario name + match = re.search(r"table '([^']*)' from the database", e.args[0]) + if match: + param = match.group(1).lower() + if param in ('model', 'scenario'): + raise ValueError(f'{param}={getattr(ts, param)!r}') + + # Failed _raise_jexception(e) # Add to index diff --git a/ixmp/core.py b/ixmp/core.py index 3ffcf2c83..ca4828780 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -772,7 +772,7 @@ def from_url(cls, url, errors='warn'): scenario = cls(platform, **scenario_info) except Exception as e: if errors == 'warn': - log.warning('{}: {}\nwhen loading Scenario from url {}' + log.warning('{}: {}\nwhen loading Scenario from url: {!r}' .format(e.__class__.__name__, e.args[0], url)) return None, platform else: diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index c5c20a049..2935c11ad 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -65,9 +65,8 @@ def test_from_url(self, mp, caplog): scen, mp = ixmp.Scenario.from_url(url + '#10000', errors='raise') # Giving an invalid scenario with errors='warn' raises an exception - msg = ("There was a problem getting 'Hitchhikerfoo' in table " - "'SCENARIO' from the database!\nwhen loading Scenario from url " - ) + url + msg = ("ValueError: scenario='Hitchhikerfoo'\nwhen loading Scenario " + f"from url: {(url + 'foo')!r}") with assert_logs(caplog, msg): scen, mp = ixmp.Scenario.from_url(url + 'foo') assert scen is None and isinstance(mp, ixmp.Platform) From f24aa1e4c1b38642ce5f7cc1bd1676fa5edde00b Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Tue, 24 Mar 2020 16:43:06 +0100 Subject: [PATCH 34/44] Correct Travis YAML syntax for matrix builds --- .travis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 23d524ba1..83b16815e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ # Continuous integration configuration for Travis +# NB use https://config.travis-ci.com/explore to validate changes dist: xenial @@ -6,10 +7,11 @@ language: r r: release +# - Build against Python 3.7 +# - Always display verbose exceptions in JDBCBackend env: -- PYENV=py37 -# Always display verbose exceptions in JDBCBackend -- IXMP_JDBC_EXCEPTION_VERBOSE=1 + PYENV=py37 + IXMP_JDBC_EXCEPTION_VERBOSE=1 os: - linux From fe37314cf803a041baa08c0c17eae577ed996c73 Mon Sep 17 00:00:00 2001 From: Nikolay Kushin Date: Mon, 23 Mar 2020 10:55:01 +0100 Subject: [PATCH 35/44] Update error handling and logging - remove finally block in timeseries commit method (java) - change input validation in setStatus method (java) - fix commit in Scenario class (java) - propagate exceptions from commit (java) - upgrade pytest dependency - add platform method to get current log level (remove changing log level in tests as it affects other tests log output) - updated ixmp.jar (source diff https://github.com/iiasa/ixmp_source/compare/10742197121eaf83c6f222f969d7e2842d0bbdde...923f5b9b3c283c31f5ea6deb0854548a11144599) --- ixmp/backend/base.py | 17 +++++++++++++++++ ixmp/backend/jdbc.py | 9 +++++++-- ixmp/core.py | 10 ++++++++++ ixmp/ixmp.jar | Bin 415182 -> 415597 bytes ixmp/tests/backend/test_jdbc.py | 13 +++++++------ ixmp/tests/core/test_platform.py | 4 ++++ ixmp/tests/core/test_scenario.py | 5 +++-- ixmp/tests/core/test_timeseries.py | 2 -- ixmp/tests/test_access.py | 2 -- setup.py | 2 +- 10 files changed, 49 insertions(+), 15 deletions(-) diff --git a/ixmp/backend/base.py b/ixmp/backend/base.py index 214fa7454..a56005e88 100644 --- a/ixmp/backend/base.py +++ b/ixmp/backend/base.py @@ -181,6 +181,23 @@ def set_log_level(self, level): Parameters ---------- level : int or Python logging level + + See also + -------- + get_log_level + """ + + def get_log_level(self): + """OPTIONAL: Get logging level for the backend and other code. + + Returns + ------- + str + Name of a :ref:`Python logging level `. + + See also + -------- + set_log_level """ @abstractmethod diff --git a/ixmp/backend/jdbc.py b/ixmp/backend/jdbc.py index edfe823f9..0d0212a9f 100644 --- a/ixmp/backend/jdbc.py +++ b/ixmp/backend/jdbc.py @@ -24,13 +24,14 @@ _EXCEPTION_VERBOSE = os.environ.get('IXMP_JDBC_EXCEPTION_VERBOSE', '0') == '1' # Map of Python to Java log levels +# https://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Level.html LOG_LEVELS = { - 'CRITICAL': 'ALL', + 'CRITICAL': 'FATAL', 'ERROR': 'ERROR', 'WARNING': 'WARN', 'INFO': 'INFO', 'DEBUG': 'DEBUG', - 'NOTSET': 'OFF', + 'NOTSET': 'ALL', } # Java classes, loaded by start_jvm(). These become available as e.g. @@ -221,6 +222,10 @@ def __init__(self, jvmargs=None, **kwargs): def set_log_level(self, level): self.jobj.setLogLevel(LOG_LEVELS[level]) + def get_log_level(self): + levels = {v: k for k, v in LOG_LEVELS.items()} + return levels.get(self.jobj.getLogLevel(), 'UNKNOWN') + def open_db(self): """(Re-)open the database connection.""" self.jobj.openDB() diff --git a/ixmp/core.py b/ixmp/core.py index ca4828780..91ff147d8 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -111,6 +111,16 @@ def set_log_level(self, level): logger().setLevel(level) self._backend.set_log_level(level) + def get_log_level(self): + """Get a log level associated with the storage :class:.Backend, if any + + Returns + ------- + str + Name of a :ref:`Python logging level `. + """ + return self._backend.get_log_level() + def scenario_list(self, default=True, model=None, scen=None): """Return information about TimeSeries and Scenarios on the Platform. diff --git a/ixmp/ixmp.jar b/ixmp/ixmp.jar index 5e166db52150d7c0aef8009c8ff29587def7b4a3..2f6f189a5ed3bf9a4f484f93a23cb67562c95b00 100644 GIT binary patch delta 158533 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 N68=4fM43&${vZ4h3C{ok delta 158352 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

_D`l!EU4_S8>nyYQXPYv=FIx0NWy~$b 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 +G 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
(6t<6oJ7GQ~+x#lLB?-t?q; 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 RE@lky$dO17T_-t^_kRO

Y5J diff --git a/ixmp/tests/backend/test_jdbc.py b/ixmp/tests/backend/test_jdbc.py index bc1176a6c..d25a926d1 100644 --- a/ixmp/tests/backend/test_jdbc.py +++ b/ixmp/tests/backend/test_jdbc.py @@ -136,11 +136,12 @@ def exception_verbose_true(): def test_verbose_exception(test_mp, exception_verbose_true): - msg = r"""unhandled Java exception:\s+ -at.ac.iiasa.ixmp.exceptions.IxException: There was a problem getting the run.+ -\tat at.ac.iiasa.ixmp.Platform.getScenario\(Platform.java:\d+\)\s*""" - match = re.compile(msg, re.MULTILINE | re.DOTALL) - # Exception stack trace is logged for debugging - with pytest.raises(RuntimeError, match=match): + with pytest.raises(RuntimeError) as exc_info: ixmp.Scenario(test_mp, model='foo', scenario='bar', version=-1) + + exc_msg = exc_info.value.args[0] + assert ("There exists no Scenario 'foo|bar' " + "(version: -1) in the database!" in exc_msg) + assert "at.ac.iiasa.ixmp.database.DbDAO.getRunId" in exc_msg + assert "at.ac.iiasa.ixmp.Platform.getScenario" in exc_msg diff --git a/ixmp/tests/core/test_platform.py b/ixmp/tests/core/test_platform.py index 42d64ec6f..8038f9c5f 100644 --- a/ixmp/tests/core/test_platform.py +++ b/ixmp/tests/core/test_platform.py @@ -14,15 +14,19 @@ def test_init(): def test_set_log_level(test_mp): + initial = test_mp.get_log_level() + assert initial == 'INFO' test_mp.set_log_level('CRITICAL') test_mp.set_log_level('ERROR') test_mp.set_log_level('WARNING') test_mp.set_log_level('INFO') test_mp.set_log_level('DEBUG') test_mp.set_log_level('NOTSET') + assert test_mp.get_log_level() == 'NOTSET' with pytest.raises(ValueError): test_mp.set_log_level(level='foo') + test_mp.set_log_level(initial) def test_scenario_list(mp): diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index 2935c11ad..00eee4e47 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -60,8 +60,9 @@ def test_from_url(self, mp, caplog): assert scen.version == 1 # Giving an invalid version with errors='raise' raises an exception - with pytest.raises(Exception, match='There was a problem getting the ' - 'run id from the database!'): + expected = ("There exists no Scenario 'Douglas Adams|Hitchhiker' " + "(version: 10000) in the database!") + with pytest.raises(Exception, match=expected): scen, mp = ixmp.Scenario.from_url(url + '#10000', errors='raise') # Giving an invalid scenario with errors='warn' raises an exception diff --git a/ixmp/tests/core/test_timeseries.py b/ixmp/tests/core/test_timeseries.py index f3085551a..2956b6c49 100644 --- a/ixmp/tests/core/test_timeseries.py +++ b/ixmp/tests/core/test_timeseries.py @@ -280,7 +280,6 @@ def test_edit_with_region_synonyms(mp, ts, cls): info = dict(model=ts.model, scenario=ts.scenario) exp = expected(DATA[0], ts) - mp.set_log_level('DEBUG') mp.add_region_synonym('Hell', 'World') ts.add_timeseries(DATA[0]) @@ -509,7 +508,6 @@ def test_timeseries_edit_iamc(mp): def test_timeseries_edit_with_region_synonyms(mp): args_all = ('Douglas Adams 1', 'test_remove_all') - mp.set_log_level('DEBUG') mp.add_region_synonym('Hell', 'World') scen = prepare_scenario(mp, args_all) obs = scen.timeseries() diff --git a/ixmp/tests/test_access.py b/ixmp/tests/test_access.py index 1e445a43e..352d34f70 100644 --- a/ixmp/tests/test_access.py +++ b/ixmp/tests/test_access.py @@ -61,7 +61,6 @@ def test_check_single_model_access(mock, tmp_path, test_data_path): auth_url=mock.pretend_url) mp = ixmp.Platform(backend='jdbc', dbprops=test_props) - mp.set_log_level('DEBUG') granted = mp.check_access('test_user', 'test_model') assert granted @@ -91,7 +90,6 @@ def test_check_multi_model_access(mock, tmp_path, test_data_path): auth_url=mock.pretend_url) mp = ixmp.Platform(backend='jdbc', dbprops=test_props) - mp.set_log_level('DEBUG') access = mp.check_access('test_user', ['test_model', 'non_existing_model']) assert access['test_model'] diff --git a/setup.py b/setup.py index 6a6c3d428..c98e1b76e 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ EXTRAS_REQUIRE = { 'tests': ['codecov', 'jupyter', 'pretenders>=1.4.4', 'pytest-cov', - 'pytest>=3.9', 'sparse'], + 'pytest>=5', 'sparse'], 'docs': ['numpydoc', 'sphinx', 'sphinx_rtd_theme', 'sphinxcontrib-bibtex'], 'tutorial': ['jupyter'], } From 21ec5851c3f0ceec51cb010152795512be431d93 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Tue, 24 Mar 2020 20:32:30 +0100 Subject: [PATCH 36/44] Sync pytest in ci/conda-requirements.txt with setup.py --- ci/conda-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/conda-requirements.txt b/ci/conda-requirements.txt index 3c7c6f87a..6de16f540 100644 --- a/ci/conda-requirements.txt +++ b/ci/conda-requirements.txt @@ -8,7 +8,7 @@ numpydoc pandas pint pytest-cov -pytest>=3.9 +pytest>=5 PyYAML sparse sphinx From 50a3b4f815302c18a6a94e48f20e905e3cceb40f Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Tue, 24 Mar 2020 20:32:50 +0100 Subject: [PATCH 37/44] Add cli.VersionType docstring --- ixmp/cli.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ixmp/cli.py b/ixmp/cli.py index e719d2f44..9be710c6a 100644 --- a/ixmp/cli.py +++ b/ixmp/cli.py @@ -8,6 +8,7 @@ class VersionType(click.ParamType): + """A Click parameter type that accepts :class:`int` or 'all'.""" def convert(self, value, param, ctx): if value == 'new': return value From 957a9d6d6a73fbbe10f40c2f690fa21f3c749c7e Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Tue, 24 Mar 2020 20:33:08 +0100 Subject: [PATCH 38/44] Lint tests.backend.test_jdbc --- ixmp/tests/backend/test_jdbc.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/ixmp/tests/backend/test_jdbc.py b/ixmp/tests/backend/test_jdbc.py index d25a926d1..f7dd71c05 100644 --- a/ixmp/tests/backend/test_jdbc.py +++ b/ixmp/tests/backend/test_jdbc.py @@ -1,5 +1,3 @@ -import re - import jpype import pytest from pytest import raises From 51f5068eff191a5caf70954af2bf2967591a1a04 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Tue, 24 Mar 2020 20:37:02 +0100 Subject: [PATCH 39/44] Parametrize test_log_level --- ixmp/tests/core/test_platform.py | 51 ++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/ixmp/tests/core/test_platform.py b/ixmp/tests/core/test_platform.py index 8038f9c5f..c58b29e5d 100644 --- a/ixmp/tests/core/test_platform.py +++ b/ixmp/tests/core/test_platform.py @@ -1,8 +1,10 @@ """Test all functionality of ixmp.Platform.""" +import logging + import pandas as pd import pytest from pandas.testing import assert_frame_equal -from pytest import raises +from pytest import param, raises import ixmp @@ -13,20 +15,39 @@ def test_init(): ixmp.Platform(backend='foo') -def test_set_log_level(test_mp): - initial = test_mp.get_log_level() - assert initial == 'INFO' - test_mp.set_log_level('CRITICAL') - test_mp.set_log_level('ERROR') - test_mp.set_log_level('WARNING') - test_mp.set_log_level('INFO') - test_mp.set_log_level('DEBUG') - test_mp.set_log_level('NOTSET') - assert test_mp.get_log_level() == 'NOTSET' - - with pytest.raises(ValueError): - test_mp.set_log_level(level='foo') - test_mp.set_log_level(initial) +@pytest.fixture +def log_level_mp(test_mp): + """A fixture that preserves the log level of *test_mp*.""" + tmp = test_mp.get_log_level() + yield test_mp + test_mp.set_log_level(tmp) + + +@pytest.mark.parametrize('level, exc', [ + ('CRITICAL', None), + ('ERROR', None), + ('WARNING', None), + ('INFO', None), + ('DEBUG', None), + ('NOTSET', None), + # An unknown string fails + ('FOO', ValueError), + # TODO also support Python standard library values + (logging.CRITICAL, ValueError), + (logging.ERROR, ValueError), + (logging.WARNING, ValueError), + (logging.INFO, ValueError), + (logging.DEBUG, ValueError), + (logging.NOTSET, ValueError), +]) +def test_log_level(log_level_mp, level, exc): + """Log level can be set and retrieved.""" + if exc is None: + log_level_mp.set_log_level(level) + assert log_level_mp.get_log_level() == level + else: + with pytest.raises(exc): + log_level_mp.set_log_level(level) def test_scenario_list(mp): From a0173f9b75b69c52e99e39b420bfb2df025660b0 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Tue, 24 Mar 2020 20:50:45 +0100 Subject: [PATCH 40/44] Improve documentation of {read,write}_{excel,file}, get_log_level --- doc/source/api-backend.rst | 1 + doc/source/api-python.rst | 3 +++ doc/source/file-io.rst | 2 ++ ixmp/backend/base.py | 6 +++++- ixmp/core.py | 25 ++++++++++++++++++++----- 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/doc/source/api-backend.rst b/doc/source/api-backend.rst index fa01128e3..af0f45e98 100644 --- a/doc/source/api-backend.rst +++ b/doc/source/api-backend.rst @@ -90,6 +90,7 @@ Backend API close_db get_auth + get_log_level get_nodes get_scenarios get_units diff --git a/doc/source/api-python.rst b/doc/source/api-python.rst index 5c6b9d300..c3d252576 100644 --- a/doc/source/api-python.rst +++ b/doc/source/api-python.rst @@ -72,6 +72,7 @@ TimeSeries is_default last_update preload_timeseries + read_file remove_geodata remove_timeseries run_id @@ -144,6 +145,7 @@ Scenario load_scenario_data par par_list + read_excel remove_par remove_set remove_solution @@ -152,6 +154,7 @@ Scenario set_list set_meta solve + to_excel var var_list diff --git a/doc/source/file-io.rst b/doc/source/file-io.rst index 18f0fb366..40decd238 100644 --- a/doc/source/file-io.rst +++ b/doc/source/file-io.rst @@ -14,6 +14,8 @@ Time series data can be: Both CSV and Excel files in the IAMC time-series format are supported. +.. _excel-data-format: + Scenario/model data =================== diff --git a/ixmp/backend/base.py b/ixmp/backend/base.py index a56005e88..c15cb475e 100644 --- a/ixmp/backend/base.py +++ b/ixmp/backend/base.py @@ -178,6 +178,8 @@ def open_db(self): def set_log_level(self, level): """OPTIONAL: Set logging level for the backend and other code. + The default implementation has no effect. + Parameters ---------- level : int or Python logging level @@ -190,10 +192,12 @@ def set_log_level(self, level): def get_log_level(self): """OPTIONAL: Get logging level for the backend and other code. + The default implementation has no effect. + Returns ------- str - Name of a :ref:`Python logging level `. + Name of a :py:ref:`Python logging level `. See also -------- diff --git a/ixmp/core.py b/ixmp/core.py index 91ff147d8..4c5ae52d5 100644 --- a/ixmp/core.py +++ b/ixmp/core.py @@ -96,28 +96,28 @@ def __getattr__(self, name): raise AttributeError(name) def set_log_level(self, level): - """Set global logger level. + """Set log level for the Platform and its storage :class:`.Backend`. Parameters ---------- level : str - set the logger level if specified, see - https://docs.python.org/3/library/logging.html#logging-levels + Name of a :py:ref:`Python logging level `. """ if level not in dir(logging): msg = '{} not a valid Python logger level, see ' + \ 'https://docs.python.org/3/library/logging.html#logging-level' raise ValueError(msg.format(level)) + log.setLevel(level) logger().setLevel(level) self._backend.set_log_level(level) def get_log_level(self): - """Get a log level associated with the storage :class:.Backend, if any + """Return log level of the storage :class:`.Backend`, if any. Returns ------- str - Name of a :ref:`Python logging level `. + Name of a :py:ref:`Python logging level `. """ return self._backend.get_log_level() @@ -683,6 +683,10 @@ def read_file(self, path, firstyear=None, lastyear=None): Only read data from years equal to or later than this year. lastyear : int, optional Only read data from years equal to or earlier than this year. + + See also + -------- + .Scenario.read_excel """ self.platform._backend.read_file( Path(path), @@ -1496,6 +1500,11 @@ def to_excel(self, path): ---------- path : os.PathLike File to write. Must have suffix '.xlsx'. + + See also + -------- + :ref:`excel-data-format` + read_excel """ self.platform._backend.write_file(Path(path), ItemType.MODEL, filters=dict(scenario=self)) @@ -1515,6 +1524,12 @@ def read_excel(self, path, add_units=False, init_items=False, Scenario. commit_steps : bool, optional Commit changes after every data addition. + + See also + -------- + :ref:`excel-data-format` + .TimeSeries.read_file + to_excel """ self.platform._backend.read_file( Path(path), From 56e7b3371326240992495e7d7f8f743f7502ba67 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Tue, 24 Mar 2020 20:52:18 +0100 Subject: [PATCH 41/44] Lint tests.core.test_platform --- ixmp/tests/core/test_platform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ixmp/tests/core/test_platform.py b/ixmp/tests/core/test_platform.py index c58b29e5d..9f8827a5f 100644 --- a/ixmp/tests/core/test_platform.py +++ b/ixmp/tests/core/test_platform.py @@ -4,7 +4,7 @@ import pandas as pd import pytest from pandas.testing import assert_frame_equal -from pytest import param, raises +from pytest import raises import ixmp From b94a3e8244db10d79ed3df95ad9ad70914a008ca Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Wed, 25 Mar 2020 10:52:25 +0100 Subject: [PATCH 42/44] Increase coverage to 100% in ixmp.cli --- ixmp/cli.py | 4 ++-- ixmp/tests/test_cli.py | 31 ++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/ixmp/cli.py b/ixmp/cli.py index 9be710c6a..f17389bef 100644 --- a/ixmp/cli.py +++ b/ixmp/cli.py @@ -67,7 +67,7 @@ def main(ctx, url, platform, dbprops, model, scenario, version): version=version) except KeyError: pass - except Exception as e: + except Exception as e: # pragma: no cover raise click.ClickException(e.args[0]) @@ -176,7 +176,7 @@ def import_scenario(context, file, discard_solution, add_units, init_items, except RuntimeError as e: if 'not yet saved' in e.args[0]: pass # --version=new; no need to check out - else: + else: # pragma: no cover raise scenario.read_excel( diff --git a/ixmp/tests/test_cli.py b/ixmp/tests/test_cli.py index e679fd0a1..7362ff91b 100644 --- a/ixmp/tests/test_cli.py +++ b/ixmp/tests/test_cli.py @@ -1,10 +1,28 @@ from pathlib import Path from pandas.testing import assert_frame_equal -from click.exceptions import UsageError +from click.exceptions import BadParameter, UsageError import ixmp +from ixmp.cli import VersionType from ixmp.testing import models, populate_test_platform import pandas as pd +import pytest + + +def test_versiontype(): + vt = VersionType() + # str converts to int + assert vt.convert('1', None, None) == 1 + assert vt.convert('-1', None, None) == -1 + + # str 'new' is passes through + assert vt.convert('new', None, None) == 'new' + + # int passes through + assert vt.convert(1, None, None) == 1 + + with pytest.raises(BadParameter, match="'xx' must be an integer or 'new'"): + vt.convert('xx', None, None) def test_main(ixmp_cli, test_mp, tmp_path): @@ -170,14 +188,18 @@ def test_excel_io(ixmp_cli, test_mp, tmp_path): tmp_path /= 'dantzig.xlsx' # Invoke the CLI to export data to Excel - result = ixmp_cli.invoke([ + 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, @@ -186,6 +208,9 @@ def test_excel_io(ixmp_cli, test_mp, tmp_path): '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 From e6798c83530c66157b59f6a92ff8538466668752 Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Wed, 25 Mar 2020 13:01:51 +0100 Subject: [PATCH 43/44] Expand test_excel_io to cover unreadable items --- ixmp/backend/io.py | 63 ++++++++++++++++++++------------ ixmp/testing.py | 3 +- ixmp/tests/core/test_scenario.py | 37 +++++++++++++++---- 3 files changed, 72 insertions(+), 31 deletions(-) diff --git a/ixmp/backend/io.py b/ixmp/backend/io.py index f7bd5d590..45edd72d1 100644 --- a/ixmp/backend/io.py +++ b/ixmp/backend/io.py @@ -1,4 +1,3 @@ -from contextlib import contextmanager import logging import pandas as pd @@ -85,30 +84,44 @@ def s_write_excel(be, s, path): writer.save() -@contextmanager -def handle_existing(scenario, ix_type, name, new_idx_sets, path): - """Context manager for :meth:`~.init_set`, :meth:`.init_par`, etc. +def maybe_init_item(scenario, ix_type, name, new_idx, path): + """Call :meth:`~.init_set`, :meth:`.init_par`, etc. if possible. + + Logs an intelligible warning and then raises ValueError: + + - the *new_idx* is ambiguous, containing names that cannot be used to infer + sets, or + - the init_*() call fails because of an existing item with index names + that are different from *new_idx*. - If the init_*() call within the context fails, this logs an intelligible - message. """ + # Check for ambiguous index names + ambiguous_idx = sorted(set(new_idx or []) - set(scenario.set_list())) + if len(ambiguous_idx): + msg = (f'Cannot read {ix_type} {name!r}: index set(s) cannot be ' + f'inferred for name(s) {ambiguous_idx}') + log.warning(msg) + raise ValueError + try: - yield + # Initialize + getattr(scenario, f'init_{ix_type}')(name, new_idx) except ValueError as e: - if 'exists' not in e.args[0]: + if 'exists' not in e.args[0]: # pragma: no cover raise # Some other ValueError - # Check that existing item has the same index sets + # Existing item; check that is has the same index names # [] and None are equivalent; convert to be consistent - existing = scenario.idx_sets(name) or None - if isinstance(new_idx_sets, list) and new_idx_sets == []: - new_idx_sets = None + existing = scenario.idx_names(name) or None + if isinstance(new_idx, list) and new_idx == []: + new_idx = None - if existing != new_idx_sets: - msg = (f'{ix_type} {name!r} has index sets {existing} in Scenario;' - f' index names {new_idx_sets} in {path.name}') + if existing != new_idx: + msg = (f'Existing {ix_type} {name!r} has index names(s) {existing}' + f' != {new_idx} in {path.name}') log.warning(msg) + raise ValueError def s_read_excel(be, s, path, add_units=False, init_items=False, @@ -119,7 +132,7 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, -------- Scenario.read_excel """ - log.info(f'Reading data from {path}') + log.info(f'Read data from {path}') # Get item name -> ixmp type mapping as a pd.Series xf = pd.ExcelFile(path) @@ -144,7 +157,7 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, if init_items: # Determine index set(s) for this set if len(idx_sets) == 1: - if idx_sets == [0]: + if idx_sets == [0]: # pragma: no cover # Old-style export with uninformative '0' as a column # header; assume it's an index set log.warning(f"Add {name} with header '0' as index set") @@ -155,8 +168,10 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, else: pass # 1-D set indexed by another set - with handle_existing(s, 'set', name, idx_sets, path): - s.init_set(name, idx_sets) + try: + maybe_init_item(s, 'set', name, idx_sets, path) + except ValueError: + continue # Ambiguous or conflicting; skip this set if len(data.columns) == 1: # Convert data frame into 1-D vector @@ -185,7 +200,7 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, # Add equ/par/var data for name, ix_type in name_type[name_type != 'set'].items(): if ix_type in ('equ', 'var'): - log.info(f'Cannot import {ix_type} {name!r}') + log.info(f'Cannot read {ix_type} {name!r}') continue # Only parameters beyond this point @@ -211,9 +226,11 @@ def s_read_excel(be, s, path, add_units=False, init_items=False, ) if init_items: - # Same as init_scalar if idx_sets == [] - with handle_existing(s, ix_type, name, idx_sets, path): - s.init_par(name, idx_sets) + try: + # Same as init_scalar if idx_sets == [] + maybe_init_item(s, ix_type, name, idx_sets, path) + except ValueError: + continue # Ambiguous or conflicting; skip this parameter if not len(idx_sets): # No index sets -> scalar parameter; must supply empty 'key' column diff --git a/ixmp/testing.py b/ixmp/testing.py index 4d892c82e..dde7fe3fe 100644 --- a/ixmp/testing.py +++ b/ixmp/testing.py @@ -392,7 +392,8 @@ def test_foo(caplog): for e in expected] if not all(found): missing = [msg for i, msg in enumerate(expected) if not found[i]] - raise AssertionError(f'Did not log {missing}') + raise AssertionError(f'Did not log {missing}\namong:\n' + f'{caplog.messages[first:]}') def assert_qty_equal(a, b, check_attrs=True, **kwargs): diff --git a/ixmp/tests/core/test_scenario.py b/ixmp/tests/core/test_scenario.py index 00eee4e47..2882482e8 100644 --- a/ixmp/tests/core/test_scenario.py +++ b/ixmp/tests/core/test_scenario.py @@ -193,19 +193,29 @@ def test_load_scenario_data_clear_cache(self, mp): scen.platform._backend.cache_invalidate(scen, 'par', 'd') # I/O - def test_excel_io(self, scen, scen_empty, tmp_path): + def test_excel_io(self, scen, scen_empty, tmp_path, caplog): tmp_path /= 'output.xlsx' # FIXME remove_solution, check_out, commit, solve, commit should not # be needed to make this small data addition. scen.remove_solution() scen.check_out() + # A 1-D set indexed by another set scen.init_set('foo', 'j') scen.add_set('foo', [['new-york'], ['topeka']]) # A scalar parameter with unusual units scen.platform.add_unit('pounds') scen.init_scalar('bar', 100, 'pounds') + # A parameter with no values + scen.init_par('baz_1', ['i', 'j']) + # A parameter with ambiguous index name + scen.init_par('baz_2', ['i'], ['i_dim']) + scen.add_par('baz_2', dict(value=[1.1], i_dim=['seattle'])) + # A 2-D set with ambiguous index names + scen.init_set('baz_3', ['i', 'i'], ['i', 'i_also']) + scen.add_set('baz_3', [['seattle', 'seattle']]) + scen.commit('') scen.solve() @@ -217,19 +227,32 @@ def test_excel_io(self, scen, scen_empty, tmp_path): "try init_items=True"): scen_empty.read_excel(tmp_path) - # File can be read with init_items=False + # File can be read with init_items=True scen_empty.read_excel(tmp_path, init_items=True, commit_steps=True) - # Contents of the Scenarios are the same - assert scen_empty.par_list() == scen.par_list() - assert scen_empty.set_list() == scen.set_list() + # Contents of the Scenarios are the same, except for unreadable items + assert set(scen_empty.par_list()) | {'baz_1', 'baz_2'} \ + == set(scen.par_list()) + assert set(scen_empty.set_list()) | {'baz_3'} == set(scen.set_list()) assert_frame_equal(scen_empty.set('foo'), scen.set('foo')) - # TODO make an exact comparison of the Scenarios + # NB could make a more exact comparison of the Scenarios + + # Pre-initialize skipped items 'baz_2' and 'baz_3' + scen_empty.init_par('baz_2', ['i'], ['i_dim']) + scen_empty.init_set('baz_3', ['i', 'i'], ['i', 'i_also']) # Data can be read into an existing Scenario without init_items or - # commit_steps + # commit_steps arguments scen_empty.read_excel(tmp_path) + # Re-initialize an item with different index names + scen_empty.remove_par('d') + scen_empty.init_par('d', idx_sets=['i', 'j'], idx_names=['I', 'J']) + + # Reading now logs an error about conflicting dims + with assert_logs(caplog, "Existing par 'd' has index names(s)"): + scen_empty.read_excel(tmp_path, init_items=True) + # A new, empty Platform (different from the one under scen -> mp -> # test_mp) that lacks all units mp = ixmp.Platform(backend='jdbc', driver='hsqldb', From 386f3fe9d1f3961d415e74d8a089614439c6f72f Mon Sep 17 00:00:00 2001 From: Paul Natsuo Kishimoto Date: Wed, 25 Mar 2020 13:03:37 +0100 Subject: [PATCH 44/44] =?UTF-8?q?Test=20TimeSeries.read=5Ffile(=E2=80=A6,?= =?UTF-8?q?=20lastyear=3D=E2=80=A6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ixmp/tests/test_cli.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ixmp/tests/test_cli.py b/ixmp/tests/test_cli.py index 7362ff91b..eba8c119e 100644 --- a/ixmp/tests/test_cli.py +++ b/ixmp/tests/test_cli.py @@ -158,6 +158,7 @@ def test_import_ts(ixmp_cli, test_mp, test_data_path): '--version', '1', 'import', 'timeseries', '--firstyear', '2020', + '--lastyear', '2200', str(test_data_path / 'timeseries_canning.csv'), ]) assert result.exit_code == 0, result.output