@@ -49,32 +49,12 @@ def __init__(self, *args: P.args, **kwargs: P.kwargs) -> None:
49
49
__dataoptions__ : DataOptions [TDataset ]
50
50
51
51
52
- # custom classproperty
53
- class classproperty :
54
- """Class property only for AsDataset.new().
55
-
56
- As a classmethod and a property can be chained together since Python 3.9,
57
- this class will be removed when the support for Python 3.7 and 3.8 ends.
58
-
59
- """
60
-
61
- def __init__ (self , func : Callable [..., Any ]) -> None :
62
- self .__func__ = func
63
-
64
- def __get__ (
65
- self ,
66
- obj : Any ,
67
- cls : Type [DatasetClass [P , TDataset ]],
68
- ) -> Callable [P , TDataset ]:
69
- return self .__func__ (cls )
70
-
71
-
72
52
# runtime functions and classes
73
53
@overload
74
54
def asdataset (
75
55
dataclass : DatasetClass [Any , TDataset ],
76
56
reference : Optional [DataType ] = None ,
77
- dataoptions : Any = DEFAULT_OPTIONS ,
57
+ dataoptions : DataOptions [ Any ] = DEFAULT_OPTIONS ,
78
58
) -> TDataset :
79
59
...
80
60
@@ -90,8 +70,8 @@ def asdataset(
90
70
91
71
def asdataset (
92
72
dataclass : Any ,
93
- reference : Any = None ,
94
- dataoptions : Any = DEFAULT_OPTIONS ,
73
+ reference : Optional [ DataType ] = None ,
74
+ dataoptions : DataOptions [ Any ] = DEFAULT_OPTIONS ,
95
75
) -> Any :
96
76
"""Create a Dataset object from a dataclass object.
97
77
@@ -135,36 +115,82 @@ def asdataset(
135
115
return dataset
136
116
137
117
118
+ # runtime classes
119
+ class classproperty :
120
+ """Class property only for AsDataset.new().
121
+
122
+ As a classmethod and a property can be chained together since Python 3.9,
123
+ this class will be removed when the support for Python 3.7 and 3.8 ends.
124
+
125
+ """
126
+
127
+ def __init__ (self , func : Callable [..., Any ]) -> None :
128
+ self .__func__ = func
129
+
130
+ @overload
131
+ def __get__ (
132
+ self ,
133
+ obj : Any ,
134
+ cls : Type [DatasetClass [P , TDataset ]],
135
+ ) -> Callable [P , TDataset ]:
136
+ ...
137
+
138
+ @overload
139
+ def __get__ (
140
+ self ,
141
+ obj : Any ,
142
+ cls : Type [DataClass [P ]],
143
+ ) -> Callable [P , xr .Dataset ]:
144
+ ...
145
+
146
+ def __get__ (self , obj : Any , cls : Any ) -> Any :
147
+ return self .__func__ (cls )
148
+
149
+
138
150
class AsDataset :
139
151
"""Mix-in class that provides shorthand methods."""
140
152
141
- __dataoptions__ = DEFAULT_OPTIONS
142
-
143
153
@classproperty
144
- def new (cls : Type [ DatasetClass [ P , TDataset ]] ) -> Callable [ P , TDataset ] :
154
+ def new (cls : Any ) -> Any :
145
155
"""Create a Dataset object from dataclass parameters."""
146
156
147
- init = copy (cls .__init__ ) # type: ignore
148
- init .__doc__ = cls .__init__ .__doc__ # type: ignore
157
+ init = copy (cls .__init__ )
158
+ init .__doc__ = cls .__init__ .__doc__
149
159
init .__annotations__ ["return" ] = TDataset
150
160
151
161
@wraps (init )
152
- def new (
153
- cls : Type [DatasetClass [P , TDataset ]],
154
- * args : P .args ,
155
- ** kwargs : P .kwargs ,
156
- ) -> TDataset :
162
+ def new (cls : Any , * args : Any , ** kwargs : Any ) -> Any :
157
163
return asdataset (cls (* args , ** kwargs ))
158
164
159
165
return MethodType (new , cls )
160
166
167
+ @overload
161
168
@classmethod
162
169
def empty (
163
170
cls : Type [DatasetClass [P , TDataset ]],
164
171
sizes : Sizes ,
165
172
order : Order = "C" ,
166
173
** kwargs : Any ,
167
174
) -> TDataset :
175
+ ...
176
+
177
+ @overload
178
+ @classmethod
179
+ def empty (
180
+ cls : Type [DataClass [P ]],
181
+ sizes : Sizes ,
182
+ order : Order = "C" ,
183
+ ** kwargs : Any ,
184
+ ) -> xr .Dataset :
185
+ ...
186
+
187
+ @classmethod
188
+ def empty (
189
+ cls : Any ,
190
+ sizes : Sizes ,
191
+ order : Order = "C" ,
192
+ ** kwargs : Any ,
193
+ ) -> Any :
168
194
"""Create a Dataset object without initializing data vars.
169
195
170
196
Args:
@@ -186,13 +212,33 @@ def empty(
186
212
187
213
return asdataset (cls (** data_vars , ** kwargs ))
188
214
215
+ @overload
189
216
@classmethod
190
217
def zeros (
191
218
cls : Type [DatasetClass [P , TDataset ]],
192
219
sizes : Sizes ,
193
220
order : Order = "C" ,
194
221
** kwargs : Any ,
195
222
) -> TDataset :
223
+ ...
224
+
225
+ @overload
226
+ @classmethod
227
+ def zeros (
228
+ cls : Type [DataClass [P ]],
229
+ sizes : Sizes ,
230
+ order : Order = "C" ,
231
+ ** kwargs : Any ,
232
+ ) -> xr .Dataset :
233
+ ...
234
+
235
+ @classmethod
236
+ def zeros (
237
+ cls : Any ,
238
+ sizes : Sizes ,
239
+ order : Order = "C" ,
240
+ ** kwargs : Any ,
241
+ ) -> Any :
196
242
"""Create a Dataset object whose data vars are filled with zeros.
197
243
198
244
Args:
@@ -214,13 +260,33 @@ def zeros(
214
260
215
261
return asdataset (cls (** data_vars , ** kwargs ))
216
262
263
+ @overload
217
264
@classmethod
218
265
def ones (
219
266
cls : Type [DatasetClass [P , TDataset ]],
220
267
sizes : Sizes ,
221
268
order : Order = "C" ,
222
269
** kwargs : Any ,
223
270
) -> TDataset :
271
+ ...
272
+
273
+ @overload
274
+ @classmethod
275
+ def ones (
276
+ cls : Type [DataClass [P ]],
277
+ sizes : Sizes ,
278
+ order : Order = "C" ,
279
+ ** kwargs : Any ,
280
+ ) -> xr .Dataset :
281
+ ...
282
+
283
+ @classmethod
284
+ def ones (
285
+ cls : Any ,
286
+ sizes : Sizes ,
287
+ order : Order = "C" ,
288
+ ** kwargs : Any ,
289
+ ) -> Any :
224
290
"""Create a Dataset object whose data vars are filled with ones.
225
291
226
292
Args:
@@ -242,6 +308,7 @@ def ones(
242
308
243
309
return asdataset (cls (** data_vars , ** kwargs ))
244
310
311
+ @overload
245
312
@classmethod
246
313
def full (
247
314
cls : Type [DatasetClass [P , TDataset ]],
@@ -250,6 +317,27 @@ def full(
250
317
order : Order = "C" ,
251
318
** kwargs : Any ,
252
319
) -> TDataset :
320
+ ...
321
+
322
+ @overload
323
+ @classmethod
324
+ def full (
325
+ cls : Type [DataClass [P ]],
326
+ sizes : Sizes ,
327
+ fill_value : Any ,
328
+ order : Order = "C" ,
329
+ ** kwargs : Any ,
330
+ ) -> xr .Dataset :
331
+ ...
332
+
333
+ @classmethod
334
+ def full (
335
+ cls : Any ,
336
+ sizes : Sizes ,
337
+ fill_value : Any ,
338
+ order : Order = "C" ,
339
+ ** kwargs : Any ,
340
+ ) -> Any :
253
341
"""Create a Dataset object whose data vars are filled with given value.
254
342
255
343
Args:
0 commit comments