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-285380106,https://api.github.com/repos/pydata/xarray/issues/1303,285380106,MDEyOklzc3VlQ29tbWVudDI4NTM4MDEwNg==,1197350,2017-03-09T15:18:18Z,2024-02-06T17:57:21Z,MEMBER,Just wanted to link to a somewhat related discussion happening in [brian-rose/climlab#50](https://github.com/climlab/climlab/issues/50).,"{""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-285491892,https://api.github.com/repos/pydata/xarray/issues/1303,285491892,MDEyOklzc3VlQ29tbWVudDI4NTQ5MTg5Mg==,1217238,2017-03-09T21:39:28Z,2017-03-09T21:39:28Z,MEMBER,"Indeed, this isn't public API currently. But I would not be opposed to making it public, assuming it's documented in a sufficiently clear way (which I think it is).","{""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-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
https://github.com/pydata/xarray/issues/1303#issuecomment-285351087,https://api.github.com/repos/pydata/xarray/issues/1303,285351087,MDEyOklzc3VlQ29tbWVudDI4NTM1MTA4Nw==,1197350,2017-03-09T13:29:01Z,2017-03-09T13:29:01Z,MEMBER,"Have you considered implementing a custom datastore for your model? Datastores just have to provide variables. This might be the most straightforward option.
> On Mar 9, 2017, at 6:07 AM, Benoit Bovy wrote:
>
> Is it safe to use xarray.core.variable.as_variable() externally? I guess that currently it is not.
>
> I have a specific use case where this would be very useful.
>
> I'm working on a package that heavily uses and extends xarray for landscape evolution modeling, and inside a custom class for model parameters I want to be able to create xarray.Variable objects on the fly from any provided object, e.g., a scalar value, an array-like, a (dims, data[, attrs]) tuple, another xarray.Variable, a xarray.DataArray... exactly what xarray.core.variable.as_variable() does.
>
> Although I know that Variable objects are not needed in most use cases, in this specific case a clean solution would be the following
>
> import xarray as xr
>
> class Parameter(object):
>
> def to_variable(self, obj):
> return xr.as_variable(obj)
> # ... some validation logic on, e.g., data type, value bounds, dimensions...
> # ... add default attributes to the
> I don't think it is a viable option to copy as_variable() and all its dependent code in my package as it seems to have quite a lot of logic implemented.
>
> A workaround using only public API would be something like:
>
> class Parameter(object):
>
> def to_variable(self, obj):
> return xr.Dataset(data_vars={'v': obj}).variables['v']
> but it feels a bit hacky.
>
> —
> You are receiving this because you are subscribed to this thread.
> Reply to this email directly, view it on GitHub, or mute the thread.
>
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,213004586