§
    OŠtj%  ã                   óä   — 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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„ 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.
é    )ÚSum)ÚAdd)Ú
NumberKind)ÚMul)ÚPow)ÚS)ÚsympifyÚ_sympify)ÚAntiCommutator)Ú
Commutator)ÚDagger)ÚInnerProduct)ÚOuterProductÚOperator)ÚStateÚKetBaseÚBraBaseÚWavefunction)ÚTensorProductÚqapplyc                 ó:   — |                       t          d„ ¦  «        S )zETransform the inner products in an expression by calling ``.doit()``.c                  ó8   — t          | Ž                      ¦   «         S ©N)r   Údoit©Úargss    úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/physics/quantum/qapply.pyú<lambda>zip_doit_func.<locals>.<lambda>#   s   € µ¸tÐ1D×1IÒ1IÑ1KÔ1K€ ó    )Úreplacer   ©Úes    r   Úip_doit_funcr#   !   s   € à�9Š9•\Ð#KÐ#KÑLÔLÐLr   c                 ó:   — |                       t          d„ ¦  «        S )z;Transform the sums in an expression by calling ``.doit()``.c                  ó8   — t          | Ž                      ¦   «         S r   )r   r   r   s    r   r   zsum_doit_func.<locals>.<lambda>(   s   € ­¨T¨
¯ªÑ(9Ô(9€ r   )r    r   r!   s    r   Úsum_doit_funcr&   &   s   € à�9Š9•SÐ9Ð9Ñ:Ô:Ð:r   c                 ó&  ‡— ddl m} ‰                     dd¦  «        }‰                     dd¦  «        }‰                     dd¦  «        }t          | ¦  «        } | j        t
          k    r|rt          | ¦  «        n| 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          ¦  «        r7t          t          | j        fi ‰¤Žg| j        ¢R Ž }|rt#          |¦  «        n|}|S t          | t$          ¦  «        rt          | j        fi ‰¤Ž| j        z  S t          | t*          ¦  «        r»|                      ¦   «         \  }	}
t+          |	Ž }t+          |
Ž }|
s|}n6t          |t*          ¦  «        r|t/          |fi ‰¤Žz  }n|t          |fi ‰¤Žz  }|| k    r)|r't1          t/          t1          | ¦  «        fi ‰¤Ž¦  «        }|rt          |¦  «        n|}|rt#          |¦  «        n|}|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).
        * ``sum_doit``: call ``.doit()`` on sums when they are encountered
          (default: False). This is helpful for collapsing sums over Kronecker
          delta's that are created when calling ``qapply``.

    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))
        <b|
    r   )ÚDensityÚdaggerFÚsum_doitÚip_doitT)Ú
commutatorÚtensorproductc                 ó4   •— g | ]\  }}t          |fi ‰¤Ž|f‘ŒS © ©r   )Ú.0ÚstateÚprobÚoptionss      €r   ú
<listcomp>zqapply.<locals>.<listcomp>y   sE   ø€ ð &ð &ð &ñ :¸%Øõ ˜EÐ-Ð- WÐ-Ð-¨tÐ4ð &ð &ð &r   c                 ó*   •— g | ]}t          |fi ‰¤Ž‘ŒS r/   r0   )r1   Útr4   s     €r   r5   zqapply.<locals>.<listcomp>   s)   ø€ ÐDÐDÐD¸�v aÐ3Ð3¨7Ð3Ð3ÐDÐDÐDr   )Úsympy.physics.quantum.densityr(   Úgetr
   Úkindr   r#   ÚexpandÚ
isinstancer   r   r   r   r   r   ÚfunctionÚlimitsr&   r   ÚbaseÚexpr   Úargs_cncÚ
qapply_Mulr   )r"   r4   r(   r)   r*   r+   ÚresultÚargÚnew_argsÚc_partÚnc_partÚc_mulÚnc_muls    `           r   r   r   +   s	  ø€ ðV 6Ð5Ð5Ð5Ð5Ð5à�[Š[˜ 5Ñ)Ô)€FØ�{Š{˜: uÑ-Ô-€HØ�kŠk˜) TÑ*Ô*€Gå�‰Œ€Að 	„v•ÒÐØ")Ð0�|˜A‰Œˆ¨qÐ0ð 	
�Š˜D°ˆÑ5Ô5€Aõ �!•WÑÔð 3Øˆõ 
�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Ñ	Ô	ð Ý•V˜AœJÐ2Ð2¨'Ð2Ð2Ð>°Q´XÐ>Ð>Ð>ˆØ*2Ð>•˜vÑ&Ô&Ð&¸ˆØˆõ 
�A•sÑ	Ô	ð Ý�a”fÐ(Ð( Ð(Ð(¨!¬%Ñ/Ð/õ 
�A•sÑ	Ô	ð ØŸ*š*™,œ,‰ˆ�Ý�V�ˆÝ�g�ˆØð 	5ØˆFˆFÝ˜¥Ñ$Ô$ð 	5Ø�: fÐ8Ð8°Ð8Ð8Ñ8ˆFˆFà�6 &Ð4Ð4¨GÐ4Ð4Ñ4ˆFØ�QŠ;ˆ;˜6ˆ;Ý�J¥v¨a¡y¤yÐ<Ð<°GÐ<Ð<Ñ=Ô=ˆFØ)0Ð<•˜fÑ%Ô%Ð%°fˆØ*2Ð>•˜vÑ&Ô&Ð&¸ˆØˆð
 ˆr   c                 óX  ‡‡	‡
— t          | j        ¦  «        }t          j        }d }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           ¦  «        r‰
j        }‰
j        Š
t          ‰	t&          t(          f¦  «        rŠ‰	                     ¦   «         }t          |t,          ¦  «        rCt/           | j        ||j        d         ‰
gz   Ž  | j        ||j        d         ‰
gz   Ž z   fi ‰¤Ž|z  S t/           | j        |Ž |z  ‰
z  fi ‰¤Ž|z  S t          ‰	t2          ¦  «        ràt5          d„ ‰	j        D ¦   «         ¦  «        rÂt          ‰
t2          ¦  «        r­t5          d„ ‰
j        D ¦   «         ¦  «        r�t	          ‰	j        ¦  «        t	          ‰
j        ¦  «        k    ret3          ˆ	ˆˆ
fd„t7          t	          ‰	j        ¦  «        ¦  «        D ¦   «         Ž                      d¬¦  «        }t;           | j        |Ž fi ‰¤Ž|z  |z  S t          ‰
t<          ¦  «        ræt          ‰	t<          ¦  «        r”t?          ‰	j         ¦  «         !                    t?          ‰
j         ¦  «        ¦  «        rtE          d¦  «        ‚‰	j#        ‰
j#        z   }t=          t/          ‰	j$        ‰
j$        z  fi ‰¤Žg|¢R Ž }t;           | j        |Ž |z  fi ‰¤ŽS t=          t/          ‰	‰
j$        z  fi ‰¤Žg‰
j#        ¢R Ž }t;           | j        |Ž |z  fi ‰¤ŽS t          ‰	t<          ¦  «        r=t=          t/          ‰	j$        ‰
z  fi ‰¤Žg‰	j#        ¢R Ž }t;           | j        |Ž |z  fi ‰¤ŽS tK          ‰	d	d ¦  «        }|�	  |‰
fi ‰¤Ž}n# tL          $ r d }Y nw xY wd }|€0tK          ‰
d
d ¦  «        }|�	  |‰	fi ‰¤Ž}n# tL          $ r d }Y nw xY w|€:t          ‰	tN          ¦  «        r%t          ‰
tP          ¦  «        rtS          ‰	‰
¦  «        }t          |tT          tV          tX          f¦  «        rt[          |¦  «        S |€4t	          |¦  «        dk    r| S t;           | j        |‰	gz   Ž fi ‰¤Ž‰
z  |z  S t          |tR          ¦  «        r|t;           | j        |Ž fi ‰¤Žz  |z  S t/           | j        |Ž |z  fi ‰¤Ž|z  S )Né   r   c              3   ór   K  — | ]2}t          |t          t          t          t          f¦  «        p|d k    V — Œ3dS ©rK   N©r<   r   r   r   r   ©r1   rD   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 rM   rN   rO   s     r   rP   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   )r1   ÚnÚlhsr4   Úrhss     €€€r   r5   zqapply_Mul.<locals>.<listcomp>Ò   s;   ø€ Ð jÐ jÐ jÐPQ¥¨¬°¬°C´H¸Q´KÑ(?Ð!KÐ!KÀ7Ð!KÐ!KÐ jÐ jÐ jr   T)r-   z4Duplicated dummy indices in separate sums in qapply.Ú_apply_operatorÚ_apply_from_right_to).Úlistr   r   ÚOneÚlenr<   r   Úpopr   r	   Úis_commutativer   r@   Ú
is_IntegerÚappendr?   r   ÚketÚbrar   r   r   r   r   Úfuncr   ÚallÚranger;   rB   r   ÚsetÚ	variablesÚintersectionÚ
ValueErrorr>   r=   ÚgetattrÚNotImplementedErrorr   r   r   ÚintÚcomplexÚfloatr
   )r"   r4   r   ÚextrarC   Úcommr>   Ú_applyÚ_apply_rightrT   rU   s    `       @@r   rB   rB   ¢   sm  øøø€ å�”‰<Œ<€DÝŒE€EØ€Fõ ˆ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ˆå�#•|Ñ$Ô$ð Ø”ˆØŒgˆõ �#�
¥NÐ3Ñ4Ô4ð 	CØ�xŠx‰zŒzˆÝ�d�CÑ Ô ð 	CÝØ�”˜ ¤¨1¤¨sÐ 3Ñ3Ð5Ø�”˜ ¤¨1¤¨sÐ 3Ñ3Ð5ñ6ðð ð ðð ð ñ	ð õ ˜&˜!œ& $˜-¨Ñ,¨SÑ0Ð<Ð<°GÐ<Ð<¸UÑBÐBõ �#•}Ñ%Ô%ð A­#Ð-{Ð-{ÐruÔrzÐ-{Ñ-{Ô-{Ñ*{Ô*{ð AÝ�s�MÑ*Ô*ðAÝ/2ð  3Að  3AÐwzÔwð  3Añ  3Aô  3Añ  0Aô  0AðAå�”‰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Ñ:¸5Ñ@Ð@õ �#•sÑÔð 	?Ý�c�3ÑÔð 	?Ý�3”=Ñ!Ô!×.Ò.­s°3´=Ñ/AÔ/AÑBÔBð YÝ Ð!WÑXÔXÐXØ”Z #¤*Ñ,ˆFÝ� ¤¨S¬\Ñ 9ÐEÐE¸WÐEÐEÐOÈÐOÐOÐOˆFÝ˜f˜aœf d˜m¨FÑ2Ð>Ð>°gÐ>Ð>Ð>å�  C¤LÑ 0Ð<Ð<°GÐ<Ð<ÐJ¸s¼zÐJÐJÐJˆFÝ˜f˜aœf d˜m¨FÑ2Ð>Ð>°gÐ>Ð>Ð>å�#•sÑÔð ;Ý•V˜CœL¨Ñ,Ð8Ð8°Ð8Ð8ÐF¸3¼:ÐFÐFÐFˆÝ˜&˜!œ& $˜-¨Ñ.Ð:Ð:°'Ð:Ð:Ð:õ �SÐ+¨TÑ2Ô2€FØÐð	Ø�V˜CÐ+Ð+ 7Ð+Ð+ˆFˆFøÝ"ð 	ð 	ð 	ØˆFˆFˆFð	øøøð ˆà€~Ý˜sÐ$:¸DÑAÔAˆØÐ#ðØ%˜ cÐ5Ð5¨WÐ5Ð5��øÝ&ð ð ð Ø���ðøøøð €~Ý�c�7Ñ#Ô#ð 	,­
°3½Ñ(@Ô(@ð 	,Ý! # sÑ+Ô+ˆFõ �&�3¥­Ð/Ñ0Ô0ð =Ý˜ÑÔÐØ	ˆÝˆt‰9Œ9˜Š>ˆ>àˆHå˜f˜aœf t¨s¨e¡|Ð5ÐAÐA¸ÐAÐAÀ#ÑEÀeÑKÐKÝ	�F�LÑ	)Ô	)ð =Ø•j  ¤¨ Ð:Ð:°'Ð:Ð:Ñ:¸5Ñ@Ð@å�f�a”f˜d�m FÑ*Ð6Ð6¨gÐ6Ð6°uÑ<Ð<s$   Ñ.	Q8 Ñ8RÒRÒ"	R, Ò,R;Ò:R;N)'Ú__doc__Úsympy.concreter   Úsympy.core.addr   Úsympy.core.kindr   Úsympy.core.mulr   Úsympy.core.powerr   Úsympy.core.singletonr   Úsympy.core.sympifyr	   r
   Ú$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   rB   r/   r   r   ú<module>r�      s‰  ððð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 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Ø =Ð =Ð =Ð =Ð =Ð =ð ð€ðMð Mð Mð
;ð ;ð ;ð
tð tð tðne=ð e=ð e=ð e=ð e=r   