diff --git a/ci/install.sh b/ci/install.sh
index d6cac22b..2a4d8d29 100755
--- a/ci/install.sh
+++ b/ci/install.sh
@@ -15,20 +15,29 @@ if [[ "$DISTRIB" == "conda" ]]; then
     deactivate
 
     # Use the miniconda installer for faster download / install of conda
-    # itself
-    wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh \
+    wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh \
         -O miniconda.sh
     chmod +x miniconda.sh && ./miniconda.sh -b -p $HOME/miniconda -f
     export PATH=$HOME/miniconda/bin:$PATH
     rm miniconda.sh -f
+    # Don't ask for confirmation
+    conda config --set always_yes true
+    # Update conda
+    conda update conda
+
+    # Follow channel priority strictly
+    conda config --set channel_priority strict
+    # Don't change prompt
+    conda config --set changeps1 false
+
+    if [[ "$PYTHON_VERSION" != "3.5" ]]; then
+        # Add conda-forge as priority channel
+        # conda-forge builds packages for Python 3.6 and above as of 2018-10-01
+        conda config --add channels conda-forge
+    fi
 
-    conda update --yes conda -c conda-forge
-
-    conda config --add channels conda-forge
-
-    # Configure the conda environment and put it in the path using the
-    # provided versions
-    conda create -n testenv --yes -c conda-forge \
+    # Create the conda environment
+    conda create -n testenv --yes \
         python=$PYTHON_VERSION \
         pytest \
         pytest-cov \
@@ -39,12 +48,9 @@ if [[ "$DISTRIB" == "conda" ]]; then
         pandas \
         psycopg2 \
         shapely \
-        fiona  && source activate testenv
+        fiona
 
-    if [[ "$PYTHON_VERSION" == "3.5" ]]; then
-        # Pin libgcc as possible root cause of fiona/shapely shared library import errors
-        conda install --yes libgcc-ng==7.2.0
-    fi
+    source activate testenv
 fi
 
 python setup.py develop
diff --git a/src/smif/convert/adaptor.py b/src/smif/convert/adaptor.py
index c08dd9e5..477188b8 100644
--- a/src/smif/convert/adaptor.py
+++ b/src/smif/convert/adaptor.py
@@ -48,14 +48,15 @@ class Adaptor(Model, metaclass=ABCMeta):
         -------
         numpy.ndarray
         """
+        from_dim, to_dim = self.get_convert_dims(from_spec, to_spec)
         try:
-            coefficients = data_handle.read_coefficients(from_spec, to_spec)
+            coefficients = data_handle.read_coefficients(from_dim, to_dim)
         except SmifDataNotFoundError:
             msg = "Generating coefficients for %s to %s"
-            self.logger.info(msg, from_spec, to_spec)
+            self.logger.info(msg, from_dim, to_dim)
 
             coefficients = self.generate_coefficients(from_spec, to_spec)
-            data_handle.write_coefficients(from_spec, to_spec, coefficients)
+            data_handle.write_coefficients(from_dim, to_dim, coefficients)
         return coefficients
 
     @abstractmethod
diff --git a/src/smif/data_layer/abstract_data_store.py b/src/smif/data_layer/abstract_data_store.py
index cd74508c..ee56c91d 100644
--- a/src/smif/data_layer/abstract_data_store.py
+++ b/src/smif/data_layer/abstract_data_store.py
@@ -180,17 +180,19 @@ class DataStore(metaclass=ABCMeta):
 
     # region Conversion coefficients
     @abstractmethod
-    def read_coefficients(self, source_spec, destination_spec):
+    def read_coefficients(self, source_dim, destination_dim):
         """Reads coefficients from the store
 
-        Coefficients are uniquely identified by their source/destination specs.
+        Coefficients are uniquely identified by their source/destination dimensions.
         This method and `write_coefficients` implement caching of conversion
-        coefficients between dimensions.
+        coefficients between a single pair of dimensions.
 
         Parameters
         ----------
-        source_spec : ~smif.metadata.spec.Spec
-        destination_spec : ~smif.metadata.spec.Spec
+        source_dim : str
+            dimension name
+        destination_dim : str
+            dimension name
 
         Returns
         -------
@@ -202,17 +204,19 @@ class DataStore(metaclass=ABCMeta):
         """
 
     @abstractmethod
-    def write_coefficients(self, source_spec, destination_spec, data):
+    def write_coefficients(self, source_dim, destination_dim, data):
         """Writes coefficients to the store
 
-        Coefficients are uniquely identified by their source/destination specs.
+        Coefficients are uniquely identified by their source/destination dimensions.
         This method and `read_coefficients` implement caching of conversion
-        coefficients between dimensions.
+        coefficients between a single pair of dimensions.
 
         Parameters
         ----------
-        source_spec : ~smif.metadata.spec.Spec
-        destination_spec : ~smif.metadata.spec.Spec
+        source_dim : str
+            dimension name
+        destination_dim : str
+            dimension name
         data : numpy.ndarray
 
         Notes
diff --git a/src/smif/data_layer/data_handle.py b/src/smif/data_layer/data_handle.py
index 90445772..62bd5855 100644
--- a/src/smif/data_layer/data_handle.py
+++ b/src/smif/data_layer/data_handle.py
@@ -562,44 +562,43 @@ class DataHandle(object):
             decision_iteration
         )
 
-    def read_coefficients(self,
-                          source_spec: Spec,
-                          destination_spec: Spec) -> np.ndarray:
+    def read_coefficients(self, source_dim: str, destination_dim: str) -> np.ndarray:
         """Reads coefficients from the store
 
-        Coefficients are uniquely identified by their source/destination specs.
+        Coefficients are uniquely identified by their source/destination dimensions.
         This method and `write_coefficients` implement caching of conversion
         coefficients between dimensions.
 
         Parameters
         ----------
-        source_spec : ~smif.metadata.spec.Spec
-        destination_spec : ~smif.metadata.spec.Spec
+        source_dim: str
+            Dimension name
+        destination_dim: str
+            Dimension name
 
         Returns
         -------
         numpy.ndarray
         """
-        data = self._store.read_coefficients(source_spec, destination_spec)
+        data = self._store.read_coefficients(source_dim, destination_dim)
         return data
 
-    def write_coefficients(self,
-                           source_spec: Spec,
-                           destination_spec: Spec,
-                           data: np.ndarray):
+    def write_coefficients(self, source_dim: str, destination_dim: str, data: np.ndarray):
         """Writes coefficients to the store
 
-        Coefficients are uniquely identified by their source/destination specs.
+        Coefficients are uniquely identified by their source/destination dimensions.
         This method and `read_coefficients` implement caching of conversion
         coefficients between dimensions.
 
         Parameters
         ----------
-        source_spec : ~smif.metadata.spec.Spec
-        destination_spec : ~smif.metadata.spec.Spec
+        source_dim: str
+            Dimension name
+        destination_dim: str
+            Dimension name
         data : numpy.ndarray
         """
-        data = self._store.write_coefficients(source_spec, destination_spec, data)
+        data = self._store.write_coefficients(source_dim, destination_dim, data)
         return data
 
 
diff --git a/src/smif/data_layer/database_interface.py b/src/smif/data_layer/database_interface.py
index fa25703d..299b949c 100644
--- a/src/smif/data_layer/database_interface.py
+++ b/src/smif/data_layer/database_interface.py
@@ -1271,10 +1271,10 @@ class DbDataStore(DataStore):
     # endregion
 
     # region Conversion coefficients
-    def read_coefficients(self, source_spec, destination_spec):
+    def read_coefficients(self, source_dim, destination_dim):
         raise NotImplementedError
 
-    def write_coefficients(self, source_spec, destination_spec, data):
+    def write_coefficients(self, source_dim, destination_dim, data):
         raise NotImplementedError()
     # endregion
 
diff --git a/src/smif/data_layer/file/file_data_store.py b/src/smif/data_layer/file/file_data_store.py
index 3d26dbfa..326848d0 100644
--- a/src/smif/data_layer/file/file_data_store.py
+++ b/src/smif/data_layer/file/file_data_store.py
@@ -203,27 +203,26 @@ class FileDataStore(DataStore):
     # endregion
 
     # region Conversion coefficients
-    def read_coefficients(self, source_spec, destination_spec):
-        results_path = self._get_coefficients_path(source_spec, destination_spec)
+    def read_coefficients(self, source_dim, destination_dim):
+        results_path = self._get_coefficients_path(source_dim, destination_dim)
         try:
             return self._read_ndarray(results_path)
         except FileNotFoundError:
             msg = "Could not find the coefficients file for %s to %s"
-            self.logger.warning(msg, source_spec, destination_spec)
-            raise SmifDataNotFoundError(msg.format(source_spec, destination_spec))
+            self.logger.warning(msg, source_dim, destination_dim)
+            raise SmifDataNotFoundError(msg.format(source_dim, destination_dim))
 
-    def write_coefficients(self, source_spec, destination_spec, data):
-        results_path = self._get_coefficients_path(source_spec, destination_spec)
-        header = "Conversion coefficients {}:{}".format(
-            source_spec.name, destination_spec.name)
+    def write_coefficients(self, source_dim, destination_dim, data):
+        results_path = self._get_coefficients_path(source_dim, destination_dim)
+        header = "Conversion coefficients {}:{}".format(source_dim, destination_dim)
         self._write_ndarray(results_path, data, header)
 
-    def _get_coefficients_path(self, source_spec, destination_spec):
+    def _get_coefficients_path(self, source_dim, destination_dim):
         path = os.path.join(
             self.data_folders['coefficients'],
-            "{}_{}.{}_{}.{}".format(
-                source_spec.name, "-".join(source_spec.dims),
-                destination_spec.name, "-".join(destination_spec.dims),
+            "{}.{}.{}".format(
+                source_dim,
+                destination_dim,
                 self.coef_ext
             )
         )
diff --git a/src/smif/data_layer/memory_interface.py b/src/smif/data_layer/memory_interface.py
index ff7616c9..d64de539 100644
--- a/src/smif/data_layer/memory_interface.py
+++ b/src/smif/data_layer/memory_interface.py
@@ -362,16 +362,15 @@ class MemoryDataStore(DataStore):
     # endregion
 
     # region Conversion coefficients
-    def read_coefficients(self, source_spec, destination_spec):
-        spec = (source_spec.name, destination_spec.name)
+    def read_coefficients(self, source_dim, destination_dim):
         try:
-            return self._coefficients[(source_spec.name, destination_spec.name)]
+            return self._coefficients[(source_dim, destination_dim)]
         except KeyError:
-            msg = "Could not find coefficients for spec pair {}.{}"
-            raise SmifDataNotFoundError(msg.format(spec[0], spec[1]))
+            msg = "Could not find coefficients for conversion from {}>{}"
+            raise SmifDataNotFoundError(msg.format(source_dim, destination_dim))
 
-    def write_coefficients(self, source_spec, destination_spec, data):
-        self._coefficients[(source_spec.name, destination_spec.name)] = data
+    def write_coefficients(self, source_dim, destination_dim, data):
+        self._coefficients[(source_dim, destination_dim)] = data
     # endregion
 
     # region Results
diff --git a/src/smif/data_layer/store.py b/src/smif/data_layer/store.py
index dd645ad8..e2756a73 100644
--- a/src/smif/data_layer/store.py
+++ b/src/smif/data_layer/store.py
@@ -740,19 +740,19 @@ class Store():
     # endregion
 
     # region Conversion coefficients
-    def read_coefficients(self,
-                          source_spec: Spec,
-                          destination_spec: Spec) -> np.ndarray:
+    def read_coefficients(self, source_dim: str, destination_dim: str) -> np.ndarray:
         """Reads coefficients from the store
 
-        Coefficients are uniquely identified by their source/destination specs.
+        Coefficients are uniquely identified by their source/destination dimensions.
         This method and `write_coefficients` implement caching of conversion
         coefficients between dimensions.
 
         Parameters
         ----------
-        source_spec : ~smif.metadata.spec.Spec
-        destination_spec : ~smif.metadata.spec.Spec
+        source_dim : str
+            Dimension name
+        destination_dim : str
+            Dimension name
 
         Returns
         -------
@@ -762,29 +762,28 @@ class Store():
         -----
         To be called from :class:`~smif.convert.adaptor.Adaptor` implementations.
         """
-        return self.data_store.read_coefficients(source_spec, destination_spec)
+        return self.data_store.read_coefficients(source_dim, destination_dim)
 
-    def write_coefficients(self,
-                           source_spec: Spec,
-                           destination_spec: Spec,
-                           data: np.ndarray):
+    def write_coefficients(self, source_dim: str, destination_dim: str, data: np.ndarray):
         """Writes coefficients to the store
 
-        Coefficients are uniquely identified by their source/destination specs.
+        Coefficients are uniquely identified by their source/destination dimensions.
         This method and `read_coefficients` implement caching of conversion
         coefficients between dimensions.
 
         Parameters
         ----------
-        source_spec : ~smif.metadata.spec.Spec
-        destination_spec : ~smif.metadata.spec.Spec
+        source_dim : str
+            Dimension name
+        destination_dim : str
+            Dimension name
         data : numpy.ndarray
 
         Notes
         -----
         To be called from :class:`~smif.convert.adaptor.Adaptor` implementations.
         """
-        self.data_store.write_coefficients(source_spec, destination_spec, data)
+        self.data_store.write_coefficients(source_dim, destination_dim, data)
     # endregion
 
     # region Results

Adapter coefficient data should be keyed by the set of dimension names within a spec pair
Coefficients for performing conversions do not need to be generated for every Spec pair, but for every unique Spec dimension pairing.
diff --git a/tests/data_layer/test_data_handle.py b/tests/data_layer/test_data_handle.py
index b3d13839..7061691b 100644
--- a/tests/data_layer/test_data_handle.py
+++ b/tests/data_layer/test_data_handle.py
@@ -802,42 +802,32 @@ class TestDataHandleCoefficients:
     """Tests the interface for reading and writing coefficients
     """
     def test_read_coefficient_raises(self, mock_store, mock_model):
-        """
+        """Reading coefficients that aren't cached should raise SmifDataNotFoundError
         """
         store = mock_store
-        source_spec = mock_model.outputs['gas_demand']
-        sink_spec = mock_model.outputs['gas_demand']
-
         dh = DataHandle(store, 1, 2010, [2010], mock_model)
+
         with raises(SmifDataNotFoundError):
-            dh.read_coefficients(source_spec, sink_spec)
+            dh.read_coefficients('from_dim', 'to_dim')
 
     def test_write_coefficients(self, mock_store, mock_model):
+        """Writing coefficients should succeed
         """
-        """
-
         store = mock_store
-        source_spec = mock_model.outputs['gas_demand']
-        sink_spec = mock_model.outputs['gas_demand']
         data = np.zeros(4)
 
         dh = DataHandle(store, 1, 2010, [2010], mock_model)
-        dh.write_coefficients(source_spec, sink_spec, data)
+        dh.write_coefficients('from_dim', 'to_dim', data)
 
     def test_read_coefficient_(self, mock_store, mock_model):
-        """
+        """Reading written coefficients should return the cached data
         """
         store = mock_store
-        source_spec = mock_model.outputs['gas_demand']
-        sink_spec = mock_model.outputs['gas_demand']
-
         dh = DataHandle(store, 1, 2010, [2010], mock_model)
-
         data = np.zeros(4)
-        dh.write_coefficients(source_spec, sink_spec, data)
-
-        actual = dh.read_coefficients(source_spec, sink_spec)
+        dh.write_coefficients('from_dim', 'to_dim', data)
 
+        actual = dh.read_coefficients('from_dim', 'to_dim')
         np.testing.assert_equal(actual, np.array([0, 0, 0, 0]))
 
 
diff --git a/tests/data_layer/test_data_store.py b/tests/data_layer/test_data_store.py
index 5ce339fe..a4cb981d 100644
--- a/tests/data_layer/test_data_store.py
+++ b/tests/data_layer/test_data_store.py
@@ -144,16 +144,15 @@ class TestState():
 class TestCoefficients():
     """Read/write conversion coefficients
     """
-    def test_read_write_coefficients(self, conversion_source_spec, conversion_sink_spec,
-                                     handler):
+    def test_read_write_coefficients(self, handler):
 
         with raises(SmifDataNotFoundError):
-            handler.read_coefficients(conversion_source_spec, conversion_sink_spec)
+            handler.read_coefficients('from_dim_name', 'to_dim_name')
 
         expected = np.array([[2]])
-        handler.write_coefficients(conversion_source_spec, conversion_sink_spec, expected)
+        handler.write_coefficients('from_dim_name', 'to_dim_name', expected)
 
-        actual = handler.read_coefficients(conversion_source_spec, conversion_sink_spec)
+        actual = handler.read_coefficients('from_dim_name', 'to_dim_name')
         np.testing.assert_equal(actual, expected)
 
 
diff --git a/tests/data_layer/test_data_store_csv.py b/tests/data_layer/test_data_store_csv.py
index 315b80e4..e74cf4b1 100644
--- a/tests/data_layer/test_data_store_csv.py
+++ b/tests/data_layer/test_data_store_csv.py
@@ -340,7 +340,8 @@ class TestNarrativeVariantData:
             config_handler.read_model_parameter_default('default.csv', spec)
 
         msg = "Data for 'test' contains duplicate values at [{'a': 2, 'b': 4}]"
-        assert msg in str(ex)
+        msg_alt = "Data for 'test' contains duplicate values at [{'b': 4, 'a': 2}]"
+        assert msg in str(ex) or msg_alt in str(ex)
 
     def test_error_wrong_name(self, config_handler):
         spec = Spec(
@@ -626,26 +627,17 @@ class TestWarmStart:
 class TestCoefficients:
     """Dimension conversion coefficients should be cached to disk and read if available.
     """
-    @fixture
-    def from_spec(self):
-        return Spec(name='from_test_coef', dtype='int')
-
-    @fixture
-    def to_spec(self):
-        return Spec(name='to_test_coef', dtype='int')
-
-    def test_read_write(self, from_spec, to_spec, config_handler):
+    def test_read_write(self, config_handler):
         data = np.eye(1000)
         handler = config_handler
-        handler.write_coefficients(from_spec, to_spec, data)
-        actual = handler.read_coefficients(from_spec, to_spec)
+        handler.write_coefficients('from_dim_name', 'to_dim_name', data)
+        actual = handler.read_coefficients('from_dim_name', 'to_dim_name')
         np.testing.assert_equal(actual, data)
 
-    def test_read_raises(self, from_spec, to_spec, config_handler):
+    def test_read_raises(self, config_handler):
         handler = config_handler
-        missing_spec = Spec(name='missing_coef', dtype='int')
         with raises(SmifDataNotFoundError):
-            handler.read_coefficients(missing_spec, to_spec)
+            handler.read_coefficients('wrong_dim_name', 'to_dim_name')
 
     def test_dfi_raises_if_folder_missing(self):
         """Ensure we can write files, even if project directory starts empty
diff --git a/tests/data_layer/test_store.py b/tests/data_layer/test_store.py
index ed9e982b..e4faa253 100644
--- a/tests/data_layer/test_store.py
+++ b/tests/data_layer/test_store.py
@@ -289,14 +289,13 @@ class TestStoreData():
         # read
         assert store.read_state('model_run_name', 0, 0) == state
 
-    def test_conversion_coefficients(self, store, conversion_coefficients,
-                                     conversion_source_spec, conversion_sink_spec):
+    def test_conversion_coefficients(self, store, conversion_coefficients):
         # write
         store.write_coefficients(
-            conversion_source_spec, conversion_sink_spec, conversion_coefficients)
+            'source_dim', 'sink_dim', conversion_coefficients)
         # read
         numpy.testing.assert_equal(
-            store.read_coefficients(conversion_source_spec, conversion_sink_spec),
+            store.read_coefficients('source_dim', 'sink_dim'),
             conversion_coefficients
         )
 

.environment.yml
pip install -e .
parse_log_pytest
environment.yml
pytest pytest-cov pytest
apt-get update apt-get install -y gdal-bin libspatialindex-dev libgeos-dev
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster @ file:///home/conda/feedstock_root/build_artifacts/alabaster_1673645646525/work
astroid @ file:///home/conda/feedstock_root/build_artifacts/astroid_1631641568157/work
attrs @ file:///home/conda/feedstock_root/build_artifacts/attrs_1671632566681/work
Babel @ file:///home/conda/feedstock_root/build_artifacts/babel_1667688356751/work
better-apidoc==0.3.2
brotlipy==0.7.0
certifi==2021.5.30
cffi @ file:///home/conda/feedstock_root/build_artifacts/cffi_1625835287197/work
cfgv==3.3.1
charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1661170624537/work
click==7.1.2
click-plugins==1.1.1
cligj @ file:///home/conda/feedstock_root/build_artifacts/cligj_1633637764473/work
codecov @ file:///home/conda/feedstock_root/build_artifacts/codecov_1681778020913/work
colorama @ file:///home/conda/feedstock_root/build_artifacts/colorama_1655412516417/work
coverage @ file:///home/conda/feedstock_root/build_artifacts/coverage_1633450575846/work
cryptography @ file:///home/conda/feedstock_root/build_artifacts/cryptography_1634230300355/work
cycler @ file:///home/conda/feedstock_root/build_artifacts/cycler_1635519461629/work
dataclasses @ file:///home/conda/feedstock_root/build_artifacts/dataclasses_1628958435052/work
distlib==0.3.9
docutils @ file:///home/conda/feedstock_root/build_artifacts/docutils_1618676244774/work
filelock==3.4.1
Fiona==1.8.20
Flask @ file:///home/conda/feedstock_root/build_artifacts/flask_1644887820294/work
GDAL==3.3.2
identify==2.4.4
idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1726459485162/work
imagesize @ file:///home/conda/feedstock_root/build_artifacts/imagesize_1656939531508/work
importlib-metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1630267465156/work
importlib-resources==5.2.3
iniconfig @ file:///home/conda/feedstock_root/build_artifacts/iniconfig_1603384189793/work
isodate @ file:///home/conda/feedstock_root/build_artifacts/isodate_1639582763789/work
isort @ file:///home/conda/feedstock_root/build_artifacts/isort_1636447814597/work
itsdangerous @ file:///home/conda/feedstock_root/build_artifacts/itsdangerous_1621360792037/work
Jinja2 @ file:///home/conda/feedstock_root/build_artifacts/jinja2_1636510082894/work
kiwisolver @ file:///home/conda/feedstock_root/build_artifacts/kiwisolver_1610099771815/work
lazy-object-proxy @ file:///home/conda/feedstock_root/build_artifacts/lazy-object-proxy_1616506793265/work
MarkupSafe @ file:///home/conda/feedstock_root/build_artifacts/markupsafe_1621455668064/work
matplotlib @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-suite_1611858699142/work
mccabe==0.6.1
more-itertools @ file:///home/conda/feedstock_root/build_artifacts/more-itertools_1690211628840/work
munch==2.5.0
mypy==0.971
mypy-extensions==1.0.0
networkx @ file:///home/conda/feedstock_root/build_artifacts/networkx_1646092782768/work
nodeenv==1.6.0
numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1626681920064/work
olefile @ file:///home/conda/feedstock_root/build_artifacts/olefile_1602866521163/work
packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1637239678211/work
pandas==1.1.5
Pillow @ file:///home/conda/feedstock_root/build_artifacts/pillow_1630696616009/work
Pint @ file:///home/conda/feedstock_root/build_artifacts/pint_1630435029884/work
platformdirs @ file:///home/conda/feedstock_root/build_artifacts/platformdirs_1645298319244/work
pluggy @ file:///home/conda/feedstock_root/build_artifacts/pluggy_1631522669284/work
pre-commit==2.17.0
psycopg2 @ file:///home/conda/feedstock_root/build_artifacts/psycopg2-split_1623909968806/work
py @ file:///home/conda/feedstock_root/build_artifacts/py_1636301881863/work
pyarrow==5.0.0
pycparser @ file:///home/conda/feedstock_root/build_artifacts/pycparser_1636257122734/work
Pygments @ file:///home/conda/feedstock_root/build_artifacts/pygments_1672682006896/work
pylint @ file:///home/conda/feedstock_root/build_artifacts/pylint_1631892890219/work
pyOpenSSL @ file:///home/conda/feedstock_root/build_artifacts/pyopenssl_1663846997386/work
pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1724616129934/work
PySocks @ file:///home/conda/feedstock_root/build_artifacts/pysocks_1610291458349/work
pytest==6.2.5
pytest-cov @ file:///home/conda/feedstock_root/build_artifacts/pytest-cov_1664412836798/work
python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1626286286081/work
pytz @ file:///home/conda/feedstock_root/build_artifacts/pytz_1693930252784/work
PyYAML==6.0.1
requests @ file:///home/conda/feedstock_root/build_artifacts/requests_1656534056640/work
Rtree @ file:///home/conda/feedstock_root/build_artifacts/rtree_1610147153210/work
ruamel.yaml==0.15.50
ruamel.yaml.clib @ file:///home/conda/feedstock_root/build_artifacts/ruamel.yaml.clib_1610146840934/work
scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy_1629411471490/work
Shapely @ file:///home/conda/feedstock_root/build_artifacts/shapely_1628205367507/work
six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
-e git+https://github.com/nismod/smif.git@5e0e04bf7718d1d8a814660f7cbde131760cde2b#egg=smif
snowballstemmer @ file:///home/conda/feedstock_root/build_artifacts/snowballstemmer_1637143057757/work
Sphinx @ file:///home/conda/feedstock_root/build_artifacts/sphinx_1658872348413/work
sphinxcontrib-applehelp @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-applehelp_1674487779667/work
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-htmlhelp_1675256494457/work
sphinxcontrib-jsmath @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-jsmath_1691604704163/work
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-serializinghtml_1649380998999/work
toml @ file:///home/conda/feedstock_root/build_artifacts/toml_1604308577558/work
tomli @ file:///home/conda/feedstock_root/build_artifacts/tomli_1635181214134/work
tornado @ file:///home/conda/feedstock_root/build_artifacts/tornado_1610094701020/work
typed-ast @ file:///home/conda/feedstock_root/build_artifacts/typed-ast_1618337594445/work
typing_extensions @ file:///home/conda/feedstock_root/build_artifacts/typing_extensions_1644850595256/work
urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1678635778344/work
virtualenv==20.16.2
Werkzeug @ file:///home/conda/feedstock_root/build_artifacts/werkzeug_1642714909499/work
wrapt @ file:///home/conda/feedstock_root/build_artifacts/wrapt_1610094846427/work
xarray @ file:///home/conda/feedstock_root/build_artifacts/xarray_1621474818012/work
zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1633302054558/work

name: smif
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - abseil-cpp=20210324.2=h9c3ff4c_0
  - alabaster=0.7.13=pyhd8ed1ab_0
  - arrow-cpp=5.0.0=py36h70b7088_8_cpu
  - astroid=2.8.0=py36h5fab9bb_0
  - attrs=22.2.0=pyh71513ae_0
  - aws-c-cal=0.5.11=h95a6274_0
  - aws-c-common=0.6.2=h7f98852_0
  - aws-c-event-stream=0.2.7=h3541f99_13
  - aws-c-io=0.10.5=hfb6a706_0
  - aws-checksums=0.1.11=ha31a3da_7
  - aws-sdk-cpp=1.8.186=hb4091e7_3
  - babel=2.11.0=pyhd8ed1ab_0
  - boost-cpp=1.74.0=h312852a_4
  - brotlipy=0.7.0=py36h8f6f2f9_1001
  - bzip2=1.0.8=h7f98852_4
  - c-ares=1.18.1=h7f98852_0
  - ca-certificates=2025.2.25=h06a4308_0
  - cairo=1.16.0=h6cf1ce9_1008
  - certifi=2021.5.30=py36h06a4308_0
  - cffi=1.14.6=py36hc120d54_0
  - cfitsio=3.470=hb418390_7
  - charset-normalizer=2.1.1=pyhd8ed1ab_0
  - click=7.1.2=pyh9f0ad1d_0
  - click-plugins=1.1.1=py_0
  - cligj=0.7.2=pyhd8ed1ab_1
  - codecov=2.1.13=pyhd8ed1ab_0
  - colorama=0.4.5=pyhd8ed1ab_0
  - coverage=6.0=py36h8f6f2f9_1
  - cryptography=35.0.0=py36hb60f036_0
  - curl=7.79.1=h2574ce0_1
  - cycler=0.11.0=pyhd8ed1ab_0
  - dataclasses=0.8=pyh787bdff_2
  - docutils=0.17.1=py36h5fab9bb_0
  - expat=2.4.8=h27087fc_0
  - fiona=1.8.20=py36h5c400b1_1
  - flask=2.0.3=pyhd8ed1ab_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=h77eed37_3
  - fontconfig=2.14.0=h8e229c2_0
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - freetype=2.10.4=h0708190_1
  - freexl=1.0.6=h7f98852_0
  - gdal=3.3.2=py36h9e1669a_4
  - geos=3.9.1=h9c3ff4c_2
  - geotiff=1.7.0=hcfb7246_3
  - gettext=0.19.8.1=h0b5b191_1005
  - gflags=2.2.2=he1b5a44_1004
  - giflib=5.2.1=h36c2ea0_2
  - glog=0.5.0=h48cff8f_0
  - grpc-cpp=1.40.0=h05f19cf_1
  - hdf4=4.2.15=h10796ff_3
  - hdf5=1.12.1=nompi_h2750804_100
  - icu=68.2=h9c3ff4c_0
  - idna=3.10=pyhd8ed1ab_0
  - imagesize=1.4.1=pyhd8ed1ab_0
  - importlib-metadata=4.8.1=py36h5fab9bb_0
  - importlib_metadata=4.8.1=hd8ed1ab_1
  - iniconfig=1.1.1=pyh9f0ad1d_0
  - isodate=0.6.1=pyhd8ed1ab_0
  - isort=5.10.1=pyhd8ed1ab_0
  - itsdangerous=2.0.1=pyhd8ed1ab_0
  - jbig=2.1=h7f98852_2003
  - jinja2=3.0.3=pyhd8ed1ab_0
  - jpeg=9e=h166bdaf_1
  - json-c=0.15=h98cffda_0
  - kealib=1.4.14=h87e4c3c_3
  - keyutils=1.6.1=h166bdaf_0
  - kiwisolver=1.3.1=py36h605e78d_1
  - krb5=1.19.3=h3790be6_0
  - lazy-object-proxy=1.6.0=py36h8f6f2f9_0
  - lcms2=2.12=hddcbb42_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - lerc=2.2.1=h9c3ff4c_0
  - libblas=3.9.0=16_linux64_openblas
  - libbrotlicommon=1.0.9=h166bdaf_7
  - libbrotlidec=1.0.9=h166bdaf_7
  - libbrotlienc=1.0.9=h166bdaf_7
  - libcblas=3.9.0=16_linux64_openblas
  - libcurl=7.79.1=h2574ce0_1
  - libdap4=3.20.6=hd7c4107_2
  - libdeflate=1.7=h7f98852_5
  - libedit=3.1.20191231=he28a2e2_2
  - libev=4.33=h516909a_1
  - libevent=2.1.10=h9b69904_4
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgdal=3.3.2=h9c9eb65_4
  - libgfortran-ng=13.2.0=h69a702a_0
  - libgfortran5=13.2.0=ha4646dd_0
  - libglib=2.68.4=h3e27bee_0
  - libgomp=11.2.0=h1234567_1
  - libiconv=1.17=h166bdaf_0
  - libkml=1.3.0=h238a007_1014
  - liblapack=3.9.0=16_linux64_openblas
  - libnetcdf=4.8.1=nompi_hb3fd0d9_101
  - libnghttp2=1.43.0=h812cca2_1
  - libnsl=2.0.0=h7f98852_0
  - libopenblas=0.3.21=h043d6bf_0
  - libpng=1.6.37=h21135ba_2
  - libpq=13.3=hd57d9b9_0
  - libprotobuf=3.18.0=h780b84a_1
  - librttopo=1.1.0=h1185371_6
  - libspatialindex=1.9.3=h9c3ff4c_4
  - libspatialite=5.0.1=h8796b1e_9
  - libssh2=1.10.0=ha56f1ee_2
  - libstdcxx-ng=11.2.0=h1234567_1
  - libthrift=0.15.0=he6d91bd_0
  - libtiff=4.3.0=hf544144_1
  - libutf8proc=2.7.0=h7f98852_0
  - libuuid=2.32.1=h7f98852_1000
  - libwebp-base=1.2.2=h7f98852_1
  - libxcb=1.13=h7f98852_1004
  - libxml2=2.9.12=h72842e0_0
  - libzip=1.8.0=h4de3113_1
  - lz4-c=1.9.3=h9c3ff4c_1
  - markupsafe=2.0.1=py36h8f6f2f9_0
  - matplotlib-base=3.3.4=py36hd391965_0
  - mccabe=0.6.1=py_1
  - more-itertools=10.0.0=pyhd8ed1ab_0
  - munch=2.5.0=py_0
  - ncurses=6.4=h6a678d5_0
  - networkx=2.7=pyhd8ed1ab_0
  - nspr=4.32=h9c3ff4c_1
  - nss=3.69=hb5efdd6_1
  - numpy=1.19.5=py36hfc0c790_2
  - olefile=0.46=pyh9f0ad1d_1
  - openjpeg=2.4.0=hb52868f_1
  - openssl=1.1.1w=h7f8727e_0
  - orc=1.7.0=h68e2c4e_0
  - packaging=21.3=pyhd8ed1ab_0
  - pandas=1.1.5=py36h284efc9_0
  - parquet-cpp=1.5.1=2
  - pcre=8.45=h9c3ff4c_0
  - pillow=8.3.2=py36h676a545_0
  - pint=0.17=pyhd8ed1ab_1
  - pip=21.3.1=pyhd8ed1ab_0
  - pixman=0.40.0=h36c2ea0_0
  - platformdirs=2.5.1=pyhd8ed1ab_0
  - pluggy=1.0.0=py36h5fab9bb_1
  - poppler=21.09.0=ha39eefc_3
  - poppler-data=0.4.12=hd8ed1ab_0
  - postgresql=13.3=h2510834_0
  - proj=8.1.1=h277dcde_2
  - psycopg2=2.9.1=py36h8f6f2f9_0
  - pthread-stubs=0.4=h36c2ea0_1001
  - py=1.11.0=pyh6c4a22f_0
  - pyarrow=5.0.0=py36h363bd18_8_cpu
  - pycparser=2.21=pyhd8ed1ab_0
  - pygments=2.14.0=pyhd8ed1ab_0
  - pylint=2.11.1=pyhd8ed1ab_0
  - pyopenssl=22.0.0=pyhd8ed1ab_1
  - pyparsing=3.1.4=pyhd8ed1ab_0
  - pysocks=1.7.1=py36h5fab9bb_3
  - pytest=6.2.5=py36h5fab9bb_0
  - pytest-cov=4.0.0=pyhd8ed1ab_0
  - python=3.6.13=h12debd9_1
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python_abi=3.6=2_cp36m
  - pytz=2023.3.post1=pyhd8ed1ab_0
  - re2=2021.09.01=h9c3ff4c_0
  - readline=8.2=h5eee18b_0
  - requests=2.28.1=pyhd8ed1ab_0
  - rtree=0.9.7=py36hb415506_1
  - ruamel.yaml.clib=0.2.2=py36h8f6f2f9_2
  - s2n=1.0.10=h9b69904_0
  - scipy=1.5.3=py36h81d768a_1
  - setuptools=58.0.4=py36h06a4308_0
  - shapely=1.7.1=py36hff28ebb_5
  - six=1.16.0=pyh6c4a22f_0
  - snappy=1.1.9=hbd366e4_1
  - snowballstemmer=2.2.0=pyhd8ed1ab_0
  - sphinx=5.1.1=pyh6c4a22f_0
  - sphinxcontrib-applehelp=1.0.4=pyhd8ed1ab_0
  - sphinxcontrib-devhelp=1.0.2=py_0
  - sphinxcontrib-htmlhelp=2.0.1=pyhd8ed1ab_0
  - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
  - sphinxcontrib-qthelp=1.0.3=py_0
  - sphinxcontrib-serializinghtml=1.1.5=pyhd8ed1ab_2
  - sqlite=3.45.3=h5eee18b_0
  - tiledb=2.3.4=he87e0bf_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd8ed1ab_0
  - tomli=1.2.2=pyhd8ed1ab_0
  - tornado=6.1=py36h8f6f2f9_1
  - typed-ast=1.4.3=py36h8f6f2f9_0
  - typing-extensions=4.1.1=hd8ed1ab_0
  - typing_extensions=4.1.1=pyha770c72_0
  - tzcode=2022a=h166bdaf_0
  - tzdata=2025b=h78e105d_0
  - urllib3=1.26.15=pyhd8ed1ab_0
  - werkzeug=2.0.2=pyhd8ed1ab_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - wrapt=1.12.1=py36h8f6f2f9_3
  - xarray=0.18.2=pyhd8ed1ab_0
  - xerces-c=3.2.3=h9d8b166_3
  - xorg-kbproto=1.0.7=h7f98852_1002
  - xorg-libice=1.0.10=h7f98852_0
  - xorg-libsm=1.2.3=hd9c2040_1000
  - xorg-libx11=1.7.2=h7f98852_0
  - xorg-libxau=1.0.9=h7f98852_0
  - xorg-libxdmcp=1.1.3=h7f98852_0
  - xorg-libxext=1.3.4=h7f98852_1
  - xorg-libxrender=0.9.10=h7f98852_1003
  - xorg-renderproto=0.11.1=h7f98852_1002
  - xorg-xextproto=7.3.0=h7f98852_1002
  - xorg-xproto=7.0.31=h7f98852_1007
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd8ed1ab_0
  - zlib=1.2.13=h5eee18b_1
  - zstd=1.5.0=ha95c52a_0
  - pip:
      - better-apidoc==0.3.2
      - cfgv==3.3.1
      - distlib==0.3.9
      - filelock==3.4.1
      - identify==2.4.4
      - importlib-resources==5.2.3
      - mypy==0.971
      - mypy-extensions==1.0.0
      - nodeenv==1.6.0
      - pre-commit==2.17.0
      - pyyaml==6.0.1
      - ruamel-yaml==0.15.50
      - virtualenv==20.16.2
prefix: /opt/conda/envs/smif

tests/data_layer/test_data_handle.py::TestDataHandleCoefficients::test_read_coefficient_raises tests/data_layer/test_data_handle.py::TestDataHandleCoefficients::test_write_coefficients tests/data_layer/test_data_handle.py::TestDataHandleCoefficients::test_read_coefficient_ tests/data_layer/test_data_store.py::TestCoefficients::test_read_write_coefficients[memory] tests/data_layer/test_data_store.py::TestCoefficients::test_read_write_coefficients[file_csv] tests/data_layer/test_data_store.py::TestCoefficients::test_read_write_coefficients[file_parquet] tests/data_layer/test_data_store_csv.py::TestCoefficients::test_read_write tests/data_layer/test_data_store_csv.py::TestCoefficients::test_read_raises tests/data_layer/test_store.py::TestStoreData::test_conversion_coefficients
tests/data_layer/test_data_store_csv.py::TestScenarios::test_missing_timestep
tests/data_layer/test_data_handle.py::TestDataHandle::test_create tests/data_layer/test_data_handle.py::TestDataHandle::test_get_data_from_scenario tests/data_layer/test_data_handle.py::TestDataHandle::test_get_data_from_model_output tests/data_layer/test_data_handle.py::TestDataHandle::test_get_data_with_conversion tests/data_layer/test_data_handle.py::TestDataHandle::test_get_base_timestep_data tests/data_layer/test_data_handle.py::TestDataHandle::test_get_base_timestep_data_before_model_run tests/data_layer/test_data_handle.py::TestDataHandle::test_get_previous_timestep_data tests/data_layer/test_data_handle.py::TestDataHandle::test_get_data_with_square_brackets tests/data_layer/test_data_handle.py::TestDataHandle::test_set_data tests/data_layer/test_data_handle.py::TestDataHandle::test_set_data_wrong_shape tests/data_layer/test_data_handle.py::TestDataHandle::test_set_data_with_square_brackets tests/data_layer/test_data_handle.py::TestDataHandle::test_set_data_with_square_brackets_raises tests/data_layer/test_data_handle.py::TestDataHandleState::test_get_state tests/data_layer/test_data_handle.py::TestDataHandleState::test_get_interventions_for_sector_model tests/data_layer/test_data_handle.py::TestDataHandleState::test_interventions_sector_model_ignore_unrecog tests/data_layer/test_data_handle.py::TestDataHandleState::test_pass_none_to_timestep_raises tests/data_layer/test_data_handle.py::TestDataHandleTimesteps::test_current_timestep tests/data_layer/test_data_handle.py::TestDataHandleTimesteps::test_base_timestep tests/data_layer/test_data_handle.py::TestDataHandleTimesteps::test_previous_timestep tests/data_layer/test_data_handle.py::TestDataHandleTimesteps::test_previous_timestep_error tests/data_layer/test_data_handle.py::TestDataHandleGetResults::test_get_results_sectormodel tests/data_layer/test_data_handle.py::TestDataHandleGetResults::test_get_results_no_output_sector tests/data_layer/test_data_handle.py::TestDataHandleGetParameters::test_load_parameter_defaults tests/data_layer/test_data_handle.py::TestDataHandleGetParameters::test_load_parameters_override tests/data_layer/test_data_handle.py::TestDataHandleGetParameters::test_load_parameters_override_ordered tests/data_layer/test_data_handle.py::TestDataHandleGetParameters::test_load_parameters_partial_override tests/data_layer/test_data_handle.py::TestResultsHandle::test_get_results_sos_model tests/data_layer/test_data_handle.py::TestResultsHandle::test_get_results_no_output_sos tests/data_layer/test_data_handle.py::TestResultsHandle::test_get_results_wrong_name_sos tests/data_layer/test_data_handle.py::TestResultsHandle::test_get_results_not_exists tests/data_layer/test_data_store.py::TestDataArray::test_read_write_data_array[memory] tests/data_layer/test_data_store.py::TestDataArray::test_read_write_data_array[file_csv] tests/data_layer/test_data_store.py::TestDataArray::test_read_write_data_array[file_parquet] tests/data_layer/test_data_store.py::TestDataArray::test_read_zero_d_from_timeseries[memory] tests/data_layer/test_data_store.py::TestDataArray::test_read_zero_d_from_timeseries[file_csv] tests/data_layer/test_data_store.py::TestDataArray::test_read_zero_d_from_timeseries[file_parquet] tests/data_layer/test_data_store.py::TestDataArray::test_read_data_array_missing_timestep[memory] tests/data_layer/test_data_store.py::TestDataArray::test_read_data_array_missing_timestep[file_csv] tests/data_layer/test_data_store.py::TestDataArray::test_read_data_array_missing_timestep[file_parquet] tests/data_layer/test_data_store.py::TestDataArray::test_string_data[memory] tests/data_layer/test_data_store.py::TestDataArray::test_string_data[file_csv] tests/data_layer/test_data_store.py::TestDataArray::test_string_data[file_parquet] tests/data_layer/test_data_store.py::TestInitialConditions::test_read_write_initial_conditions[memory] tests/data_layer/test_data_store.py::TestInitialConditions::test_read_write_initial_conditions[file_csv] tests/data_layer/test_data_store.py::TestInitialConditions::test_read_write_initial_conditions[file_parquet] tests/data_layer/test_data_store.py::TestInterventions::test_read_write_interventions[memory] tests/data_layer/test_data_store.py::TestInterventions::test_read_write_interventions[file_csv] tests/data_layer/test_data_store.py::TestInterventions::test_read_write_interventions[file_parquet] tests/data_layer/test_data_store.py::TestState::test_read_write_state[memory] tests/data_layer/test_data_store.py::TestState::test_read_write_state[file_csv] tests/data_layer/test_data_store.py::TestState::test_read_write_state[file_parquet] tests/data_layer/test_data_store.py::TestResults::test_read_write_results[memory] tests/data_layer/test_data_store.py::TestResults::test_read_write_results[file_csv] tests/data_layer/test_data_store.py::TestResults::test_read_write_results[file_parquet] tests/data_layer/test_data_store.py::TestResults::test_available_results[memory] tests/data_layer/test_data_store.py::TestResults::test_available_results[file_csv] tests/data_layer/test_data_store.py::TestResults::test_available_results[file_parquet] tests/data_layer/test_data_store.py::TestResults::test_read_results_raises[memory] tests/data_layer/test_data_store.py::TestResults::test_read_results_raises[file_csv] tests/data_layer/test_data_store.py::TestResults::test_read_results_raises[file_parquet] tests/data_layer/test_data_store_csv.py::TestReadState::test_read_state tests/data_layer/test_data_store_csv.py::TestScenarios::test_data_column_error tests/data_layer/test_data_store_csv.py::TestScenarios::test_scenario_data_validates tests/data_layer/test_data_store_csv.py::TestNarrativeVariantData::test_narrative_data tests/data_layer/test_data_store_csv.py::TestNarrativeVariantData::test_narrative_data_missing tests/data_layer/test_data_store_csv.py::TestNarrativeVariantData::test_default_data_mismatch tests/data_layer/test_data_store_csv.py::TestNarrativeVariantData::test_error_duplicate_rows_single_index tests/data_layer/test_data_store_csv.py::TestNarrativeVariantData::test_error_duplicate_rows_multi_index tests/data_layer/test_data_store_csv.py::TestNarrativeVariantData::test_error_wrong_name tests/data_layer/test_data_store_csv.py::TestNarrativeVariantData::test_error_not_full tests/data_layer/test_data_store_csv.py::TestResults::test_read_results tests/data_layer/test_data_store_csv.py::TestCoefficients::test_dfi_raises_if_folder_missing tests/data_layer/test_store.py::TestStoreConfig::test_model_runs tests/data_layer/test_store.py::TestStoreConfig::test_read_model_run_sorted tests/data_layer/test_store.py::TestStoreConfig::test_sos_models tests/data_layer/test_store.py::TestStoreConfig::test_models tests/data_layer/test_store.py::TestStoreConfig::test_models_skip_coords tests/data_layer/test_store.py::TestStoreConfig::test_scenarios tests/data_layer/test_store.py::TestStoreConfig::test_scenarios_skip_coords tests/data_layer/test_store.py::TestStoreConfig::test_scenario_variants tests/data_layer/test_store.py::TestStoreConfig::test_narratives tests/data_layer/test_store.py::TestStoreConfig::test_strategies tests/data_layer/test_store.py::TestStoreMetadata::test_units tests/data_layer/test_store.py::TestStoreMetadata::test_dimensions tests/data_layer/test_store.py::TestStoreData::test_scenario_variant_data tests/data_layer/test_store.py::TestStoreData::test_narrative_variant_data tests/data_layer/test_store.py::TestStoreData::test_model_parameter_default tests/data_layer/test_store.py::TestStoreData::test_interventions tests/data_layer/test_store.py::TestStoreData::test_initial_conditions tests/data_layer/test_store.py::TestStoreData::test_state tests/data_layer/test_store.py::TestStoreData::test_results tests/data_layer/test_store.py::TestStoreData::test_warm_start
src/smif/convert/adaptor.py src/smif/data_layer/database_interface.py ci/install.sh src/smif/data_layer/data_handle.py src/smif/data_layer/memory_interface.py src/smif/data_layer/file/file_data_store.py src/smif/data_layer/abstract_data_store.py src/smif/data_layer/store.py
src/smif/convert/adaptor.py src/smif/data_layer/database_interface.py ci/install.sh src/smif/data_layer/data_handle.py src/smif/data_layer/memory_interface.py src/smif/data_layer/file/file_data_store.py src/smif/data_layer/abstract_data_store.py src/smif/data_layer/store.py