§
    ^²ÅjR  ã                   ó¼   — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZmZmZmZ ddlmZ dgZd„ Zd„ ZdS )z}Logic for applying operators to states.

Todo:
* Sometimes the final result needs to be expanded, we should do this by hand.
é    )ÚAdd)ÚMul)ÚPow)ÚS)Úsympify)ÚAntiCommutator)Ú
Commutator)ÚDagger)ÚInnerProduct)ÚOuterProductÚOperator)ÚStateÚKetBaseÚBraBaseÚWavefunction)ÚTensorProductÚqapplyc                 ó   ‡— ddl m} ‰                     dd¦  «        }| dk    rt          j        S |                      dd¬¦  «        } t          | t          ¦  «        r| S t          | t          ¦  «        r0d}| j	        D ]}|t          |fi ‰¤Žz  }Œ|                     ¦   «         S t          | |¦  «        rˆfd„| j	        D ¦   «         } ||Ž S t          | t          ¦  «        rt          ˆfd„| j	        D ¦   «         Ž S t          | t          ¦  «        rt          | j        fi ‰¤Ž| j        z  S t          | t          ¦  «        r�|                      ¦   «         \  }}t          |Ž }	t          |Ž }
t          |
t          ¦  «        r|	t#          |
fi ‰¤Žz  }n|	t          |
fi ‰¤Žz  }|| k    r)|r't%          t#          t%          | ¦  «        fi ‰¤Ž¦  «        S |S | S )	a_  Apply operators to states in a quantum expression.

    Parameters
    ==========

    e : Expr
        The expression containing operators and states. This expression tree
        will be walked to find operators acting on states symbolically.
    options : dict
        A dict of key/value pairs that determine how the operator actions
        are carried out.

        The following options are valid:

        * ``dagger``: try to apply Dagger operators to the left
          (default: False).
        * ``ip_doit``: call ``.doit()`` in inner products when they are
          encountered (default: True).

    Returns
    =======

    e : Expr
        The original expression, but with the operators applied to states.

    Examples
    ========

        >>> from sympy.physics.quantum import qapply, Ket, Bra
        >>> b = Bra('b')
        >>> k = Ket('k')
        >>> A = k * b
        >>> A
        |k><b|
        >>> qapply(A * b.dual / (b * b.dual))
        |k>
        >>> qapply(k.dual * A / (k.dual * k), dagger=True)
        <b|
        >>> qapply(k.dual * A / (k.dual * k))
        <k|*|k><b|/<k|k>
    r   )ÚDensityÚdaggerFT)Ú
commutatorÚtensorproductc                 ó4   •— g | ]\  }}t          |fi ‰¤Ž|f‘ŒS © ©r   )Ú.0ÚstateÚprobÚoptionss      €úMC:\Projects\Historical\venv\Lib\site-packages\sympy/physics/quantum/qapply.pyú
<listcomp>zqapply.<locals>.<listcomp>e   sE   ø€ ð &ð &ð &ñ :¸%Øõ ˜EÐ-Ð- WÐ-Ð-¨tÐ4ð &ð &ð &ó    c                 ó*   •— g | ]}t          |fi ‰¤Ž‘ŒS r   r   )r   Útr   s     €r    r!   zqapply.<locals>.<listcomp>k   s)   ø€ ÐDÐDÐD¸�v aÐ3Ð3¨7Ð3Ð3ÐDÐDÐDr"   )Úsympy.physics.quantum.densityr   Úgetr   ÚZeroÚexpandÚ
isinstancer   r   Úargsr   r   r   ÚbaseÚexpr   Úargs_cncÚ
qapply_Mulr
   )Úer   r   r   ÚresultÚargÚnew_argsÚc_partÚnc_partÚc_mulÚnc_muls    `         r    r   r      s/  ø€ ðT 6Ð5Ð5Ð5Ð5Ð5à�[Š[˜ 5Ñ)Ô)€FàˆA‚v€vÝŒvˆð 	
�Š˜D°ˆÑ5Ô5€Aõ �!•WÑÔð *Øˆõ 
�A•sÑ	Ô	ð %ØˆØ”6ð 	-ð 	-ˆCØ•f˜SÐ,Ð, GÐ,Ð,Ñ,ˆFˆFØ�}Š}‰ŒÐõ 
�A�wÑ	Ô	ð ð&ð &ð &ð &Øœfð&ñ &ô &ˆàˆw˜Ð!Ð!õ 
�A•}Ñ	%Ô	%ð ÝÐDÐDÐDÐD¸Q¼VÐDÑDÔDÐEÐEõ 
�A•sÑ	Ô	ð Ý�a”fÐ(Ð( Ð(Ð(¨!¬%Ñ/Ð/õ 
�A•sÑ	Ô	ð ØŸ*š*™,œ,‰ˆ�Ý�V�ˆÝ�g�ˆÝ�f�cÑ"Ô"ð 	5Ø�: fÐ8Ð8°Ð8Ð8Ñ8ˆFˆFà�6 &Ð4Ð4¨GÐ4Ð4Ñ4ˆFØ�QŠ;ˆ;˜6ˆ;Ý�*¥V¨A¡Y¤YÐ:Ð:°'Ð:Ð:Ñ;Ô;Ð;àˆMð
 ˆr"   c                 ó2  ‡‡‡— ‰                      dd¦  «        }t          | j        ¦  «        }t          |¦  «        dk    st	          | t
          ¦  «        s| S |                     ¦   «         Š|                     ¦   «         Št	          ‰t          ¦  «        st          ‰¦  «        j	        s)t	          ‰t          ¦  «        st          ‰¦  «        j	        r| S t	          ‰t          ¦  «        r8‰j        j        r,|                     ‰j        ‰j        dz
  z  ¦  «         ‰j        Št	          ‰t          ¦  «        r!|                     ‰j        ¦  «         ‰j        Št	          ‰t$          t&          f¦  «        r„‰                     ¦   «         }t	          |t*          ¦  «        r@t-           | j        ||j        d         ‰gz   Ž  | j        ||j        d         ‰gz   Ž z   fi ‰¤ŽS t-           | j        |Ž |z  ‰z  fi ‰¤ŽS t	          ‰t0          ¦  «        rÝt3          d„ ‰j        D ¦   «         ¦  «        r¿t	          ‰t0          ¦  «        rªt3          d„ ‰j        D ¦   «         ¦  «        rŒt          ‰j        ¦  «        t          ‰j        ¦  «        k    rbt1          ˆˆˆfd„t5          t          ‰j        ¦  «        ¦  «        D ¦   «         Ž                      d¬¦  «        }t9           | j        |Ž fi ‰¤Ž|z  S 	  ‰j        ‰fi ‰¤Ž}n# t<          $ r d }Y nw xY w|€0t?          ‰d	d ¦  «        }|�	  |‰fi ‰¤Ž}n# t<          $ r d }Y nw xY w|€Pt	          ‰t@          ¦  «        r;t	          ‰tB          ¦  «        r&tE          ‰‰¦  «        }|r|                     ¦   «         }|dk    rtF          j$        S |€1t          |¦  «        dk    r| S t9           | j        |‰gz   Ž fi ‰¤Ž‰z  S t	          |tD          ¦  «        r|t9           | j        |Ž fi ‰¤Žz  S t-           | j        |Ž |z  fi ‰¤ŽS )
NÚip_doitTé   r   c              3   ór   K  — | ]2}t          |t          t          t          t          f¦  «        p|d k    V — Œ3dS ©r9   N©r)   r   r   r   r   ©r   r1   s     r    ú	<genexpr>zqapply_Mul.<locals>.<genexpr>®   sD   è è € Ð-{Ð-{Ðkn­j¸½xÍÕPSÕUXÐ>YÑ.ZÔ.ZÐ.fÐ^aÐefÒ^fÐ-{Ð-{Ð-{Ð-{Ð-{Ð-{r"   c              3   ór   K  — | ]2}t          |t          t          t          t          f¦  «        p|d k    V — Œ3dS r;   r<   r=   s     r    r>   zqapply_Mul.<locals>.<genexpr>¯   s\   è è € ð  3Að  3AÐpsµ:¸cÅHÍeÕUXÕZ]ÐC^Ñ3_Ô3_Ð3kÐcfÐjkÒckð  3Að  3Að  3Að  3Að  3Að  3Ar"   c                 ó\   •— g | ](}t          ‰j        |         ‰j        |         z  fi ‰¤Ž‘Œ)S r   )r   r*   )r   ÚnÚlhsr   Úrhss     €€€r    r!   zqapply_Mul.<locals>.<listcomp>±   s;   ø€ Ð jÐ jÐ jÐPQ¥¨¬°¬°C´H¸Q´KÑ(?Ð!KÐ!KÀ7Ð!KÐ!KÐ jÐ jÐ jr"   )r   Ú_apply_from_right_to)%r&   Úlistr*   Úlenr)   r   Úpopr   r   Úis_commutativer   r,   Ú
is_IntegerÚappendr+   r   ÚketÚbrar	   r   Údoitr   r   Úfuncr   ÚallÚranger(   r.   Ú_apply_operatorÚNotImplementedErrorÚgetattrr   r   r   r   r'   )	r/   r   r8   r*   Úcommr0   Ú_apply_rightrB   rC   s	    `     @@r    r.   r.   …   sš  øøø€ à�kŠk˜) TÑ*Ô*€Gå�”‰<Œ<€Dõ ˆ4�y„y�A‚~€~�Z¨­3Ñ/Ô/€~ØˆØ
�(Š(‰*Œ*€CØ
�(Š(‰*Œ*€Cõ �s�LÑ)Ô)ð ­g°c©l¬lÔ.Ið Ý˜C¥Ñ.Ô.ðÝ3:¸3±<´<Ô3Nðàˆõ �#•sÑÔð  ¤Ô 2ð Ø�Š�C”H˜sœw¨™{Ñ+Ñ,Ô,Ð,ØŒhˆõ �#•|Ñ$Ô$ð Ø�Š�C”GÑÔÐØŒgˆõ �#�
¥NÐ3Ñ4Ô4ð 	=Ø�xŠx‰zŒzˆÝ�d�CÑ Ô ð 	=ÝØ�”˜ ¤¨1¤¨sÐ 3Ñ3Ð5Ø�”˜ ¤¨1¤¨sÐ 3Ñ3Ð5ñ6ðð ð ðð ð õ ˜&˜!œ& $˜-¨Ñ,¨SÑ0Ð<Ð<°GÐ<Ð<Ð<õ �#•}Ñ%Ô%ð ;­#Ð-{Ð-{ÐruÔrzÐ-{Ñ-{Ô-{Ñ*{Ô*{ð ;Ý�s�MÑ*Ô*ð;Ý/2ð  3Að  3AÐwzÔwð  3Añ  3Aô  3Añ  0Aô  0Að;å�”‰MŒM�S ¤™]œ]Ò*Ð*ÝÐ jÐ jÐ jÐ jÐ jÐ jÕUZÕ[^Ð_bÔ_gÑ[hÔ[hÑUiÔUiÐ jÑ jÔ jÐk×rÒrð  BFÐrñ  Gô  GˆÝ˜&˜!œ& $˜-Ð3Ð3¨7Ð3Ð3°FÑ:Ð:ðØ$�Ô$ SÐ4Ð4¨GÐ4Ð4ˆˆøÝð ð ð Øˆˆˆðøøøð €~Ý˜sÐ$:¸DÑAÔAˆØÐ#ðØ%˜ cÐ5Ð5¨WÐ5Ð5��øÝ&ð ð ð Ø���ðøøøð €~Ý�c�7Ñ#Ô#ð 	'­
°3½Ñ(@Ô(@ð 	'Ý! # sÑ+Ô+ˆFØð 'ØŸš™œ�ð �‚{€{ÝŒvˆØ	ˆÝˆt‰9Œ9˜Š>ˆ>àˆHå˜f˜aœf t¨s¨e¡|Ð5ÐAÐA¸ÐAÐAÀ#ÑEÐEÝ	�F�LÑ	)Ô	)ð 7Ø•j  ¤¨ Ð:Ð:°'Ð:Ð:Ñ:Ð:å�f�a”f˜d�m FÑ*Ð6Ð6¨gÐ6Ð6Ð6s$   Ë*K9 Ë9LÌLÌ!	L+ Ì+L:Ì9L:N) Ú__doc__Úsympy.core.addr   Úsympy.core.mulr   Úsympy.core.powerr   Úsympy.core.singletonr   Úsympy.core.sympifyr   Ú$sympy.physics.quantum.anticommutatorr   Ú sympy.physics.quantum.commutatorr	   Úsympy.physics.quantum.daggerr
   Ú"sympy.physics.quantum.innerproductr   Úsympy.physics.quantum.operatorr   r   Úsympy.physics.quantum.stater   r   r   r   Ú#sympy.physics.quantum.tensorproductr   Ú__all__r   r.   r   r"   r    ú<module>rd      s>  ððð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ø &Ð &Ð &Ð &Ð &Ð &à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø /Ð /Ð /Ð /Ð /Ð /Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ =Ð =Ð =Ð =Ð =Ð =ð ð€ðdð dð dðNO7ð O7ð O7ð O7ð O7r"   