Source code for asdf_astropy.converters.unit.equivalency

from asdf.extension import Converter


[docs] class EquivalencyConverter(Converter): tags = ("tag:astropy.org:astropy/units/equivalency-*",) types = ("astropy.units.equivalencies.Equivalency",)
[docs] def to_yaml_tree(self, obj, tag, ctx): return [ {"name": name, "kwargs_names": list(kw.keys()), "kwargs_values": list(kw.values())} for name, kw in zip(obj.name, obj.kwargs) ]
[docs] def from_yaml_tree(self, node, tag, ctx): from astropy.cosmology.units import with_H0 from astropy.units import equivalencies components = [] for equivalency_node in node: name = equivalency_node["name"] equivalency_method = with_H0 if name == "with_H0" else getattr(equivalencies, name) kwargs = dict(zip(equivalency_node["kwargs_names"], equivalency_node["kwargs_values"])) components.append(equivalency_method(**kwargs)) # The Equivalency class is a UserList that overrides __add__ to # provide special behavior when combined with another Equivalency. # We're using sum here to add each subsequent Equivalency to the # first so we end up with a single correctly combined Equivalency # object at the end. return sum(components[1:], components[0])