def transpose(self, *args, **kwargs):
<EOL>axes, kwargs = self._construct_axes_from_arguments(args, kwargs,<EOL>require_all=True)<EOL>axes_names = tuple(self._get_axis_name(axes[a])<EOL>for a in self._AXIS_ORDERS)<EOL>axes_numbers = tuple(self._get_axis_number(axes[a])<EOL>for a in self._AXIS_ORDERS)<EOL>if len(axes) != len(set(axes)):<EOL><INDENT>raise ValueError('<STR_LIT>' % self._AXIS_LEN)<EOL><DEDENT>new_axes = self._construct_axes_dict_from(self, [self._get_axis(x)<EOL>for x in axes_names])<EOL>new_values = self.values.transpose(axes_numbers)<EOL>if kwargs.pop('<STR_LIT>', None) or (len(args) and args[-<NUM_LIT:1>]):<EOL><INDENT>new_values = new_values.copy()<EOL><DEDENT>nv.validate_transpose_for_generic(self, kwargs)<EOL>return self._constructor(new_values, **new_axes).__finalize__(self)<EOL>
Permute the dimensions of the %(klass)s

Parameters
----------
args : %(args_transpose)s
copy : boolean, default False
    Make a copy of the underlying data. Mixed-dtype data will
    always result in a copy
**kwargs
    Additional keyword arguments will be passed to the function.

Returns
-------
y : same as input

Examples
--------
>>> p.transpose(2, 0, 1)
>>> p.transpose(2, 0, 1, copy=True)