Source code for asdf_astropy.converters.transform.properties

from asdf.extension import Converter
from astropy.utils import minversion


[docs] class ModelBoundingBoxConverter(Converter): tags = ("tag:stsci.edu:asdf/transform/property/bounding_box-*",) types = ("astropy.modeling.bounding_box.ModelBoundingBox",)
[docs] def to_yaml_tree(self, bbox, tag, ctx): return { "intervals": {_input: list(interval) for _input, interval in bbox.named_intervals.items()}, "ignore": list(bbox.ignored_inputs), "order": bbox.order, }
[docs] def from_yaml_tree(self, node, tag, ctx): from astropy.modeling.bounding_box import ModelBoundingBox, get_index, get_name intervals = {_input: tuple(interval) for _input, interval in node["intervals"].items()} ignored = node["ignore"] if "ignore" in node else [] order = node["order"] if "order" in node else "C" def create_bounding_box(model, cbbox=None): if cbbox is None: ignore = ignored else: # Hack to pass compound_bounding_box selector_args ignore in 5.0.4+ ignore = list( set(ignored + [get_name(model, get_index(model, key)) for key in cbbox.selector_args.ignore]), ) # Add in globally ignored inputs from the compound_bounding_box in 5.1+ if minversion("astropy", "5.1"): ignore = list(set(ignore + [get_name(model, get_index(model, key)) for key in cbbox.ignored])) return ModelBoundingBox(intervals, model, ignored=ignore, order=order) return create_bounding_box
[docs] class CompoundBoundingBoxConverter(Converter): tags = ("tag:stsci.edu:asdf/transform/property/compound_bounding_box-*",) types = ("astropy.modeling.bounding_box.CompoundBoundingBox",)
[docs] def to_yaml_tree(self, cbbox, tag, ctx): node = { "selector_args": [{"argument": sa.name(cbbox._model), "ignore": sa.ignore} for sa in cbbox.selector_args], "cbbox": [{"key": list(key), "bbox": bbox} for key, bbox in cbbox.bounding_boxes.items()], "order": cbbox.order, } if minversion("astropy", "5.1"): node["ignore"] = cbbox.ignored_inputs return node
[docs] def from_yaml_tree(self, node, tag, ctx): from astropy.modeling.bounding_box import CompoundBoundingBox selector_args = tuple((selector["argument"], selector["ignore"]) for selector in node["selector_args"]) bboxes = {tuple(bbox["key"]): bbox["bbox"] for bbox in node["cbbox"]} ignored = node["ignore"] if "ignore" in node else [] order = node["order"] if "order" in node else "C" def create_bounding_box(model): if not minversion("astropy", "5.1"): if len(ignored) > 0: msg = ( "Deserializing ignored elements of a compound bounding box is only supported for astropy 5.1+." ) raise RuntimeError(msg) cbbox = CompoundBoundingBox({}, model, selector_args, order=order) else: cbbox = CompoundBoundingBox({}, model, selector_args, ignored=ignored, order=order) for key, bb in bboxes.items(): cbbox[key] = bb(model, cbbox) return cbbox return create_bounding_box