diff --git a/podpac/core/data/datasource.py b/podpac/core/data/datasource.py
index bb1bcd16..cab0d03e 100644
--- a/podpac/core/data/datasource.py
+++ b/podpac/core/data/datasource.py
@@ -99,26 +99,24 @@ DATA_DOC = {
         :attr:`podpac.data.INTERPOLATION_SHORTCUTS`. The interpolation method associated
         with this string will be applied to all dimensions at the same time.
 
-        If input is a dict, the dict must contain one of two definitions:
-
-        1. A dictionary which contains the key ``'method'`` defining the interpolation method name.
-           If the interpolation method is not one of :attr:`podpac.data.INTERPOLATION_SHORTCUTS`, a
-           second key ``'interpolators'`` must be defined with a list of
-           :class:`podpac.interpolators.Interpolator` classes to use in order of uages.
-           The dictionary may contain an option ``'params'`` key which contains a dict of parameters to pass along to
-           the :class:`podpac.interpolators.Interpolator` classes associated with the interpolation method.
-           This interpolation definition will be applied to all dimensions.
-        2. A dictionary containing an ordered set of keys defining dimensions and values
-           defining the interpolation method to use with the dimensions.
-           The key must be a string or tuple of dimension names (i.e. ``'time'`` or ``('lat', 'lon')`` ).
-           The value can either be a string matching one of the interpolation shortcuts defined in
-           :attr:`podpac.data.INTERPOLATION_SHORTCUTS` or a dictionary meeting the previous requirements
-           (1). If the dictionary does not contain a key for all unstacked dimensions of the source coordinates, the
-           :attr:`podpac.data.INTERPOLATION_DEFAULT` value will be used.
-           All dimension keys must be unstacked even if the underlying coordinate dimensions are stacked.
-           Any extra dimensions included but not found in the source coordinates will be ignored.
-
-        If input is a :class:`podpac.data.Interpolation` class, this interpolation
+        If input is a dict or list of dict, the dict or dict elements must adhere to the following format:
+
+        The key ``'method'`` defining the interpolation method name.
+        If the interpolation method is not one of :attr:`podpac.data.INTERPOLATION_SHORTCUTS`, a
+        second key ``'interpolators'`` must be defined with a list of
+        :class:`podpac.interpolators.Interpolator` classes to use in order of uages.
+        The dictionary may contain an option ``'params'`` key which contains a dict of parameters to pass along to
+        the :class:`podpac.interpolators.Interpolator` classes associated with the interpolation method.
+        
+        The dict may contain the key ``'dims'`` which specifies dimension names (i.e. ``'time'`` or ``('lat', 'lon')`` ). 
+        If the dictionary does not contain a key for all unstacked dimensions of the source coordinates, the
+        :attr:`podpac.data.INTERPOLATION_DEFAULT` value will be used.
+        All dimension keys must be unstacked even if the underlying coordinate dimensions are stacked.
+        Any extra dimensions included but not found in the source coordinates will be ignored.
+
+        The dict may contain a key ``'params'`` that can be used to configure the :class:`podpac.interpolators.Interpolator` classes associated with the interpolation method.
+
+        If input is a :class:`podpac.data.Interpolation` class, this Interpolation
         class will be used without modification.
         """,
 }
diff --git a/podpac/core/data/interpolation.py b/podpac/core/data/interpolation.py
index f02b495b..55255a59 100644
--- a/podpac/core/data/interpolation.py
+++ b/podpac/core/data/interpolation.py
@@ -85,7 +85,7 @@ def interpolation_trait(default_value=INTERPOLATION_DEFAULT, allow_none=True, **
         Union trait for an interpolation definition
     """
     return tl.Union(
-        [tl.Dict(), tl.Enum(INTERPOLATION_METHODS), tl.Instance(Interpolation)],
+        [tl.Dict(), tl.List(), tl.Enum(INTERPOLATION_METHODS), tl.Instance(Interpolation)],
         allow_none=allow_none,
         default_value=default_value,
         **kwargs
@@ -116,7 +116,7 @@ class Interpolation(object):
 
     def __init__(self, definition=INTERPOLATION_DEFAULT):
 
-        self.definition = definition
+        self.definition = deepcopy(definition)
         self.config = OrderedDict()
 
         # if definition is None, set to default
@@ -126,37 +126,34 @@ class Interpolation(object):
             self.definition = INTERPOLATION_DEFAULT
 
         # set each dim to interpolator definition
-        if isinstance(definition, dict):
+        if isinstance(definition, (dict, list)):
 
-            # covert input to an ordered dict to preserve order of dimensions
-            definition = OrderedDict(definition)
+            # convert dict to list
+            if isinstance(definition, dict):
+                definition = [definition]
 
-            for key in iter(definition):
+            for interp_definition in definition:
 
-                # if dict is a default definition, skip the rest of the handling
-                if not isinstance(key, tuple):
-                    if key in ["method", "params", "interpolators"]:
-                        method = self._parse_interpolation_method(definition)
-                        self._set_interpolation_method(("default",), method)
-                        break
+                # get interpolation method dict
+                method = self._parse_interpolation_method(interp_definition)
 
-                # if key is not a tuple, convert it to one and set it to the udims key
-                if not isinstance(key, tuple):
-                    udims = (key,)
+                # specify dims
+                if "dims" in interp_definition:
+                    if isinstance(interp_definition["dims"], list):
+                        interp_definition["dims"].sort()  # make sure the dims are always in the same order
+                        udims = tuple(interp_definition["dims"])
+                    else:
+                        raise TypeError('The "dims" key of an interpolation definition must be a list')
                 else:
-                    udims = key
+                    udims = ("default",)
 
                 # make sure udims are not already specified in config
                 for config_dims in iter(self.config):
                     if set(config_dims) & set(udims):
                         raise InterpolationException(
                             'Dimensions "{}" cannot be defined '.format(udims)
-                            + "multiple times in interpolation definition {}".format(definition)
+                            + "multiple times in interpolation definition {}".format(interp_definition)
                         )
-
-                # get interpolation method
-                method = self._parse_interpolation_method(definition[key])
-
                 # add all udims to definition
                 self._set_interpolation_method(udims, method)
 
@@ -173,7 +170,7 @@ class Interpolation(object):
         else:
             raise TypeError(
                 '"{}" is not a valid interpolation definition type. '.format(definition)
-                + "Interpolation definiton must be a string or dict"
+                + "Interpolation definiton must be a string or list of dicts"
             )
 
         # make sure ('default',) is always the last entry in config dictionary
diff --git a/podpac/core/utils.py b/podpac/core/utils.py
index 6811de09..bb0929ed 100644
--- a/podpac/core/utils.py
+++ b/podpac/core/utils.py
@@ -233,6 +233,9 @@ class JSONEncoder(json.JSONEncoder):
         elif isinstance(obj, podpac.core.style.Style):
             return obj.definition
 
+        elif isinstance(obj, podpac.data.Interpolation):
+            return obj.definition
+
         # pint Units
         elif isinstance(obj, podpac.core.units.ureg.Unit):
             return str(obj)

Interpolation Specification no JSON serializable
**Description**
When I try to specify different interpolation methods for different dimensions, I get an error: 

```python
C:\Anaconda3\envs\podpac\lib\json\encoder.py in iterencode(self, o, _one_shot)
    255                 self.key_separator, self.item_separator, self.sort_keys,
    256                 self.skipkeys, _one_shot)
--> 257         return _iterencode(o, 0)
    258 
    259 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,

TypeError: keys must be str, int, float, bool or None, not tuple
```

**Steps to Reproduce**
```python
import podpac
from podpac.datalib.terraintiles import TerrainTiles
from podpac import clinspace, Coordinates
coords = Coordinates([clinspace(4800000, 4900000, 256), clinspace(-8500000, -8400000, 256)],
                     dims=['lat', 'lon'], crs='epsg:3857')

interp = {
        'method': 'nearest',
        'interpolators': [podpac.interpolators.ScipyGrid]
}            
interpolation = {
    ('lat', 'lon'): interp,
    ('time',): {'method': 'bilinear'}
}
node_near_tol = TerrainTiles(interpolation=interpolation, zoom=4) 
o = node_near_tol.eval(coords)
o.plot()
node_near_tol.sources[0].interpolators  
```
The problem is that tuple keys are not JSON-serializable. 

**Proposed Fix**
Let's change the specification to something like this instead: 

```python
interp = {
        'method': 'nearest',
        'interpolators': [podpac.interpolators.ScipyGrid, NearestNeighbor, ...],
        'dims': ['lat', 'lon'], 
}            
interpolation = [
    interp, 
    {'method': 'bilinear', 
    'dims': ['time']}
]
```
That is, interpolation can now be a `str`, `dict`, or `list` of `dicts`. 


diff --git a/podpac/core/data/test/test_interpolate.py b/podpac/core/data/test/test_interpolate.py
index df17d787..8536e94f 100644
--- a/podpac/core/data/test/test_interpolate.py
+++ b/podpac/core/data/test/test_interpolate.py
@@ -64,20 +64,16 @@ class TestInterpolation(object):
 
     def test_dict_definition(self):
 
-        # should handle a default definition without any dimensions specified as keys
+        # should handle a default definition without any dimensions
         interp = Interpolation({"method": "nearest", "params": {"spatial_tolerance": 1}})
         assert isinstance(interp.config[("default",)], dict)
         assert interp.config[("default",)]["method"] == "nearest"
         assert isinstance(interp.config[("default",)]["interpolators"][0], Interpolator)
         assert interp.config[("default",)]["params"] == {"spatial_tolerance": 1}
 
-        # should throw an error on _parse_interpolation_method(definition)
-        # if definition is not in INTERPOLATION_METHODS
-        with pytest.raises(InterpolationException):
-            Interpolation({("lat", "lon"): "test"})
-
         # handle string methods
-        interp = Interpolation({("lat", "lon"): "nearest"})
+        interp = Interpolation({"method": "nearest", "dims": ["lat", "lon"]})
+        print (interp.config)
         assert isinstance(interp.config[("lat", "lon")], dict)
         assert interp.config[("lat", "lon")]["method"] == "nearest"
         assert isinstance(interp.config[("default",)]["interpolators"][0], Interpolator)
@@ -87,34 +83,38 @@ class TestInterpolation(object):
 
         # should throw an error if method is not in dict
         with pytest.raises(InterpolationException):
-            Interpolation({("lat", "lon"): {"test": "test"}})
+            Interpolation([{"test": "test", "dims": ["lat", "lon"]}])
 
         # should throw an error if method is not a string
         with pytest.raises(InterpolationException):
-            Interpolation({("lat", "lon"): {"method": 5}})
+            Interpolation([{"method": 5, "dims": ["lat", "lon"]}])
 
         # should throw an error if method is not one of the INTERPOLATION_METHODS and no interpolators defined
         with pytest.raises(InterpolationException):
-            Interpolation({("lat", "lon"): {"method": "myinter"}})
+            Interpolation([{"method": "myinter", "dims": ["lat", "lon"]}])
 
         # should throw an error if params is not a dict
         with pytest.raises(TypeError):
-            Interpolation({("lat", "lon"): {"method": "nearest", "params": "test"}})
+            Interpolation([{"method": "nearest", "dims": ["lat", "lon"], "params": "test"}])
 
         # should throw an error if interpolators is not a list
         with pytest.raises(TypeError):
-            Interpolation({("lat", "lon"): {"method": "nearest", "interpolators": "test"}})
+            Interpolation([{"method": "nearest", "interpolators": "test", "dims": ["lat", "lon"]}])
 
         # should throw an error if interpolators are not Interpolator classes
         with pytest.raises(TypeError):
-            Interpolation({("lat", "lon"): {"method": "nearest", "interpolators": [NearestNeighbor, "test"]}})
+            Interpolation([{"method": "nearest", "interpolators": [NearestNeighbor, "test"], "dims": ["lat", "lon"]}])
 
         # should throw an error if dimension is defined twice
         with pytest.raises(InterpolationException):
-            Interpolation({("lat", "lon"): "nearest", "lat": "bilinear"})
+            Interpolation([{"method": "nearest", "dims": ["lat", "lon"]}, {"method": "bilinear", "dims": ["lat"]}])
+
+        # should throw an error if dimension is not a list
+        with pytest.raises(TypeError):
+            Interpolation([{"method": "nearest", "dims": "lat"}])
 
         # should handle standard INTEPROLATION_SHORTCUTS
-        interp = Interpolation({("lat", "lon"): {"method": "nearest"}})
+        interp = Interpolation([{"method": "nearest", "dims": ["lat", "lon"]}])
         assert isinstance(interp.config[("lat", "lon")], dict)
         assert interp.config[("lat", "lon")]["method"] == "nearest"
         assert isinstance(interp.config[("lat", "lon")]["interpolators"][0], Interpolator)
@@ -123,35 +123,47 @@ class TestInterpolation(object):
         # should not allow custom methods if interpolators can't support
         with pytest.raises(InterpolatorException):
             interp = Interpolation(
-                {("lat", "lon"): {"method": "myinter", "interpolators": [NearestNeighbor, NearestPreview]}}
+                [{"method": "myinter", "interpolators": [NearestNeighbor, NearestPreview], "dims": ["lat", "lon"]}]
             )
 
         # should allow custom methods if interpolators can support
         class MyInterp(Interpolator):
             methods_supported = ["myinter"]
 
-        interp = Interpolation({("lat", "lon"): {"method": "myinter", "interpolators": [MyInterp]}})
+        interp = Interpolation([{"method": "myinter", "interpolators": [MyInterp], "dims": ["lat", "lon"]}])
         assert interp.config[("lat", "lon")]["method"] == "myinter"
         assert isinstance(interp.config[("lat", "lon")]["interpolators"][0], MyInterp)
 
         # should allow params to be set
         interp = Interpolation(
-            {("lat", "lon"): {"method": "myinter", "interpolators": [MyInterp], "params": {"spatial_tolerance": 5}}}
+            [
+                {
+                    "method": "myinter",
+                    "interpolators": [MyInterp],
+                    "params": {"spatial_tolerance": 5},
+                    "dims": ["lat", "lon"],
+                }
+            ]
         )
+
         assert interp.config[("lat", "lon")]["params"] == {"spatial_tolerance": 5}
 
         # set default equal to empty tuple
-        interp = Interpolation({"lat": "bilinear"})
+        interp = Interpolation([{"method": "bilinear", "dims": ["lat"]}])
         assert interp.config[("default",)]["method"] == INTERPOLATION_DEFAULT
 
         # use default with override if not all dimensions are supplied
-        interp = Interpolation({"lat": "bilinear", "default": "nearest"})
+        interp = Interpolation([{"method": "bilinear", "dims": ["lat"]}, "nearest"])
         assert interp.config[("default",)]["method"] == "nearest"
 
         # make sure default is always the last key in the ordered config dict
-        interp = Interpolation({"default": "nearest", "lat": "bilinear"})
+        interp = Interpolation(["nearest", {"method": "bilinear", "dims": ["lat"]}])
         assert list(interp.config.keys())[-1] == ("default",)
 
+        # should sort the dims keys
+        interp = Interpolation(["nearest", {"method": "bilinear", "dims": ["lon", "lat"]}])
+        assert interp.config[("lat", "lon")]["method"] == "bilinear"
+
     def test_init_interpolators(self):
 
         # should set method
@@ -159,16 +171,16 @@ class TestInterpolation(object):
         assert interp.config[("default",)]["interpolators"][0].method == "nearest"
 
         # Interpolation init should init all interpolators in the list
-        interp = Interpolation({"default": {"method": "nearest", "params": {"spatial_tolerance": 1}}})
+        interp = Interpolation([{"method": "nearest", "params": {"spatial_tolerance": 1}}])
         assert interp.config[("default",)]["interpolators"][0].spatial_tolerance == 1
 
         # should throw TraitErrors defined by Interpolator
         with pytest.raises(tl.TraitError):
-            Interpolation({"default": {"method": "nearest", "params": {"spatial_tolerance": "tol"}}})
+            Interpolation([{"method": "nearest", "params": {"spatial_tolerance": "tol"}}])
 
         # should not allow undefined params
         with pytest.warns(DeprecationWarning):  # eventually, Traitlets will raise an exception here
-            interp = Interpolation({"default": {"method": "nearest", "params": {"myarg": 1}}})
+            interp = Interpolation([{"method": "nearest", "params": {"myarg": 1}}])
         with pytest.raises(AttributeError):
             assert interp.config[("default",)]["interpolators"][0].myarg == "tol"
 
@@ -212,10 +224,10 @@ class TestInterpolation(object):
         # set up a strange interpolation definition
         # we want to interpolate (lat, lon) first, then after (time, alt)
         interp = Interpolation(
-            {
-                ("lat", "lon"): {"method": "myinterp", "interpolators": [LatLon, TimeLat]},
-                ("time", "alt"): {"method": "myinterp", "interpolators": [TimeLat, Lon]},
-            }
+            [
+                {"method": "myinterp", "interpolators": [LatLon, TimeLat], "dims": ["lat", "lon"]},
+                {"method": "myinterp", "interpolators": [TimeLat, Lon], "dims": ["time", "alt"]},
+            ]
         )
 
         # default = 'nearest', which will return NearestPreview for can_select
@@ -271,10 +283,10 @@ class TestInterpolation(object):
         # set up a strange interpolation definition
         # we want to interpolate (lat, lon) first, then after (time, alt)
         interp = Interpolation(
-            {
-                ("lat", "lon"): {"method": "myinterp", "interpolators": [LatLon, TimeLat]},
-                ("time", "alt"): {"method": "myinterp", "interpolators": [TimeLat, Lon]},
-            }
+            [
+                {"method": "myinterp", "interpolators": [LatLon, TimeLat], "dims": ["lat", "lon"]},
+                {"method": "myinterp", "interpolators": [TimeLat, Lon], "dims": ["time", "alt"]},
+            ]
         )
 
         coords, cidx = interp.select_coordinates(srccoords, [], reqcoords)
@@ -301,7 +313,7 @@ class TestInterpolation(object):
             np.zeros(srcdata.shape), coords=[reqcoords[c].coordinates for c in reqcoords], dims=reqcoords.dims
         )
 
-        interp = Interpolation({("lat", "lon"): {"method": "myinterp", "interpolators": [TestInterp]}})
+        interp = Interpolation({"method": "myinterp", "interpolators": [TestInterp], "dims": ["lat", "lon"]})
         outdata = interp.interpolate(srccoords, srcdata, reqcoords, outdata)
 
         assert np.all(outdata == srcdata)
@@ -322,7 +334,7 @@ class TestInterpolation(object):
             np.zeros(srcdata.shape), coords=[reqcoords[c].coordinates for c in reqcoords], dims=reqcoords.dims
         )
 
-        interp = Interpolation({("lat", "lon"): {"method": "myinterp", "interpolators": [TestFakeInterp]}})
+        interp = Interpolation({"method": "myinterp", "interpolators": [TestFakeInterp], "dims": ["lat", "lon"]})
         outdata = interp.interpolate(srccoords, srcdata, reqcoords, outdata)
 
         assert np.all(outdata == srcdata)
@@ -387,7 +399,9 @@ class TestInterpolators(object):
             reqcoords = Coordinates([[-0.5, 1.5, 3.5], [0.5, 2.5, 4.5]], dims=["lat", "lon"])
             srccoords = Coordinates([[0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]], dims=["lat", "lon"])
 
-            interp = Interpolation({"lat": "nearest_preview", "lon": "nearest_preview"})
+            interp = Interpolation(
+                [{"method": "nearest_preview", "dims": ["lat"]}, {"method": "nearest_preview", "dims": ["lon"]}]
+            )
 
             srccoords, srccoords_index = srccoords.intersect(reqcoords, outer=True, return_indices=True)
             coords, cidx = interp.select_coordinates(srccoords, srccoords_index, reqcoords)
@@ -481,14 +495,14 @@ class TestInterpolators(object):
             node = MockArrayDataSource(
                 source=source,
                 native_coordinates=coords_src,
-                interpolation={"default": {"method": "nearest", "params": {"spatial_tolerance": 1.1}}},
+                interpolation={"method": "nearest", "params": {"spatial_tolerance": 1.1}},
             )
 
             coords_dst = Coordinates([[1, 1.2, 1.5, 5, 9]], dims=["lat"])
             output = node.eval(coords_dst)
 
-            print(output)
-            print(source)
+            print (output)
+            print (source)
             assert isinstance(output, UnitsDataArray)
             assert np.all(output.lat.values == coords_dst.coords["lat"])
             assert output.values[0] == source[0] and np.isnan(output.values[1]) and output.values[2] == source[1]
@@ -504,10 +518,8 @@ class TestInterpolators(object):
                 source=source,
                 native_coordinates=coords_src,
                 interpolation={
-                    "default": {
-                        "method": "nearest",
-                        "params": {"spatial_tolerance": 1.1, "time_tolerance": np.timedelta64(1, "D")},
-                    }
+                    "method": "nearest",
+                    "params": {"spatial_tolerance": 1.1, "time_tolerance": np.timedelta64(1, "D")},
                 },
             )
 
@@ -601,7 +613,7 @@ class TestInterpolators(object):
 
             assert isinstance(output, UnitsDataArray)
             assert np.all(output.lat.values == coords_dst.coords["lat"])
-            print(output)
+            print (output)
             assert output.data[0, 0] == 0.0
             assert output.data[0, 3] == 3.0
             assert output.data[1, 3] == 8.0

pip install -e .[devall]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
apt-get update apt-get install -y gdal-bin libgdal-dev
3.7
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
affine==2.4.0
aiofiles==22.1.0
aiosqlite==0.19.0
alabaster==0.7.13
anyio==3.7.1
appdirs==1.4.4
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
arrow==1.2.3
asciitree==0.3.3
astroid==2.15.8
attrs==24.2.0
awscli==1.31.13
Babel==2.14.0
backcall==0.2.0
beautifulsoup4==4.13.3
black==23.3.0
bleach==6.0.0
boto3==1.33.13
botocore==1.33.13
branca==0.8.1
cached-property==1.5.2
certifi @ file:///croot/certifi_1671487769961/work/certifi
cffi==1.15.1
cfgv==3.3.1
charset-normalizer==3.4.1
click==8.1.8
click-plugins==1.1.1
cligj==0.7.2
cloudpickle==2.2.1
colorama==0.4.4
comm==0.1.4
commonmark==0.9.1
coverage==6.5.0
coveralls==3.3.1
cycler==0.11.0
dask==2022.2.0
debugpy==1.7.0
decorator==5.1.1
defusedxml==0.7.1
dill==0.3.7
distlib==0.3.9
docopt==0.6.2
docutils==0.16
entrypoints==0.4
exceptiongroup==1.2.2
execnet==2.0.2
fasteners==0.19
fastjsonschema==2.21.1
filelock==3.12.2
fonttools==4.38.0
fqdn==1.5.1
fsspec==2023.1.0
h5py==3.8.0
identify==2.5.24
idna==3.10
imagesize==1.4.1
importlib-metadata==6.7.0
importlib-resources==5.12.0
iniconfig==2.0.0
intake==0.6.6
ipykernel==6.16.2
ipyleaflet==0.18.2
ipympl==0.9.3
ipython==7.34.0
ipython-genutils==0.2.0
ipywidgets==8.1.5
isoduration==20.11.0
isort==5.11.5
jedi==0.19.2
Jinja2==3.1.6
jmespath==1.0.1
json5==0.9.16
jsonpointer==3.0.0
jsonschema==4.17.3
jupyter-events==0.6.3
jupyter-server==1.24.0
jupyter-ydoc==0.2.5
jupyter_client==7.4.9
jupyter_core==4.12.0
jupyter_server_fileid==0.9.3
jupyter_server_ydoc==0.8.0
jupyterlab==3.6.8
jupyterlab-pygments==0.2.2
jupyterlab_server==2.24.0
jupyterlab_widgets==3.0.13
kiwisolver==1.4.5
lazy-import==0.2.2
lazy-object-proxy==1.9.0
livereload==2.7.1
locket==1.0.0
lxml==5.3.1
MarkupSafe==2.1.5
matplotlib==3.5.3
matplotlib-inline==0.1.6
mccabe==0.7.0
mistune==3.0.2
msgpack==1.0.5
mypy-extensions==1.0.0
nbclassic==1.2.0
nbclient==0.7.4
nbconvert==7.6.0
nbformat==5.8.0
nest-asyncio==1.6.0
nodeenv==1.9.1
nodejs==0.1.1
notebook==6.5.7
notebook_shim==0.2.4
numcodecs==0.10.2
numexpr==2.8.6
numpy==1.21.6
optional-django==0.1.0
packaging==24.0
pandas==1.3.5
pandocfilters==1.5.1
parso==0.8.4
partd==1.4.1
pathspec==0.11.2
pexpect==4.9.0
pickleshare==0.7.5
Pillow==9.5.0
Pint==0.18
pkgutil_resolve_name==1.3.10
platformdirs==4.0.0
pluggy==1.2.0
-e git+https://github.com/creare-com/podpac.git@e11b29a47299cbc781ee8943579b270aebb09f78#egg=podpac
pre-commit==2.21.0
prometheus-client==0.17.1
prompt_toolkit==3.0.48
psutil==7.0.0
ptyprocess==0.7.0
py==1.11.0
pyasn1==0.5.1
pycparser==2.21
pydap==3.4.1
Pygments==2.17.2
pylint==2.17.7
pyparsing==3.1.4
pyproj==3.2.1
pyrsistent==0.19.3
pytest==7.4.4
pytest-asyncio==0.21.2
pytest-cov==4.1.0
pytest-html==3.2.0
pytest-metadata==3.0.0
pytest-mock==3.11.1
pytest-xdist==3.5.0
python-dateutil==2.9.0.post0
python-json-logger==3.0.1
pytz==2025.2
PyYAML==6.0.1
pyzmq==26.2.1
rasterio==1.2.10
recommonmark==0.7.1
requests==2.31.0
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
rsa==4.7.2
s3fs==0.4.2
s3transfer==0.8.2
scipy==1.7.3
Send2Trash==1.8.3
six==1.17.0
sniffio==1.3.1
snowballstemmer==2.2.0
snuggs==1.4.7
soupsieve==2.4.1
Sphinx==5.3.0
sphinx-autobuild==2021.3.14
sphinx-rtd-theme==2.0.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jquery==4.1
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
terminado==0.17.1
tinycss2==1.2.1
tomli==2.0.1
tomlkit==0.12.5
toolz==0.12.1
tornado==6.2
traitlets==5.9.0
traittypes==0.2.1
typed-ast==1.5.5
typing_extensions==4.7.1
uri-template==1.3.0
urllib3==1.26.20
virtualenv==20.26.6
wcwidth==0.2.13
webcolors==1.13
webencodings==0.5.1
WebOb==1.8.9
websocket-client==1.6.1
widgetsnbextension==4.0.13
wrapt==1.16.0
xarray==0.20.2
xyzservices==2023.2.0
y-py==0.6.2
ypy-websocket==0.8.4
zarr==2.12.0
zipp==3.15.0

name: podpac
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
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - affine==2.4.0
      - aiofiles==22.1.0
      - aiosqlite==0.19.0
      - alabaster==0.7.13
      - anyio==3.7.1
      - appdirs==1.4.4
      - argon2-cffi==23.1.0
      - argon2-cffi-bindings==21.2.0
      - arrow==1.2.3
      - asciitree==0.3.3
      - astroid==2.15.8
      - attrs==24.2.0
      - awscli==1.31.13
      - babel==2.14.0
      - backcall==0.2.0
      - beautifulsoup4==4.13.3
      - black==23.3.0
      - bleach==6.0.0
      - boto3==1.33.13
      - botocore==1.33.13
      - branca==0.8.1
      - cached-property==1.5.2
      - cffi==1.15.1
      - cfgv==3.3.1
      - charset-normalizer==3.4.1
      - click==8.1.8
      - click-plugins==1.1.1
      - cligj==0.7.2
      - cloudpickle==2.2.1
      - colorama==0.4.4
      - comm==0.1.4
      - commonmark==0.9.1
      - coverage==6.5.0
      - coveralls==3.3.1
      - cycler==0.11.0
      - dask==2022.2.0
      - debugpy==1.7.0
      - decorator==5.1.1
      - defusedxml==0.7.1
      - dill==0.3.7
      - distlib==0.3.9
      - docopt==0.6.2
      - docutils==0.16
      - entrypoints==0.4
      - exceptiongroup==1.2.2
      - execnet==2.0.2
      - fasteners==0.19
      - fastjsonschema==2.21.1
      - filelock==3.12.2
      - fonttools==4.38.0
      - fqdn==1.5.1
      - fsspec==2023.1.0
      - h5py==3.8.0
      - identify==2.5.24
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==6.7.0
      - importlib-resources==5.12.0
      - iniconfig==2.0.0
      - intake==0.6.6
      - ipykernel==6.16.2
      - ipyleaflet==0.18.2
      - ipympl==0.9.3
      - ipython==7.34.0
      - ipython-genutils==0.2.0
      - ipywidgets==8.1.5
      - isoduration==20.11.0
      - isort==5.11.5
      - jedi==0.19.2
      - jinja2==3.1.6
      - jmespath==1.0.1
      - json5==0.9.16
      - jsonpointer==3.0.0
      - jsonschema==4.17.3
      - jupyter-client==7.4.9
      - jupyter-core==4.12.0
      - jupyter-events==0.6.3
      - jupyter-server==1.24.0
      - jupyter-server-fileid==0.9.3
      - jupyter-server-ydoc==0.8.0
      - jupyter-ydoc==0.2.5
      - jupyterlab==3.6.8
      - jupyterlab-pygments==0.2.2
      - jupyterlab-server==2.24.0
      - jupyterlab-widgets==3.0.13
      - kiwisolver==1.4.5
      - lazy-import==0.2.2
      - lazy-object-proxy==1.9.0
      - livereload==2.7.1
      - locket==1.0.0
      - lxml==5.3.1
      - markupsafe==2.1.5
      - matplotlib==3.5.3
      - matplotlib-inline==0.1.6
      - mccabe==0.7.0
      - mistune==3.0.2
      - msgpack==1.0.5
      - mypy-extensions==1.0.0
      - nbclassic==1.2.0
      - nbclient==0.7.4
      - nbconvert==7.6.0
      - nbformat==5.8.0
      - nest-asyncio==1.6.0
      - nodeenv==1.9.1
      - nodejs==0.1.1
      - notebook==6.5.7
      - notebook-shim==0.2.4
      - numcodecs==0.10.2
      - numexpr==2.8.6
      - numpy==1.21.6
      - optional-django==0.1.0
      - packaging==24.0
      - pandas==1.3.5
      - pandocfilters==1.5.1
      - parso==0.8.4
      - partd==1.4.1
      - pathspec==0.11.2
      - pexpect==4.9.0
      - pickleshare==0.7.5
      - pillow==9.5.0
      - pint==0.18
      - pkgutil-resolve-name==1.3.10
      - platformdirs==4.0.0
      - pluggy==1.2.0
      - podpac==1.1.0+66.ge11b29a
      - pre-commit==2.21.0
      - prometheus-client==0.17.1
      - prompt-toolkit==3.0.48
      - psutil==7.0.0
      - ptyprocess==0.7.0
      - py==1.11.0
      - pyasn1==0.5.1
      - pycparser==2.21
      - pydap==3.4.1
      - pygments==2.17.2
      - pylint==2.17.7
      - pyparsing==3.1.4
      - pyproj==3.2.1
      - pyrsistent==0.19.3
      - pytest==7.4.4
      - pytest-asyncio==0.21.2
      - pytest-cov==4.1.0
      - pytest-html==3.2.0
      - pytest-metadata==3.0.0
      - pytest-mock==3.11.1
      - pytest-xdist==3.5.0
      - python-dateutil==2.9.0.post0
      - python-json-logger==3.0.1
      - pytz==2025.2
      - pyyaml==6.0.1
      - pyzmq==26.2.1
      - rasterio==1.2.10
      - recommonmark==0.7.1
      - requests==2.31.0
      - rfc3339-validator==0.1.4
      - rfc3986-validator==0.1.1
      - rsa==4.7.2
      - s3fs==0.4.2
      - s3transfer==0.8.2
      - scipy==1.7.3
      - send2trash==1.8.3
      - six==1.17.0
      - sniffio==1.3.1
      - snowballstemmer==2.2.0
      - snuggs==1.4.7
      - soupsieve==2.4.1
      - sphinx==5.3.0
      - sphinx-autobuild==2021.3.14
      - sphinx-rtd-theme==2.0.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jquery==4.1
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - terminado==0.17.1
      - tinycss2==1.2.1
      - tomli==2.0.1
      - tomlkit==0.12.5
      - toolz==0.12.1
      - tornado==6.2
      - traitlets==5.9.0
      - traittypes==0.2.1
      - typed-ast==1.5.5
      - typing-extensions==4.7.1
      - uri-template==1.3.0
      - urllib3==1.26.20
      - virtualenv==20.26.6
      - wcwidth==0.2.13
      - webcolors==1.13
      - webencodings==0.5.1
      - webob==1.8.9
      - websocket-client==1.6.1
      - widgetsnbextension==4.0.13
      - wrapt==1.16.0
      - xarray==0.20.2
      - xyzservices==2023.2.0
      - y-py==0.6.2
      - ypy-websocket==0.8.4
      - zarr==2.12.0
      - zipp==3.15.0
prefix: /opt/conda/envs/podpac

podpac/core/data/test/test_interpolate.py::TestInterpolation::test_dict_definition podpac/core/data/test/test_interpolate.py::TestInterpolation::test_init_interpolators podpac/core/data/test/test_interpolate.py::TestInterpolation::test_select_interpolator_queue podpac/core/data/test/test_interpolate.py::TestInterpolation::test_select_coordinates podpac/core/data/test/test_interpolate.py::TestInterpolation::test_interpolate podpac/core/data/test/test_interpolate.py::TestInterpolators::TestNearest::test_nearest_preview_select
podpac/core/data/test/test_interpolate.py::TestInterpolation::test_allow_missing_modules podpac/core/data/test/test_interpolate.py::TestInterpolation::test_interpolation_methods podpac/core/data/test/test_interpolate.py::TestInterpolation::test_interpolator_init_type podpac/core/data/test/test_interpolate.py::TestInterpolation::test_str_definition podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolator::test_can_select podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolator::test_dim_in podpac/core/data/test/test_interpolate.py::TestInterpolators::TestNearest::test_interpolation podpac/core/data/test/test_interpolate.py::TestInterpolators::TestNearest::test_spatial_tolerance podpac/core/data/test/test_interpolate.py::TestInterpolators::TestNearest::test_time_tolerance podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolateRasterio::test_interpolate_rasterio podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolateRasterio::test_interpolate_rasterio_descending podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolateScipyGrid::test_interpolate_scipy_grid podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolateScipyGrid::test_interpolate_irregular_arbitrary_2dims podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolateScipyGrid::test_interpolate_irregular_arbitrary_descending podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolateScipyGrid::test_interpolate_irregular_arbitrary_swap podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolateScipyGrid::test_interpolate_irregular_lat_lon podpac/core/data/test/test_interpolate.py::TestInterpolators::TestInterpolateScipyPoint::test_interpolate_scipy_point
podpac/core/utils.py podpac/core/data/interpolation.py podpac/core/data/datasource.py
podpac/core/utils.py podpac/core/data/interpolation.py podpac/core/data/datasource.py