diff --git a/src/smif/data_layer/data_handle.py b/src/smif/data_layer/data_handle.py
index 40401cc8..def4b820 100644
--- a/src/smif/data_layer/data_handle.py
+++ b/src/smif/data_layer/data_handle.py
@@ -555,6 +555,14 @@ class DataHandle(object):
             decision_iteration
         )
 
+    def read_coefficients(self, source_spec, destination_spec):
+        data = self._store.read_coefficients(source_spec, destination_spec)
+        return data
+
+    def write_coefficients(self, source_spec, destination_spec, data):
+        data = self._store.write_coefficients(source_spec, destination_spec, data)
+        return data
+
 
 class ResultsHandle(object):
     """Results access for decision modules
diff --git a/src/smif/data_layer/memory_interface.py b/src/smif/data_layer/memory_interface.py
index 14d52cbe..ff7616c9 100644
--- a/src/smif/data_layer/memory_interface.py
+++ b/src/smif/data_layer/memory_interface.py
@@ -363,10 +363,15 @@ class MemoryDataStore(DataStore):
 
     # region Conversion coefficients
     def read_coefficients(self, source_spec, destination_spec):
-        return self._coefficients[(source_spec, destination_spec)]
+        spec = (source_spec.name, destination_spec.name)
+        try:
+            return self._coefficients[(source_spec.name, destination_spec.name)]
+        except KeyError:
+            msg = "Could not find coefficients for spec pair {}.{}"
+            raise SmifDataNotFoundError(msg.format(spec[0], spec[1]))
 
     def write_coefficients(self, source_spec, destination_spec, data):
-        self._coefficients[(source_spec, destination_spec)] = data
+        self._coefficients[(source_spec.name, destination_spec.name)] = data
     # endregion
 
     # region Results

'DataHandle' object has no attribute 'read_coefficients'
Adaptors expect data_handle to have method `read_coefficients`.  The store has read and write methods for coefficients, but this isn't exposed at the data_handle level.

```python
Traceback (most recent call last):
  File "/vagrant/smif/src/smif/controller/scheduler.py", line 178, in add
    self._run(job_graph, job_graph_id)
  File "/vagrant/smif/src/smif/controller/scheduler.py", line 249, in _run
    model.simulate(data_handle)
  File "/vagrant/smif/src/smif/convert/adaptor.py", line 27, in simulate
    coefficients = self.get_coefficients(data, from_spec, to_spec)
  File "/vagrant/smif/src/smif/convert/adaptor.py", line 46, in get_coefficients
    coefficients = data_handle.read_coefficients(from_spec, to_spec)
AttributeError: 'DataHandle' object has no attribute 'read_coefficients'
```
diff --git a/tests/data_layer/test_data_handle.py b/tests/data_layer/test_data_handle.py
index cb858427..a6556afe 100644
--- a/tests/data_layer/test_data_handle.py
+++ b/tests/data_layer/test_data_handle.py
@@ -9,7 +9,7 @@ from smif.data_layer import DataHandle
 from smif.data_layer.data_array import DataArray
 from smif.data_layer.data_handle import ResultsHandle
 from smif.exception import (SmifDataError, SmifDataMismatchError,
-                            SmifTimestepResolutionError)
+                            SmifDataNotFoundError, SmifTimestepResolutionError)
 from smif.metadata import Spec
 from smif.model import SectorModel, SosModel
 
@@ -88,7 +88,7 @@ def mock_store(sample_dimensions, get_sector_model, empty_store):
 
     # convertor model
     # - test input matches test output from test_source
-    # - test ouput matches population input to energy demand
+    # - test output matches population input to energy demand
     store.write_model({
         'name': 'test_convertor',
         'description': '',
@@ -716,6 +716,49 @@ class TestDataHandleGetParameters:
         assert actual == expected
 
 
+class TestDataHandleCoefficients:
+    """Tests the interface for reading and writing coefficients
+    """
+    def test_read_coefficient_raises(self, mock_store, mock_model):
+        """
+        """
+        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)
+
+    def test_write_coefficients(self, mock_store, mock_model):
+        """
+        """
+
+        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)
+
+    def test_read_coefficient_(self, mock_store, mock_model):
+        """
+        """
+        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)
+
+        np.testing.assert_equal(actual, np.array([0, 0, 0, 0]))
+
+
 class TestResultsHandle:
     """Get results from any model
     """
diff --git a/tests/data_layer/test_data_store.py b/tests/data_layer/test_data_store.py
index 212e4680..5ce339fe 100644
--- a/tests/data_layer/test_data_store.py
+++ b/tests/data_layer/test_data_store.py
@@ -146,8 +146,13 @@ class TestCoefficients():
     """
     def test_read_write_coefficients(self, conversion_source_spec, conversion_sink_spec,
                                      handler):
+
+        with raises(SmifDataNotFoundError):
+            handler.read_coefficients(conversion_source_spec, conversion_sink_spec)
+
         expected = np.array([[2]])
         handler.write_coefficients(conversion_source_spec, conversion_sink_spec, expected)
+
         actual = handler.read_coefficients(conversion_source_spec, conversion_sink_spec)
         np.testing.assert_equal(actual, expected)
 

.environment.yml
pip install -e .
parse_log_pytest
environment.yml
pytest
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
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@03e0ab8be750a608c19471d56dd4154fdd402b01#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
      - 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_handle.py::TestDataHandle::test_create tests/data_layer/test_data_handle.py::TestDataHandle::test_get_data 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::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.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]
src/smif/data_layer/data_handle.py src/smif/data_layer/memory_interface.py
src/smif/data_layer/data_handle.py src/smif/data_layer/memory_interface.py