def adjoint(self):
        """Adjoint of this operator.

        The adjoint of the operator composition is the composition of
        the operator adjoints in reverse order:

            ``OperatorComp(left, right).adjoint ==
            OperatorComp(right.adjoint, left.adjoint)``

        Returns
        -------
        adjoint : `OperatorComp`

        Raises
        ------
        OpNotImplementedError
            If any of the underlying operators are non-linear.
        """
        if not self.is_linear:
            raise OpNotImplementedError('nonlinear operators have no adjoint')

        return OperatorComp(self.right.adjoint, self.left.adjoint,
                            self.__tmp)
Adjoint of this operator.

        The adjoint of the operator composition is the composition of
        the operator adjoints in reverse order:

            ``OperatorComp(left, right).adjoint ==
            OperatorComp(right.adjoint, left.adjoint)``

        Returns
        -------
        adjoint : `OperatorComp`

        Raises
        ------
        OpNotImplementedError
            If any of the underlying operators are non-linear.