@classmethod<EOL><INDENT>def _setup_axes(cls, axes, info_axis=None, stat_axis=None, aliases=None,<EOL>slicers=None, axes_are_reversed=False, build_axes=True,<EOL>ns=None, docs=None):<DEDENT>
cls._AXIS_ORDERS = axes<EOL>cls._AXIS_NUMBERS = {a: i for i, a in enumerate(axes)}<EOL>cls._AXIS_LEN = len(axes)<EOL>cls._AXIS_ALIASES = aliases or dict()<EOL>cls._AXIS_IALIASES = {v: k for k, v in cls._AXIS_ALIASES.items()}<EOL>cls._AXIS_NAMES = dict(enumerate(axes))<EOL>cls._AXIS_SLICEMAP = slicers or None<EOL>cls._AXIS_REVERSED = axes_are_reversed<EOL>setattr(cls, '<STR_LIT>', cls.__name__.lower())<EOL>cls._ix = None<EOL>if info_axis is not None:<EOL><INDENT>cls._info_axis_number = info_axis<EOL>cls._info_axis_name = axes[info_axis]<EOL><DEDENT>if stat_axis is not None:<EOL><INDENT>cls._stat_axis_number = stat_axis<EOL>cls._stat_axis_name = axes[stat_axis]<EOL><DEDENT>if build_axes:<EOL><INDENT>def set_axis(a, i):<EOL><INDENT>setattr(cls, a, properties.AxisProperty(i, docs.get(a, a)))<EOL>cls._internal_names_set.add(a)<EOL><DEDENT>if axes_are_reversed:<EOL><INDENT>m = cls._AXIS_LEN - <NUM_LIT:1><EOL>for i, a in cls._AXIS_NAMES.items():<EOL><INDENT>set_axis(a, m - i)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>for i, a in cls._AXIS_NAMES.items():<EOL><INDENT>set_axis(a, i)<EOL><DEDENT><DEDENT><DEDENT>assert not isinstance(ns, dict)<EOL>
Provide axes setup for the major PandasObjects.

        Parameters
        ----------
        axes : the names of the axes in order (lowest to highest)
        info_axis_num : the axis of the selector dimension (int)
        stat_axis_num : the number of axis for the default stats (int)
        aliases : other names for a single axis (dict)
        slicers : how axes slice to others (dict)
        axes_are_reversed : boolean whether to treat passed axes as
            reversed (DataFrame)
        build_axes : setup the axis properties (default True)