Exemplo n.º 1
0
 def __init__(self, code_root=None, unittest=False):
     self._unittest = unittest
     self.conventions = util.WormDict()
     self.aliases = util.WormDict()
     self.modifier = util.read_json(os.path.join(code_root, 'data',
                                                 'modifiers.jsonc'),
                                    log=_log)
Exemplo n.º 2
0
    def from_struct(cls, d):
        def _process_coord(section_name, d, temp_d):
            # build two-stage lookup table (by axis type, then standard name)
            section_d = d.pop(section_name, dict())
            for k, v in section_d.items():
                ax = v['axis']
                entry = data_model.coordinate_from_struct(v, name=k)
                d['axes'][k] = entry
                temp_d[ax][entry.standard_name] = entry
            return (d, temp_d)

        def _process_var(section_name, d, temp_d):
            # build two-stage lookup table (by standard name, then data
            # dimensionality)
            section_d = d.pop(section_name, dict())
            for k, v in section_d.items():
                entry = FieldlistEntry.from_struct(d['axes'], name=k, **v)
                d['entries'][k] = entry
                temp_d[entry.standard_name][entry.modifier] = entry
            return (d, temp_d)

        temp_d = collections.defaultdict(util.WormDict)
        d['axes'] = util.WormDict()
        d['axes_lut'] = util.WormDict()
        d, temp_d = _process_coord('coords', d, temp_d)
        d['axes_lut'].update(temp_d)

        temp_d = collections.defaultdict(util.WormDict)
        d['entries'] = util.WormDict()
        d['lut'] = util.WormDict()
        d, temp_d = _process_var('aux_coords', d, temp_d)
        d, temp_d = _process_var('variables', d, temp_d)
        d['lut'].update(temp_d)
        return cls(**d)
Exemplo n.º 3
0
 def __init__(self, code_root=None, unittest=False):
     self._unittest = unittest
     self.conventions = util.WormDict()
     self.aliases = util.WormDict()
     if unittest:
         # value not used, when we're testing will mock out call to read_json
         # below with actual translation table to use for test
         config_files = []
     else:
         glob_pattern = os.path.join(
             code_root, 'data', 'fieldlist_*.jsonc'
         )
         config_files = glob.glob(glob_pattern)
     for f in config_files:
         try:
             d = util.read_json(f)
             self.add_convention(d)
         except Exception as exc:
             _log.exception("Caught exception loading fieldlist file %s: %r", f, exc)
             continue
Exemplo n.º 4
0
 def build_axes(self, *coords, verify=True):
     """Constructs a dict mapping axes labels to
     dimension coordinates (of type :class:`AbstractDMCoordinate`.)
     """
     if verify:
         # validate that we don't have duplicate axes
         d = util.WormDict()
         verify_d = util.WormDict()
         for c in itertools.chain(*coords):
             if c.axis != 'OTHER' and c.axis in verify_d:
                 err_name = getattr(self, 'name', self.__class__.__name__)
                 raise ValueError((f"Duplicate definition of {c.axis} axis in "
                     f"{err_name}: {c}, {verify_d[c.axis]}"))
             verify_d[c.axis] = c
             if c.axis in _AXIS_NAMES:
                 d[c.axis] = c
         return d
     else:
         # assume we've already verified, so use a quicker version of same logic
         return {c.axis: c for c in itertools.chain(*coords) \
             if c.axis in _AXIS_NAMES}
    def __post_init__(self, coords=None):
        super(VarlistEntry, self).__post_init__(coords)
        # (re)initialize mutable fields here so that if we copy VE (eg with .replace)
        # the fields on the copy won't point to the same object as the fields on
        # the original.
        self.translation = None
        self.remote_data: util.WormDict()
        self.local_data = []
        if self.active == util.NOTSET:
            self.active = (
                self.requirement == VarlistEntryRequirement.REQUIRED)

        # env_vars
        if not self.env_var:
            self.env_var = self.name + _var_name_env_var_suffix
        if not self.path_variable:
            self.path_variable = self.name.upper() + _file_env_var_suffix

        # self.alternates is either [] or a list of nonempty lists of VEs
        if self.alternates:
            if not isinstance(self.alternates[0], list):
                self.alternates = [self.alternates]
            self.alternates = [vs for vs in self.alternates if vs]