'A `Mapping` representing the inverse of the current mapping.
Raises
`NotImplementedError`
An inverse does no exist on mappings that drop some of its inputs
(there is then no way to reconstruct the inputs that were dropped).'

@property
def inverse(self):

    try:
        mapping = tuple((self.mapping.index(idx) for idx in range(self.n_inputs)))
    except ValueError:
        raise NotImplementedError('Mappings    such    as    {0}    that    drop    one    or    more    of    their    inputs    are    not    invertible    at    this    time.'.format(self.mapping))
    inv = self.__class__(mapping)
    inv._inputs = self._outputs
    inv._outputs = self._inputs
    return inv
