#### Description:

A CmpFrame is a compound Frame which allows two component Frames (of any class) to be merged together to form a more complex Frame. The axes of the two component Frames then appear together in the resulting CmpFrame (those of the first Frame, followed by those of the second Frame).

Since a CmpFrame is itself a Frame, it can be used as a component in forming further CmpFrames. Frames of arbitrary complexity may be built from simple individual Frames in this way.

Also since a Frame is a Mapping, a CmpFrame can also be used as a Mapping. Normally, a CmpFrame is simply equivalent to a UnitMap, but if either of the component Frames within a CmpFrame is a Region (a sub-class of Frame), then the CmpFrame will use the Region as a Mapping when transforming values for axes described by the Region. Thus input axis values corresponding to positions which are outside the Region will result in bad output axis values.

#### Constructor Function

astCmpFrame

#### Inheritance

The CmpFrame class inherits from the Frame class.

#### Attributes

The CmpFrame class does not define any new attributes beyond those which are applicable to all Frames. However, the attributes of the component Frames can be accessed as if they were attributes of the CmpFrame. For instance, if a CmpFrame contains a SpecFrame and a SkyFrame, then the CmpFrame will recognise the `"` Equinox `"` attribute and forward access requests to the component SkyFrame. Likewise, it will recognise the `"` RestFreq `"` attribute and forward access requests to the component SpecFrame. An axis index can optionally be appended to the end of any attribute name, in which case the request to access the attribute will be forwarded to the primary Frame defining the specified axis.

#### Functions

The CmpFrame class does not define any new functions beyond those which are applicable to all Frames.
Copyright (C) 2021 East Asian Observatory