html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/issues/1303#issuecomment-285425155,https://api.github.com/repos/pydata/xarray/issues/1303,285425155,MDEyOklzc3VlQ29tbWVudDI4NTQyNTE1NQ==,4160723,2017-03-09T17:44:09Z,2017-03-09T17:44:09Z,MEMBER,"Thanks for the link @rabernat!
[climlab](https://github.com/brian-rose/climlab) looks very nice and actually very close to what I'm trying to do with landscape evolution modeling (just prototyping at the moment, no repository on GH yet).
What I want to do is something that is a bit more deeply integrated with xarray than what you suggest for climlab. The basic idea is that a parameter of a model (i.e., a `climlab.Process`) can be either a scalar, an array-like with space and/or time dimensions and/or even its own dimension (useful for exploring a parameter space), or a function (callable) of other model parameters/inputs/state variables (it this case it is also an output which inherits the dimensions from the other variables used for its computation). I think that a lot of logic implemented in xarray can be reused for handling this.
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,213004586
https://github.com/pydata/xarray/issues/1303#issuecomment-285363937,https://api.github.com/repos/pydata/xarray/issues/1303,285363937,MDEyOklzc3VlQ29tbWVudDI4NTM2MzkzNw==,4160723,2017-03-09T14:22:33Z,2017-03-09T14:29:28Z,MEMBER,"mmh not sure if a custom datastore would be most appropriate for my problem, which actually is not about loading (writing) data of a given format into (from) a Dataset.
Ultimately, what I'm trying to do is implementing an API for creating numerical model components, which is heavily inspired from Django ORM (i.e., how models and fields are defined), and use the xarray data structures as an interface.
Let me show a more detailed (though still very incomplete) example of how it would look like:
```python
class Parameter(object):
def __init__(self, default=None, allowed_values=None, exclude_dims=None,
include_dims=None, bounds=(None, None), attrs=None):
# ...
def to_variable(self, obj):
return xr.as_variable(obj)
# ... some validation logic
class Model(object):
def __init__(**params):
# ...
def to_dataset(self):
# ...
def run(self, ds):
# ... run simulation for this model
class StreamPower(Model):
k = Parameter(default=7e-5, bounds=(0., None), attrs={'units': 'm**2/y'})
m = Parameter(default=0.4)
n = Parameter(default=1)
class Meta:
short_name = 'spow'
```
```python
>>> model = StreamPower(k=('time', [7e-5, 8e-5, 10e-5]), m=0.5)
>>> ds = model.to_dataset()
>>> ds
Dimensions: (time: 3)
Dimensions without coordinates: time
Data variables:
spow__k (time) float64 7e-05 8e-05 0.0001
spow__m float64 0.5
spow__n int64 1
>>> ds.spow__k
array([ 7.000000e-05, 8.000000e-05, 1.000000e-04])
Dimensions without coordinates: time
Attributes:
units: m**2/y
```
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,213004586