
    ЦiR                         S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJrJr  SSKJrJrJrJr  SSKJr  S/rS rS rg)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           
         SSK Jn  UR                  SS5      nU S:X  a  [        R                  $ U R                  SSS9n [        U [        5      (       a  U $ [        U [        5      (       a4  SnU R                   H  nU[        U40 UD6-  nM     UR                  5       $ [        X5      (       a2  U R                   VVs/ s H  u  nn[        U40 UD6U4PM     nnnU" U6 $ [        U [        5      (       a-  [        U R                   V	s/ s H  n	[        U	40 UD6PM     sn	6 $ [        U [        5      (       a#  [        U R                  40 UD6U R                  -  $ [        U [        5      (       a  U R!                  5       u  p[        U
6 n[        U6 n[        U[        5      (       a  U[#        U40 UD6-  nOU[        U40 UD6-  nX@:X  a%  U(       a  [%        [#        [%        U 5      40 UD65      $ U$ U $ s  snnf s  sn	f )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tensorproduct)sympy.physics.quantum.densityr   getr   Zeroexpand
isinstancer   r   argsr   r   r   baseexpr   args_cnc
qapply_Mulr
   )eoptionsr   r   resultargstateprobnew_argstc_partnc_partc_mulnc_muls                 [/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sympy/physics/quantum/qapply.pyr   r      s   T 6[[5)FAvvv 	
D5A !W 
As		66CfS,G,,F }} 
A		ff&$:% E-W-t4$ 	 &!! 
A}	%	%QVVDVva373VDEE 
As		aff((!%%// 
As		**,Vgfc"":f888F6&4G44F;6*VAY:':;;M
 ;& Es   >G4	G:c           
         UR                  SS5      n[        U R                  5      n[        U5      S::  d  [	        U [
        5      (       d  U $ UR                  5       nUR                  5       n[	        U[        5      (       d  [        U5      R                  (       d/  [	        U[        5      (       d  [        U5      R                  (       a  U $ [	        U[        5      (       aR  UR                  R                  (       a7  UR                  UR                  UR                  S-
  -  5        UR                  n[	        U[        5      (       a'  UR                  UR                   5        UR"                  n[	        U[$        [&        45      (       a  UR)                  5       n[	        U[*        5      (       aK  [-        U R.                  " X6R                  S   U/-   6 U R.                  " X6R                  S   U/-   6 -   40 UD6$ [-        U R.                  " U6 U-  U-  40 UD6$ [	        U[0        5      (       Ga  [3        S UR                   5       5      (       a  [	        U[0        5      (       a  [3        S UR                   5       5      (       a  [        UR                  5      [        UR                  5      :X  a  [1        [5        [        UR                  5      5       Vs/ s H,  n[-        UR                  U   UR                  U   -  40 UD6PM.     sn6 R7                  SS9n[9        U R.                  " U6 40 UD6U-  $  UR:                  " U40 UD6nUc  [?        USS 5      n	U	b
   U	" U40 UD6nUcL  [	        U[@        5      (       a7  [	        U[B        5      (       a"  [E        XT5      nU(       a  UR)                  5       nUS:X  a  [F        RH                  $ Uc0  [        U5      S:X  a  U $ [9        U R.                  " X5/-   6 40 UD6U-  $ [	        U[D        5      (       a  U[9        U R.                  " U6 40 UD6-  $ [-        U R.                  " U6 U-  40 UD6$ s  snf ! [<         a    S n GNf = f! [<         a    S n GNf = f)	Nip_doitT   r   c              3   z   #    U  H1  n[        U[        [        [        [        45      =(       d    US :H  v   M3     g7fr2   Nr   r   r   r   r   .0r&   s     r/   	<genexpr>qapply_Mul.<locals>.<genexpr>   s4     -{rzknjxPSUX>Y.Z.f^aef^f.frz   9;c              3   z   #    U  H1  n[        U[        [        [        [        45      =(       d    US :H  v   M3     g7fr4   r5   r6   s     r/   r8   r9      s7       3Awps:cHeUXZ]C^3_3kcfjkck3kwr:   )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$   r1   r   rhslhscommnr%   _apply_rights
             r/   r"   r"      s   kk)T*G<D 4yA~Z3//
((*C
((*C sL))gcl.I.IC..73<3N3N #s 2 2CHHsww{+,hh #|$$CGGgg #
N344xxzdC  1s 3351s 3356   !&&$-,S0<G<< #}%%#-{rurzrz-{*{*{sM**s  3Awzww  3A  0A  0AMS]*UZ[^_b_g_g[hUi jUiPQCHHQK(?!K7!KUi jkrr  BFr  G!&&$-373F::$$S4G4 ~s$:DA#%c5W5 ~c7##
3(@(@!#+F {vv	t9>Haffte|5AA#EE	FL	)	)j:':::affdmF*6g66G !k   ' s*   3Q:Q !	Q' Q$#Q$'Q76Q7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/   <module>ra      sL        " & ? 7 / ; A M M = dNO7r`   