ICON Community Interface 0.4.0
Loading...
Searching...
No Matches
comin.py
Go to the documentation of this file.
1# @authors 11/2023 :: ICON Community Interface <comin@icon-model.org>
2#
3# SPDX-License-Identifier: BSD-3-Clause
4#
5# Please see the file LICENSE in the root of the source tree for this code.
6# Where software is supplied by third parties, it is indicated in the
7# headers of the routines.
8
9from _comin import * # noqa: F403
10
11import _comin
12from dataclasses import dataclass
13import shlex as _shlex
14import sys as _sys
15import collections.abc as _abc
16
17
19 def __callback(fun):
20 _comin._callback_register(ep, fun)
21 return fun
22
23 return __callback
24
25
26COMIN_ZAXIS_UNDEF = -1
27COMIN_ZAXIS_NONE = 0
28COMIN_ZAXIS_2D = 1
29COMIN_ZAXIS_3D = 2
30COMIN_ZAXIS_3D_HALF = 3
31
32
34 def __init__(self, handle):
35 self._handle = handle
36 try:
37 import numpy as _np
38
39 self.np = _np
40 except ImportError:
41 print("Warning: cant import numpy", file=_sys.stderr)
42
43 def __array__(self):
44 return self.np.asarray(_comin._var_get_buffer(self._handle))
45
46 @property
48 host_buf = _comin._var_get_buffer(self._handle)
49 return {
50 "shape": host_buf.shape,
51 "typestr": self.np.dtype(host_buf.format).str,
52 "data": (_comin._var_get_device_ptr(self._handle), False),
53 "version": 3,
54 "strides": host_buf.strides,
55 }
56
57 @property
58 def dim_semantics(self):
59 return _comin._var_get_dim_semantics(self._handle)
60
61 def to_xarray(self):
62 import xarray as xr
63
64 unused_dims = tuple(
65 i
66 for i, s in enumerate(self.dim_semanticsdim_semantics)
67 if s == COMIN_DIM_SEMANTICS_UNUSED
68 )
69 data = self.np.squeeze(self.np.asarray(self), axis=unused_dims)
70 return xr.DataArray(
71 data,
72 dims=tuple(
74 for s in self.dim_semanticsdim_semantics
75 if s != COMIN_DIM_SEMANTICS_UNUSED
76 ),
77 name=self.descriptor[0],
78 attrs=dict(metadata(self.descriptor)),
79 )
80
81 @property
82 def ncontained(self):
83 return _comin._var_get_ncontained(self._handle)
84
85 @property
86 def to_3d(self):
88 if COMIN_DIM_SEMANTICS_LEVEL in ds:
89 pos = (
90 ds.index(COMIN_DIM_SEMANTICS_NPROMA),
91 ds.index(COMIN_DIM_SEMANTICS_LEVEL),
92 ds.index(COMIN_DIM_SEMANTICS_BLOCK),
93 )
94 else:
95 pos = (
96 ds.index(COMIN_DIM_SEMANTICS_NPROMA),
97 ds.index(COMIN_DIM_SEMANTICS_BLOCK),
98 )
99 missing_dims = {*range(5)}.difference({*pos})
100 return self.np.asarray(self).transpose(*pos, *missing_dims)[..., 0, 0]
101
102 @property
103 def descriptor(self):
104 return _comin._var_get_descriptor(self._handle)
105
106
107def var_get(context, var_descriptor, flag):
108 """get variable object, arguments: [entry point], (name string, domain id), access flag)"""
109 return _variable(_comin._var_get(context, var_descriptor, flag))
110
111
113 def __init__(self, ep_int):
114 self.ep = ep_int
115
116 def __call__(self, fun):
117 _comin._callback_register(self.ep, fun)
118 return fun
119
120 def __index__(self):
121 return self.ep
122
123
124for ep in range(1, _comin._EP_DESTRUCTOR() + 1):
125 name = _comin.callback_get_ep_name(ep)
126 vars()[name] = _EntryPoint(ep)
127
128
129@dataclass
131 id: int
132 name: str
133 options: str
134 comm: str
135
136 @property
137 def args(self):
138 """
139 Extract the argument from the options string like as the
140 script was called from the command line. This is supposed to
141 be passed to `argparse.ArgumentParser.parse_args`.
142 """
143 return _shlex.split(self.options)[1:]
144
145
147 """returns object describing the current plugin"""
148 return plugin_info(**_comin._current_get_plugin_info())
149
150
152 def __init__(self, properties, jg=0):
153 self.properties = properties
154 self.jg = jg
155
156 def __dir__(self):
157 return self.properties.keys()
158
159 def __getattr__(self, key):
160 val = _comin._descrdata_eval_property(self.properties[key], jg=self.jg)
161 if isinstance(val, dict):
162 return _descrdata(val, jg=self.jg)
163 else:
164 return val
165
166
168 """returns descriptive data for a given domain, arguments: jg"""
169 return _descrdata(_comin._descrdata_get_domain(), jg=jg)
170
171
173 """returns global descriptive data object"""
174 return _descrdata(_comin._descrdata_get_global())
175
176
178 """List of exposed variables (descriptors)"""
179 current = _comin._var_get_descr_list_head()
180 try:
181 while current is not None:
182 yield _comin._var_get_descr_list_var_desc(current)
183 current = _comin._var_get_descr_list_next(current)
184 finally:
185 if current is not None:
186 _comin._var_descr_list_iterator_delete(current)
187
188
189def metadata_set(var_descriptor, **kwargs):
190 """sets metadata for a requested field, arguments: name string, domain id, metadata key, metadata value"""
191 for n, v in kwargs.items():
192 _comin._metadata_set(var_descriptor, n, v)
193
194
195class metadata(_abc.Mapping):
196 def __init__(self, var_descr):
197 self.descr = var_descr
198
199 def __getitem__(self, key):
200 return _comin.metadata_get(self.descr, key)
201
202 def __iter__(self):
203 it = _comin._metadata_get_iterator_begin(self.descr)
204 end = _comin._metadata_get_iterator_end(self.descr)
205 while not _comin._metadata_iterator_compare(it, end):
206 yield _comin._metadata_iterator_get_key(it)
207 _comin._metadata_iterator_next(it)
208 _comin._metadata_iterator_delete(it)
209 _comin._metadata_iterator_delete(end)
210
211 def __len__(self):
212 # impl. could be improved
213 return len(self.__iter____iter__)
214
215
216@dataclass
218 exp_start: str
219 exp_stop: str
220 run_start: str
221 run_stop: str
222
223
225 """returns simulation intervals: exp_start, exp_stop, run_start, run_stop"""
226 return simulation_interval(**_comin._descrdata_get_simulation_interval())
227
228
229COMIN_FLAG_NONE = 0
230COMIN_FLAG_READ = 1 << 1
231COMIN_FLAG_WRITE = 1 << 2
232COMIN_FLAG_SYNC_HALO = 1 << 3
233COMIN_FLAG_DEVICE = 1 << 4
234
235COMIN_HGRID_UNSTRUCTURED_CELL = 1
236COMIN_HGRID_UNSTRUCTURED_EDGE = 2
237COMIN_HGRID_UNSTRUCTURED_VERTEX = 3
238
239COMIN_VAR_DATATYPE_DOUBLE = 1
240COMIN_VAR_DATATYPE_FLOAT = 2
241COMIN_VAR_DATATYPE_INT = 3
242
243COMIN_DIM_SEMANTICS_UNDEF = 1
244COMIN_DIM_SEMANTICS_NPROMA = 2
245COMIN_DIM_SEMANTICS_BLOCK = 3
246COMIN_DIM_SEMANTICS_UNBLOCK = 4
247COMIN_DIM_SEMANTICS_LEVEL = 5
248COMIN_DIM_SEMANTICS_CONTAINER = 6
249COMIN_DIM_SEMANTICS_OTHER = 7
250COMIN_DIM_SEMANTICS_UNUSED = 8
251
252
254 return {
255 COMIN_DIM_SEMANTICS_UNDEF: "undef",
256 COMIN_DIM_SEMANTICS_NPROMA: "nproma",
257 COMIN_DIM_SEMANTICS_BLOCK: "block",
258 COMIN_DIM_SEMANTICS_UNBLOCK: "unblock",
259 COMIN_DIM_SEMANTICS_LEVEL: "level",
260 COMIN_DIM_SEMANTICS_CONTAINER: "container",
261 COMIN_DIM_SEMANTICS_OTHER: "other",
262 COMIN_DIM_SEMANTICS_UNUSED: "unused",
263 }[ds]
__init__(self, ep_int)
Definition comin.py:113
__call__(self, fun)
Definition comin.py:116
__index__(self)
Definition comin.py:120
__dir__(self)
Definition comin.py:156
__getattr__(self, key)
Definition comin.py:159
__init__(self, properties, jg=0)
Definition comin.py:152
ncontained(self)
Definition comin.py:82
to_3d(self)
Definition comin.py:86
__cuda_array_interface__(self)
Definition comin.py:47
dim_semantics(self)
Definition comin.py:58
__init__(self, handle)
Definition comin.py:34
descriptor(self)
Definition comin.py:103
to_xarray(self)
Definition comin.py:61
__array__(self)
Definition comin.py:43
__init__(self, var_descr)
Definition comin.py:196
__getitem__(self, key)
Definition comin.py:199
__iter__(self)
Definition comin.py:202
__len__(self)
Definition comin.py:211
args(self)
Extract the argument from the options string like as the script was called from the command line.
Definition comin.py:137
_comin_dim_semantics_get_name(ds)
Definition comin.py:253
descrdata_get_simulation_interval()
returns simulation intervals: exp_start, exp_stop, run_start, run_stop
Definition comin.py:224
var_get(context, var_descriptor, flag)
get variable object, arguments: [entry point], (name string, domain id), access flag)
Definition comin.py:107
register_callback(ep)
Definition comin.py:18
metadata_set(var_descriptor, **kwargs)
sets metadata for a requested field, arguments: name string, domain id, metadata key,...
Definition comin.py:189
current_get_plugin_info()
returns object describing the current plugin
Definition comin.py:146
var_descr_list()
List of exposed variables (descriptors)
Definition comin.py:177
descrdata_get_domain(jg)
returns descriptive data for a given domain, arguments: jg
Definition comin.py:167
descrdata_get_global()
returns global descriptive data object
Definition comin.py:172