flavio.io.instanceio module
Functions to load and dump class instances from and to YAML dictionaries or streams.
"""Functions to load and dump class instances from and to YAML dictionaries or streams.""" import flavio import voluptuous as vol import yaml from collections import OrderedDict class YAMLLoadable(object): """Base class for objects that can be loaded and dumped from and to a dict or YAML stream.""" # these class attributes should be overwritten by child classes _input_schema_dict = {} _output_schema_dict = {} @classmethod def input_schema(cls): return vol.Schema(cls._input_schema_dict, extra=vol.ALLOW_EXTRA) @classmethod def output_schema(cls): return vol.Schema(cls._output_schema_dict, extra=vol.REMOVE_EXTRA) @classmethod def load_dict(cls, d, **kwargs): """Instantiate an object from a YAML dictionary.""" schema = cls.input_schema() return cls(**schema(d), **kwargs) @classmethod def load(cls, f, **kwargs): """Instantiate an object from a YAML string or stream.""" d = flavio.io.yaml.load_include(f) return cls.load_dict(d, **kwargs) def get_yaml_dict(self): """Dump the object to a YAML dictionary.""" d = self.__dict__.copy() schema = self.output_schema() d = schema(d) # remove NoneTypes and empty lists d = {k: v for k, v in d.items() if v is not None and v != []} return d def dump(self, stream=None, **kwargs): """Dump the objectto a YAML string or stream.""" d = self.get_yaml_dict(**kwargs) return yaml.dump(d, stream=stream, **kwargs) def coerce_observable_tuple(obs): """Force an arbitrary observable representation into the tuple representation.""" return flavio.Observable.argument_format(obs, format='tuple') def coerce_observable_dict(obs): """Force an arbitrary observable representation into the dict representation.""" return flavio.Observable.argument_format(obs, format='dict') def coerce_par_obj(par_obj_dict): """Coerce a dictionary of parameter constraints into a `ParameterConstraints` instance taking `flavio.default_parameters` as starting point""" par_obj = flavio.default_parameters.copy() return flavio.ParameterConstraints.from_yaml_dict(par_obj_dict, instance=par_obj) def ensurelist(v): """Coerce NoneType to empty list, wrap non-list in list.""" if isinstance(v, list): return v elif v is None: return [] else: raise ValueError("Unexpected form of list: {}".format(v)) def get_par_diff(par_obj): """Return a dictionary representation of a ParameterConstraints instance that only contains constraints that are not identical to ones in `default_parameters`.""" dict_default = flavio.default_parameters.get_yaml_dict() dict_par = par_obj.get_yaml_dict() return [c for c in dict_par if c not in dict_default] def list_deduplicate(lst): """Remove duplicate elements from a list but keep the order (keep the first occuring element of duplicates). List elements must be hashable.""" return list(OrderedDict.fromkeys(lst))
Functions
def coerce_observable_dict(
obs)
Force an arbitrary observable representation into the dict representation.
def coerce_observable_dict(obs): """Force an arbitrary observable representation into the dict representation.""" return flavio.Observable.argument_format(obs, format='dict')
def coerce_observable_tuple(
obs)
Force an arbitrary observable representation into the tuple representation.
def coerce_observable_tuple(obs): """Force an arbitrary observable representation into the tuple representation.""" return flavio.Observable.argument_format(obs, format='tuple')
def coerce_par_obj(
par_obj_dict)
Coerce a dictionary of parameter constraints into a ParameterConstraints
instance taking flavio.default_parameters
as starting point
def coerce_par_obj(par_obj_dict): """Coerce a dictionary of parameter constraints into a `ParameterConstraints` instance taking `flavio.default_parameters` as starting point""" par_obj = flavio.default_parameters.copy() return flavio.ParameterConstraints.from_yaml_dict(par_obj_dict, instance=par_obj)
def ensurelist(
v)
Coerce NoneType to empty list, wrap non-list in list.
def ensurelist(v): """Coerce NoneType to empty list, wrap non-list in list.""" if isinstance(v, list): return v elif v is None: return [] else: raise ValueError("Unexpected form of list: {}".format(v))
def get_par_diff(
par_obj)
Return a dictionary representation of a ParameterConstraints instance
that only contains constraints that are not identical to ones in
default_parameters
.
def get_par_diff(par_obj): """Return a dictionary representation of a ParameterConstraints instance that only contains constraints that are not identical to ones in `default_parameters`.""" dict_default = flavio.default_parameters.get_yaml_dict() dict_par = par_obj.get_yaml_dict() return [c for c in dict_par if c not in dict_default]
def list_deduplicate(
lst)
Remove duplicate elements from a list but keep the order (keep the first occuring element of duplicates). List elements must be hashable.
def list_deduplicate(lst): """Remove duplicate elements from a list but keep the order (keep the first occuring element of duplicates). List elements must be hashable.""" return list(OrderedDict.fromkeys(lst))
Classes
class YAMLLoadable
Base class for objects that can be loaded and dumped from and to a dict or YAML stream.
class YAMLLoadable(object): """Base class for objects that can be loaded and dumped from and to a dict or YAML stream.""" # these class attributes should be overwritten by child classes _input_schema_dict = {} _output_schema_dict = {} @classmethod def input_schema(cls): return vol.Schema(cls._input_schema_dict, extra=vol.ALLOW_EXTRA) @classmethod def output_schema(cls): return vol.Schema(cls._output_schema_dict, extra=vol.REMOVE_EXTRA) @classmethod def load_dict(cls, d, **kwargs): """Instantiate an object from a YAML dictionary.""" schema = cls.input_schema() return cls(**schema(d), **kwargs) @classmethod def load(cls, f, **kwargs): """Instantiate an object from a YAML string or stream.""" d = flavio.io.yaml.load_include(f) return cls.load_dict(d, **kwargs) def get_yaml_dict(self): """Dump the object to a YAML dictionary.""" d = self.__dict__.copy() schema = self.output_schema() d = schema(d) # remove NoneTypes and empty lists d = {k: v for k, v in d.items() if v is not None and v != []} return d def dump(self, stream=None, **kwargs): """Dump the objectto a YAML string or stream.""" d = self.get_yaml_dict(**kwargs) return yaml.dump(d, stream=stream, **kwargs)
Ancestors (in MRO)
- YAMLLoadable
- builtins.object
Static methods
def dump(
self, stream=None, **kwargs)
Dump the objectto a YAML string or stream.
def dump(self, stream=None, **kwargs): """Dump the objectto a YAML string or stream.""" d = self.get_yaml_dict(**kwargs) return yaml.dump(d, stream=stream, **kwargs)
def get_yaml_dict(
self)
Dump the object to a YAML dictionary.
def get_yaml_dict(self): """Dump the object to a YAML dictionary.""" d = self.__dict__.copy() schema = self.output_schema() d = schema(d) # remove NoneTypes and empty lists d = {k: v for k, v in d.items() if v is not None and v != []} return d
Methods
def input_schema(
cls)
@classmethod def input_schema(cls): return vol.Schema(cls._input_schema_dict, extra=vol.ALLOW_EXTRA)
def load(
cls, f, **kwargs)
Instantiate an object from a YAML string or stream.
@classmethod def load(cls, f, **kwargs): """Instantiate an object from a YAML string or stream.""" d = flavio.io.yaml.load_include(f) return cls.load_dict(d, **kwargs)
def load_dict(
cls, d, **kwargs)
Instantiate an object from a YAML dictionary.
@classmethod def load_dict(cls, d, **kwargs): """Instantiate an object from a YAML dictionary.""" schema = cls.input_schema() return cls(**schema(d), **kwargs)
def output_schema(
cls)
@classmethod def output_schema(cls): return vol.Schema(cls._output_schema_dict, extra=vol.REMOVE_EXTRA)