'Get the current axes, creating one if necessary
The following kwargs are supported for ensuring the returned axes
adheres to the given projection etc., and for axes creation if
the active axes does not exist:
%(Axes)s'

@docstring.dedent_interpd
def gca(self, **kwargs):

    (ckey, cax) = self._axstack.current_key_axes()
    if (cax is not None):
        if (not kwargs):
            return cax
        else:
            kwargs_copy = kwargs.copy()
            (projection_class, _, key) = process_projection_requirements(self, **kwargs_copy)
            ckey = ckey[1:]
            key = key[1:]
            if ((key == ckey) and isinstance(cax, projection_class)):
                return cax
            else:
                warnings.warn(u'Requested    projection    is    different    from    current    axis    projection,    creating    new    axis    with    requested    projection.', stacklevel=2)
    return self.add_subplot(1, 1, 1, **kwargs)
