+
    h	                     `    R t ^ RIHtHt ^ RIHt R.t ! R R]4      tR]n        R ]n	        R# )zHermitian conjugation.)Exprsympify)adjointDaggerc                   >   a  ] tR t^t o Rt]R 4       tRR ltRtV t	R# )r   a  General Hermitian conjugate operation.

Explanation
===========

Take the Hermetian conjugate of an argument [1]_. For matrices this
operation is equivalent to transpose and complex conjugate [2]_.

Parameters
==========

arg : Expr
    The SymPy expression that we want to take the dagger of.
evaluate : bool
    Whether the resulting expression should be directly evaluated.

Examples
========

Daggering various quantum objects:

    >>> from sympy.physics.quantum.dagger import Dagger
    >>> from sympy.physics.quantum.state import Ket, Bra
    >>> from sympy.physics.quantum.operator import Operator
    >>> Dagger(Ket('psi'))
    <psi|
    >>> Dagger(Bra('phi'))
    |phi>
    >>> Dagger(Operator('A'))
    Dagger(A)

Inner and outer products::

    >>> from sympy.physics.quantum import InnerProduct, OuterProduct
    >>> Dagger(InnerProduct(Bra('a'), Ket('b')))
    <b|a>
    >>> Dagger(OuterProduct(Ket('a'), Bra('b')))
    |b><a|

Powers, sums and products::

    >>> A = Operator('A')
    >>> B = Operator('B')
    >>> Dagger(A*B)
    Dagger(B)*Dagger(A)
    >>> Dagger(A+B)
    Dagger(A) + Dagger(B)
    >>> Dagger(A**2)
    Dagger(A)**2

Dagger also seamlessly handles complex numbers and matrices::

    >>> from sympy import Matrix, I
    >>> m = Matrix([[1,I],[2,I]])
    >>> m
    Matrix([
    [1, I],
    [2, I]])
    >>> Dagger(m)
    Matrix([
    [ 1,  2],
    [-I, -I]])

References
==========

.. [1] https://en.wikipedia.org/wiki/Hermitian_adjoint
.. [2] https://en.wikipedia.org/wiki/Hermitian_transpose
c                <    V P                   ^ ,          P                  # )zHFind the kind of a dagger of something (just the kind of the something).)argskind)selfs   &>/usr/lib/python3/dist-packages/sympy/physics/quantum/dagger.pyr	   Dagger.kindR   s     yy|       c                *   \        VR 4      '       d   V'       d   VP                  4       # \        VR4      '       d9   \        VR4      '       d'   V'       d   VP                  4       P                  4       # \        P
                  ! V \        V4      4      # )r   	conjugate	transpose)hasattrr   r   r   r   __new__r   )clsargevaluates   &&&r   r   Dagger.__new__W   sb    3	""x;;= S+&&73+D+D==?,,..||C..r    N)T)
__name__
__module____qualname____firstlineno____doc__propertyr	   r   __static_attributes____classdictcell__)__classdict__s   @r   r   r      s*     DL ! !/ /r   c                 T    R VP                  V P                  ^ ,          4      ,          # )z
Dagger(%s))_printr   )abs   &&r   <lambda>r%   _   s    ,!&&)1D"Dr   N)
r   
sympy.corer   r   $sympy.functions.elementary.complexesr   __all__r   r   
_sympyreprr   r   r   <module>r*      s;     $ 8 
Q/W Q/f  D r   