code: def adjoint(self):
          r
          if self.space_is_real:
              return ZeroOperator(self.domain)
          else:
              return ComplexEmbedding(self.domain, scalar=1j)
docs: r"""Return the (left) adjoint.
  
          Notes
          -----
          Due to technicalities of operators from a complex space into a real
          space, this does not satisfy the usual adjoint equation:
  
          .. math::
              \langle Ax, y \rangle = \langle x, A^*y \rangle
  
          Instead it is an adjoint in a weaker sense as follows:
  
          .. math::
              \langle AA^*x, y \rangle = \langle A^*x, A^*y \rangle
  
          Examples
          --------
          The adjoint satisfies the adjoint equation for real spaces:
  
          >>> r3 = odl.rn(3)
          >>> op = ImagPart(r3)
          >>> x = op.domain.element([1, 2, 3])
          >>> y = op.range.element([3, 2, 1])
          >>> x.inner(op.adjoint(y)) == op(x).inner(y)
          True
  
          If the domain is complex, it only satisfies the weaker definition:
  
          >>> c3 = odl.cn(3)
          >>> op = ImagPart(c3)
          >>> x = op.range.element([1, 2, 3])
          >>> y = op.range.element([3, 2, 1])
          >>> AtAxy = op(op.adjoint(x)).inner(y)
          >>> AtxAty = op.adjoint(x).inner(op.adjoint(y))
          >>> AtAxy == AtxAty
          True