[docs]classCompositeFrame(CoordinateFrame):""" Represents one or more frames. Parameters ---------- frames : list List of constituient frames. name : str Name for this frame. """def__init__(self,frames,name=None):self._frames=frames[:]naxes=sum([frame._naxesforframeinself._frames])axes_order=[]axes_type=[]axes_names=[]unit=[]ph_type=[]forframeinframes:axes_order.extend(frame.axes_order)# Stack the raw (not-native) ordered propertiesforframeinframes:axes_type+=list(frame._prop.axes_type)axes_names+=list(frame._prop.axes_names)unit+=list(frame._prop.unit)ph_type+=list(frame._prop.axis_physical_types)iflen(np.unique(axes_order))!=len(axes_order):msg=("Incorrect numbering of axes, ""axes_order should contain unique numbers, "f"got {axes_order}.")raiseValueError(msg)super().__init__(naxes,axes_type=axes_type,axes_order=axes_order,unit=unit,axes_names=axes_names,axis_physical_types=tuple(ph_type),name=name,)self._axis_physical_types=tuple(ph_type)@propertydefframes(self):""" The constituient frames that comprise this `CompositeFrame`. """returnself._framesdef__repr__(self):returnrepr(self.frames)@propertydef_wao_classes_rename_map(self):mapper=defaultdict(dict)seen_names=[]forframeinself.frames:# ensure the frame is in the mappermapper[frame]forkeyinframe.world_axis_object_classes:ifkeyinseen_names:new_key=f"{key}{seen_names.count(key)}"mapper[frame][key]=new_keyseen_names.append(key)returnmapper@propertydef_wao_renamed_components_iter(self):mapper=self._wao_classes_rename_mapforframeinself.frames:renamed_components=[]forcomponentinframe._native_world_axis_object_components:comp=list(component)rename=mapper[frame].get(comp[0])ifrename:comp[0]=renamerenamed_components.append(tuple(comp))yieldframe,renamed_components@propertydef_wao_renamed_classes_iter(self):mapper=self._wao_classes_rename_mapforframeinself.frames:forkey,valueinframe.world_axis_object_classes.items():rename=mapper[frame].get(key)yieldrenameifrenameelsekey,value@propertydefworld_axis_object_components(self):out=[None]*self.naxesforframe,componentsinself._wao_renamed_components_iter:fori,aoinenumerate(frame.axes_order):out[ao]=components[i]ifany(oisNoneforoinout):msg="axes_order leads to incomplete world_axis_object_components"raiseValueError(msg)returnout@propertydefworld_axis_object_classes(self):returndict(self._wao_renamed_classes_iter)