code: def adjoint(self):
          
          if complex(self.scalar).imag == 0.0:
              return self
          else:
              return ScalingOperator(self.domain, self.scalar.conjugate())
docs: Adjoint, given as scaling with the conjugate of the scalar.
  
          Examples
          --------
          In the real case, the adjoint is the same as the operator:
  
          >>> r3 = odl.rn(3)
          >>> x = r3.element([1, 2, 3])
          >>> op = ScalingOperator(r3, 2)
          >>> op(x)
          rn(3).element([ 2.,  4.,  6.])
          >>> op.adjoint(x)  # The same
          rn(3).element([ 2.,  4.,  6.])
  
          In the complex case, the scalar is conjugated:
  
          >>> c3 = odl.cn(3)
          >>> x_complex = c3.element([1, 1j, 1-1j])
          >>> op = ScalingOperator(c3, 1+1j)
          >>> expected_op = ScalingOperator(c3, 1-1j)
          >>> op.adjoint(x_complex)
          cn(3).element([ 1.-1.j,  1.+1.j,  0.-2.j])
          >>> expected_op(x_complex)  # The same
          cn(3).element([ 1.-1.j,  1.+1.j,  0.-2.j])
  
          Returns
          -------
          adjoint : `ScalingOperator`
              ``self`` if `scalar` is real, else `scalar` is conjugated.