§
    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 dd	lmZ dd
lmZmZ dgZ G d„ de¦  «        Zej                             ee¦  «        d„ ¦   «         ZdS )z"The commutator: [A,B] = A*B - B*A.é    )ÚAdd)ÚExpr)ÚKindDispatcher)ÚMul)ÚPow)ÚS)Ú
prettyForm)ÚDagger)Ú_OperatorKindÚOperatorKindÚ
Commutatorc                   ó’   — e Zd ZdZdZ edd¬¦  «        Zed„ ¦   «         Zd„ Z	e
d„ ¦   «         Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )r   a?  The standard commutator, in an unevaluated state.

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

    Evaluating a commutator is defined [1]_ as: ``[A, B] = A*B - B*A``. This
    class returns the commutator in an unevaluated form. To evaluate the
    commutator, use the ``.doit()`` method.

    Canonical ordering of a commutator is ``[A, B]`` for ``A < B``. The
    arguments of the commutator are put into canonical order using ``__cmp__``.
    If ``B < A``, then ``[B, A]`` is returned as ``-[A, B]``.

    Parameters
    ==========

    A : Expr
        The first argument of the commutator [A,B].
    B : Expr
        The second argument of the commutator [A,B].

    Examples
    ========

    >>> from sympy.physics.quantum import Commutator, Dagger, Operator
    >>> from sympy.abc import x, y
    >>> A = Operator('A')
    >>> B = Operator('B')
    >>> C = Operator('C')

    Create a commutator and use ``.doit()`` to evaluate it:

    >>> comm = Commutator(A, B)
    >>> comm
    [A,B]
    >>> comm.doit()
    A*B - B*A

    The commutator orders it arguments in canonical order:

    >>> comm = Commutator(B, A); comm
    -[A,B]

    Commutative constants are factored out:

    >>> Commutator(3*x*A, x*y*B)
    3*x**2*y*[A,B]

    Using ``.expand(commutator=True)``, the standard commutator expansion rules
    can be applied:

    >>> Commutator(A+B, C).expand(commutator=True)
    [A,C] + [B,C]
    >>> Commutator(A, B+C).expand(commutator=True)
    [A,B] + [A,C]
    >>> Commutator(A*B, C).expand(commutator=True)
    [A,C]*B + A*[B,C]
    >>> Commutator(A, B*C).expand(commutator=True)
    [A,B]*C + B*[A,C]

    Adjoint operations applied to the commutator are properly applied to the
    arguments:

    >>> Dagger(Commutator(A, B))
    -[Dagger(A),Dagger(B)]

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Commutator
    FÚCommutator_kind_dispatcherT)Úcommutativec                 ó8   — d„ | j         D ¦   «         } | j        |Ž S )Nc              3   ó$   K  — | ]}|j         V — Œd S ©N)Úkind)Ú.0Úas     ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/physics/quantum/commutator.pyú	<genexpr>z"Commutator.kind.<locals>.<genexpr>f   s$   è è € Ð/Ð/ �Q”VÐ/Ð/Ð/Ð/Ð/Ð/ó    )ÚargsÚ_kind_dispatcher)ÚselfÚ	arg_kindss     r   r   zCommutator.kindd   s'   € à/Ð/ T¤YÐ/Ñ/Ô/ˆ	Ø$ˆtÔ$ iÐ0Ð0r   c                 óf   — |                       ||¦  «        }|�|S t          j        | ||¦  «        }|S r   )Úevalr   Ú__new__)ÚclsÚAÚBÚrÚobjs        r   r    zCommutator.__new__i   s5   € Ø�HŠH�Q˜‰NŒNˆØˆ=ØˆHÝŒl˜3  1Ñ%Ô%ˆØˆ
r   c           	      óÖ  — |r|st           j        S ||k    rt           j        S |j        s|j        rt           j        S |                     ¦   «         \  }}|                     ¦   «         \  }}||z   }|rEt	          t	          |Ž  | t	          j        |¦  «        t	          j        |¦  «        ¦  «        ¦  «        S |                     |¦  «        dk    rt           j         | ||¦  «        z  S d S )Né   )r   ÚZeroÚis_commutativeÚargs_cncr   Ú
_from_argsÚcompareÚNegativeOne)r!   r   ÚbÚcaÚncaÚcbÚncbÚc_parts           r   r   zCommutator.evalp   sä   € àð 	�að 	Ý”6ˆMØ�Š6ˆ6Ý”6ˆMØÔð 	˜qÔ/ð 	Ý”6ˆMð —*’*‘,”,‰ˆˆCØ—*’*‘,”,‰ˆˆCØ�b‘ˆØð 	TÝ•s˜F�| S S­¬¸Ñ)<Ô)<½c¼nÈSÑ>QÔ>QÑ%RÔ%RÑSÔSÐSð �9Š9�Q‰<Œ<˜1ÒÐÝ”=   Q¨¡¤Ñ*Ð*ð Ðr   c                 ó†  — |j         }|j        r'|                     ¦   «         rt          |¦  «        dk    r| S |j        }|j        r|j        dz  }| }t          ||¦  «                             d¬¦  «        }||dz
  z  |z  }t          d|¦  «        D ]}|||dz
  |z
  z  |z  ||z  z  z  }Œ||                     ¦   «         z  S )Nr'   éÿÿÿÿT)Ú
commutator)	ÚexpÚ
is_integerÚis_constantÚabsÚbaseÚis_negativer   ÚexpandÚrange)	r   r"   r#   Úsignr7   r;   ÚcommÚresultÚis	            r   Ú_expand_powzCommutator._expand_pow…   sÝ   € ØŒeˆØŒ~ð 	 S§_¢_Ñ%6Ô%6ð 	½#¸c¹(¼(Àaº-¸-àˆKØŒvˆØŒ?ð 	Ø”6˜2‘:ˆDØ�$ˆCÝ˜$ Ñ"Ô"×)Ò)°TÐ)Ñ:Ô:ˆà˜˜a™‘ 4Ñ'ˆÝ�q˜#‘”ð 	;ð 	;ˆAØ�d˜S 1™W q™[Ñ)¨DÑ0°4¸±7Ñ:Ñ:ˆFˆFØ�F—M’M‘O”OÑ#Ð#r   c                 ó:  — | j         d         }| j         d         }t          |t          ¦  «        rcg }|j         D ]P}t          ||¦  «        }t          |t          ¦  «        r|                     ¦   «         }|                     |¦  «         ŒQt          |Ž S t          |t          ¦  «        rcg }|j         D ]P}t          ||¦  «        }t          |t          ¦  «        r|                     ¦   «         }|                     |¦  «         ŒQt          |Ž S t          |t          ¦  «        rÇ|j         d         }t          |j         dd …         Ž }|}	t          ||	¦  «        }
t          ||	¦  «        }t          |
t          ¦  «        r|
                     ¦   «         }
t          |t          ¦  «        r|                     ¦   «         }t          ||
¦  «        }t          ||¦  «        }t          ||¦  «        S t          |t          ¦  «        rÇ|}|j         d         }t          |j         dd …         Ž }	t          ||¦  «        }
t          ||	¦  «        }t          |
t          ¦  «        r|
                     ¦   «         }
t          |t          ¦  «        r|                     ¦   «         }t          |
|	¦  «        }t          ||¦  «        }t          ||¦  «        S t          |t          ¦  «        r|                      ||d¦  «        S t          |t          ¦  «        r|                      ||d¦  «        S | S )Nr   r'   r5   )	r   Ú
isinstancer   r   Ú_eval_expand_commutatorÚappendr   r   rC   )r   Úhintsr"   r#   ÚsargsÚtermr@   r   r.   ÚcÚcomm1Úcomm2ÚfirstÚseconds                 r   rF   z"Commutator._eval_expand_commutator•   sí  € ØŒI�aŒLˆØŒI�aŒLˆå�a�ÑÔð 3	.àˆEØœð #ð #�Ý! $¨Ñ*Ô*�Ý˜d¥JÑ/Ô/ð :Ø×7Ò7Ñ9Ô9�DØ—’˜TÑ"Ô"Ð"Ð"Ý˜�;ÐÝ˜�3ÑÔð *	.àˆEØœð #ð #�Ý! ! TÑ*Ô*�Ý˜d¥JÑ/Ô/ð :Ø×7Ò7Ñ9Ô9�DØ—’˜TÑ"Ô"Ð"Ð"Ý˜�;ÐÝ˜�3ÑÔð !	.à”�q”	ˆAÝ�Q”V˜A˜B˜B”ZÐ ˆAØˆAÝ˜q !Ñ$Ô$ˆEÝ˜q !Ñ$Ô$ˆEÝ˜%¥Ñ,Ô,ð 8Ø×5Ò5Ñ7Ô7�Ý˜%¥Ñ,Ô,ð 8Ø×5Ò5Ñ7Ô7�Ý˜˜5‘M”MˆEÝ˜ ‘]”]ˆFÝ�u˜fÑ%Ô%Ð%Ý˜�3ÑÔð 	.àˆAØ”�q”	ˆAÝ�Q”V˜A˜B˜B”ZÐ ˆAÝ˜q !Ñ$Ô$ˆEÝ˜q !Ñ$Ô$ˆEÝ˜%¥Ñ,Ô,ð 8Ø×5Ò5Ñ7Ô7�Ý˜%¥Ñ,Ô,ð 8Ø×5Ò5Ñ7Ô7�Ý˜˜q‘M”MˆEÝ˜˜E‘]”]ˆFÝ�u˜fÑ%Ô%Ð%Ý˜�3ÑÔð 	.à×#Ò# A q¨!Ñ,Ô,Ð,Ý˜�3ÑÔð 	.à×#Ò# A q¨"Ñ-Ô-Ð-ð ˆr   c                 óV  — ddl m} | j        d         }| j        d         }t          ||¦  «        rdt          ||¦  «        rT	  |j        |fi |¤Ž}n5# t
          $ r( 	 d |j        |fi |¤Žz  }n# t
          $ r d}Y nw xY wY nw xY w|� |j        di |¤ŽS  ||z  ||z  z
  j        di |¤ŽS )z Evaluate commutator r   )ÚOperatorr'   r5   N© )Úsympy.physics.quantum.operatorrQ   r   rE   Ú_eval_commutatorÚNotImplementedErrorÚdoit)r   rH   rQ   r"   r#   r@   s         r   rV   zCommutator.doitÑ   s  € ð 	<Ð;Ð;Ð;Ð;Ð;ØŒI�aŒLˆØŒI�aŒLˆÝ�a˜Ñ"Ô"ð 		*¥z°!°XÑ'>Ô'>ð 		*ð Ø)�qÔ)¨!Ð5Ð5¨uÐ5Ð5��øÝ&ð  ð  ð  ð ØÐ0˜aÔ0°Ð<Ð<°eÐ<Ð<Ñ<�D�DøÝ*ð  ð  ð  Ø�D�D�Dð øøøøøð øøøð
 ÐØ �t”yÐ)Ð) 5Ð)Ð)Ð)Ø��!‘�a˜‘c‘	ÔÐ(Ð( %Ð(Ð(Ð(s6   ÁA Á
BÁA.Á-BÁ.A=Á:BÁ<A=Á=BÂBc                 ó‚   — t          t          | j        d         ¦  «        t          | j        d         ¦  «        ¦  «        S )Nr'   r   )r   r
   r   )r   s    r   Ú_eval_adjointzCommutator._eval_adjointä   s.   € Ý�& ¤¨1¤Ñ.Ô.µ°t´yÀ´|Ñ0DÔ0DÑEÔEÐEr   c                 ó¤   — | j         j        ›d|                     | j        d         ¦  «        ›d|                     | j        d         ¦  «        ›d�S )Nú(r   ú,r'   ú))Ú	__class__Ú__name__Ú_printr   ©r   Úprinterr   s      r   Ú
_sympyreprzCommutator._sympyreprç   sX   € àŒNÔ#Ð#Ð# W§^¢^Ø”	˜!”ñ&ô &ð &ð &Ø&Ÿ~š~¨d¬i¸¬lÑ;Ô;Ð;Ð;ð
ð 	
r   c                 óŒ   — d|                      | j        d         ¦  «        ›d|                      | j        d         ¦  «        ›d�S )Nú[r   r[   r'   ú])r_   r   r`   s      r   Ú	_sympystrzCommutator._sympystrí   sE   € € à�NŠN˜4œ9 Qœ<Ñ(Ô(Ð(Ð(¨'¯.ª.¸¼À1¼Ñ*FÔ*FÐ*FÐ*FðHð 	Hr   c                 ó,  —  |j         | j        d         g|¢R Ž }t          |                     t          d¦  «        ¦  «        Ž }t          |                      |j         | j        d         g|¢R Ž ¦  «        Ž }t          |                     dd¬¦  «        Ž }|S )Nr   r[   r'   rd   re   )ÚleftÚright)r_   r   r	   ri   Úparens)r   ra   r   Úpforms       r   Ú_prettyzCommutator._prettyñ   sŒ   € Ø�”˜tœy¨œ|Ð3¨dÐ3Ð3Ð3ˆÝ˜EŸKšK­
°3©¬Ñ8Ô8Ð9ˆÝ˜EŸKšK¨¨¬°t´yÀ´|Ð(KÀdÐ(KÐ(KÐ(KÑLÔLÐMˆÝ˜EŸLšL¨c¸˜LÑ=Ô=Ð>ˆØˆr   c                 óN   ‡‡— dt          ˆˆfd„| j        D ¦   «         ¦  «        z  S )Nz\left[%s,%s\right]c                 ó,   •— g | ]} ‰j         |g‰¢R Ž ‘ŒS rR   )r_   )r   Úargr   ra   s     €€r   ú
<listcomp>z%Commutator._latex.<locals>.<listcomp>ù   s:   ø€ ð /=ð /=ð /=Ø+.ˆNˆGŒN˜3Ð& Ð&Ð&Ð&ð/=ð /=ð /=r   )Útupler   r`   s    ``r   Ú_latexzCommutator._latexø   sJ   øø€ Ø%­ð /=ð /=ð /=ð /=ð /=Ø26´)ð/=ñ /=ô /=ñ )>ô )>ñ >ð 	>r   N)r^   Ú
__module__Ú__qualname__Ú__doc__r)   r   r   Úpropertyr   r    Úclassmethodr   rC   rF   rV   rX   rb   rf   rl   rr   rR   r   r   r   r      s  € € € € € ðFð FðN €Nà%�~Ð&BÐPTÐUÑUÔUÐàð1ð 1ñ „Xð1ðð ð ð ð+ð +ñ „[ð+ð($ð $ð $ð :ð :ð :ðx)ð )ð )ð&Fð Fð Fð
ð 
ð 
ðHð Hð Hðð ð ð>ð >ð >ð >ð >r   c                 ó   — t           S )z8Find the kind of an anticommutator of two OperatorKinds.)r   )Úe1Úe2s     r   Úfind_op_kindr{   ý   s
   € õ Ðr   N)ru   Úsympy.core.addr   Úsympy.core.exprr   Úsympy.core.kindr   Úsympy.core.mulr   Úsympy.core.powerr   Úsympy.core.singletonr   Ú sympy.printing.pretty.stringpictr	   Úsympy.physics.quantum.daggerr
   Úsympy.physics.quantum.kindr   r   Ú__all__r   r   Úregisterr{   rR   r   r   ú<module>r‡      s,  ðØ (Ð (à Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7à /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bð ð€ðb>ð b>ð b>ð b>ð b>�ñ b>ô b>ð b>ðJ Ô×%Ò% m°]ÑCÔCðð ñ DÔCðð ð r   