1515
1616from . import error , phyvars , stagyyparsers , _helpers
1717from ._helpers import CachedReadOnlyProperty as crop
18+ from .datatypes import Field
1819
1920if TYPE_CHECKING :
20- from typing import Dict , Any , Mapping , List , Iterator , Tuple , Optional
21+ from typing import (Dict , Any , Mapping , List , Iterator , Tuple , Optional ,
22+ Callable )
2123 from numpy import ndarray , signedinteger
2224 from pandas import DataFrame , Series
23- from .phyvars import Varf , Varr
25+ from .datatypes import Varf
26+ from .phyvars import Varr
2427 from .stagyydata import StagyyData
2528
2629
@@ -226,34 +229,22 @@ def at_r(self, rval: float) -> signedinteger:
226229 return np .argmin (np .abs (self .r_centers - rval ))
227230
228231
229- class Field (NamedTuple ):
230- """Scalar field and associated metadata.
231-
232- Attributes:
233- values: the field itself.
234- meta: the metadata of the field.
235- """
236-
237- values : ndarray
238- meta : Varf
239-
240-
241232class _Fields (abc .Mapping ):
242233 """Fields data structure.
243234
244235 The :attr:`Step.fields` attribute is an instance of this class.
245236
246237 :class:`_Fields` inherits from :class:`collections.abc.Mapping`. Keys are
247238 fields names defined in :data:`stagpy.phyvars.[S]FIELD[_EXTRA]`. Each item
248- is a name tuple ('values', 'meta'), respectively the field itself, and a
249- :class:`stagpy.phyvars.Varf` instance with relevant metadata.
239+ is a :class:`stagpy.datatypes.Field` instance.
250240
251241 Attributes:
252242 step: the step object owning the :class:`_Fields` instance.
253243 """
254244
255245 def __init__ (self , step : Step , variables : Mapping [str , Varf ],
256- extravars : Mapping [str , Varf ], files : Mapping [str , List [str ]],
246+ extravars : Mapping [str , Callable [[Step ], Field ]],
247+ files : Mapping [str , List [str ]],
257248 filesh5 : Mapping [str , List [str ]]):
258249 self .step = step
259250 self ._vars = variables
@@ -269,10 +260,7 @@ def __getitem__(self, name: str) -> Field:
269260 if name in self ._vars :
270261 fld_names , parsed_data = self ._get_raw_data (name )
271262 elif name in self ._extra :
272- meta = self ._extra [name ]
273- field = meta .description (self .step )
274- meta = phyvars .Varf (_helpers .baredoc (meta .description ), meta .dim )
275- self ._data [name ] = Field (field , meta )
263+ self ._data [name ] = self ._extra [name ](self .step )
276264 return self ._data [name ]
277265 else :
278266 raise error .UnknownFieldVarError (name )
0 commit comments