Source code for asdf_astropy.converters.transform.functional_models

from packaging.version import parse as parse_version

from asdf_astropy.converters.helpers import parse_tag_version

from .core import TransformConverterBase, parameter_to_value


[docs] class ConstantConverter(TransformConverterBase): """ ASDF support for serializing the Const1D and Const2D models. """ # The 'dimensions' property was added in 1.4.0, # previously all values were 1D. _2D_MIN_VERSION = parse_version("1.4.0") tags = ("tag:stsci.edu:asdf/transform/constant-*",) types = ( "astropy.modeling.functional_models.Const1D", "astropy.modeling.functional_models.Const2D", )
[docs] def to_yaml_tree_transform(self, model, tag, ctx): from astropy.modeling.functional_models import Const1D, Const2D if parse_tag_version(tag) < self._2D_MIN_VERSION: if not isinstance(model, Const1D): msg = f"{tag} does not support models with > 1 dimension" raise TypeError(msg) return {"value": parameter_to_value(model.amplitude)} if isinstance(model, Const1D): dimension = 1 elif isinstance(model, Const2D): dimension = 2 return {"value": parameter_to_value(model.amplitude), "dimensions": dimension}
[docs] def from_yaml_tree_transform(self, node, tag, ctx): from astropy.modeling.functional_models import Const1D, Const2D if parse_tag_version(tag) < self._2D_MIN_VERSION: return Const1D(node["value"]) if node["dimensions"] == 1: return Const1D(node["value"]) if node["dimensions"] == 2: # noqa: PLR2004 return Const2D(node["value"]) msg = f"Invalid dimensions: {node['dimensions']}" raise RuntimeError(msg)