'Wrap the `Angle` object at the given ``wrap_angle``.
This method forces all the angle values to be within a contiguous
360 degree range so that ``wrap_angle - 360d <= angle <
wrap_angle``. By default a new Angle object is returned, but if the
``inplace`` argument is `True` then the `Angle` object is wrapped in
place and nothing is returned.
For instance::
>>> from astropy.coordinates import Angle
>>> import astropy.units as u
>>> a = Angle([-20.0, 150.0, 350.0] * u.deg)
>>> a.wrap_at(360 * u.deg).degree  # Wrap into range 0 to 360 degrees
array([ 340.,  150.,  350.])
>>> a.wrap_at(\'180d\', inplace=True)  # Wrap into range -180 to 180 degrees
>>> a.degree
array([ -20.,  150.,  -10.])
Parameters
wrap_angle : str, `Angle`, angular `~astropy.units.Quantity`
Specifies a single value for the wrap angle.  This can be any
object that can initialize an `Angle` object, e.g. ``\'180d\'``,
``180 * u.deg``, or ``Angle(180, unit=u.deg)``.
inplace : bool
If `True` then wrap the object in place instead of returning
a new `Angle`
Returns
out : Angle or `None`
If ``inplace is False`` (default), return new `Angle` object
with angles wrapped accordingly.  Otherwise wrap in place and
return `None`.'

def wrap_at(self, wrap_angle, inplace=False):

    wrap_angle = Angle(wrap_angle)
    wrapped = (np.mod((self - wrap_angle), (360.0 * u.deg)) - ((360.0 * u.deg) - wrap_angle))
    if inplace:
        self[()] = wrapped
    else:
        return wrapped
