
    \hbC                     L   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JrJr  SS	KJr  SS
KJr  SSKJr  / SQr " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rS rS r g) zPauli operators and states    )Add)MulI)Pow)S)exp)OperatorKetBraComplexSpace)Matrix)KroneckerDelta)SigmaXSigmaYSigmaZ
SigmaMinus	SigmaPlus	SigmaZKet	SigmaZBraqsimplify_paulic                   T    \ rS rSrSr\S 5       r\S 5       r\S 5       r	S r
S rSrg	)
SigmaOpBase   z Pauli sigma operator, base classc                      U R                   S   $ Nr   )argsselfs    S/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/quantum/pauli.pynameSigmaOpBase.name   s    yy|    c                 6    [        U R                  S   5      SL$ )Nr   F)boolr   r   s    r!   use_nameSigmaOpBase.use_name   s    DIIaL!..r$   c                     g)N)F r   s    r!   default_argsSigmaOpBase.default_args   s    r$   c                 6    [         R                  " U /UQ70 UD6$ N)r
   __new__clsr   hintss      r!   r/   SigmaOpBase.__new__#   s    4d4e44r$   c                 "    [         R                  $ r.   r   Zeror    otherr2   s      r!   _eval_commutator_BosonOp$SigmaOpBase._eval_commutator_BosonOp&       vvr$   r*   N)__name__
__module____qualname____firstlineno____doc__propertyr"   r'   classmethodr+   r/   r9   __static_attributes__r*   r$   r!   r   r      sI    *  / /  5r$   r   c                   Z    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)r   *   ab  Pauli sigma x operator

Parameters
==========

name : str
    An optional string that labels the operator. Pauli operators with
    different names commute.

Examples
========

>>> from sympy.physics.quantum import represent
>>> from sympy.physics.quantum.pauli import SigmaX
>>> sx = SigmaX()
>>> sx
SigmaX()
>>> represent(sx)
Matrix([
[0, 1],
[1, 0]])
c                 6    [         R                  " U /UQ70 UD6$ r.   r   r/   r0   s      r!   r/   SigmaX.__new__B   s    ""37777r$   c                     U R                   UR                   :w  a  [        R                  $ S[        -  [	        U R                   5      -  $ N   r"   r   r6   r   r   r7   s      r!   _eval_commutator_SigmaYSigmaX._eval_commutator_SigmaYE   3    99

"66Mq56$)),,,r$   c                     U R                   UR                   :w  a  [        R                  $ S[        -  [	        U R                   5      -  $ Nr"   r   r6   r   r   r7   s      r!   _eval_commutator_SigmaZSigmaX._eval_commutator_SigmaZK   3    99

"66M7VDII...r$   c                 "    [         R                  $ r.   r5   r7   s      r!   r9   SigmaX._eval_commutator_BosonOpQ   r;   r$   c                 "    [         R                  $ r.   r5   r7   s      r!   _eval_anticommutator_SigmaY"SigmaX._eval_anticommutator_SigmaYT   r;   r$   c                 "    [         R                  $ r.   r5   r7   s      r!   _eval_anticommutator_SigmaZ"SigmaX._eval_anticommutator_SigmaZW   r;   r$   c                     U $ r.   r*   r   s    r!   _eval_adjointSigmaX._eval_adjointZ       r$   c                 V    U R                   (       a  S[        U R                  5      -  $ g)Nz{\sigma_x^{(%s)}}z
{\sigma_x}r'   strr"   r    printerr   s      r!   _print_contents_latexSigmaX._print_contents_latex]       =='#dii.88 r$   c                     g)NzSigmaX()r*   rf   s      r!   _print_contentsSigmaX._print_contentsc       r$   c                     UR                   (       aB  UR                  (       a0  [        U R                  5      R	                  [        U5      S-  5      $ g g rJ   )
is_Integeris_positiver   r"   __pow__intr    es     r!   _eval_powerSigmaX._eval_powerf   8    <<AMM$))$,,SVaZ88 *<r$   c                 v    UR                  SS5      nUS:X  a  [        SS/SS//5      $ [        SU-   S-   5      eNformatsympyr      Representation in format  not implemented.getr   NotImplementedErrorr    optionsr{   s      r!   _represent_default_basisSigmaX._represent_default_basisj   U    Xw/WAq6Aq6*++%&A&,'-/B'C D Dr$   r*   N)r<   r=   r>   r?   r@   r/   rM   rT   r9   rZ   r]   r`   rh   rl   rv   r   rC   r*   r$   r!   r   r   *   s?    .8-/!9Dr$   r   c                   T    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)r   s   ad  Pauli sigma y operator

Parameters
==========

name : str
    An optional string that labels the operator. Pauli operators with
    different names commute.

Examples
========

>>> from sympy.physics.quantum import represent
>>> from sympy.physics.quantum.pauli import SigmaY
>>> sy = SigmaY()
>>> sy
SigmaY()
>>> represent(sy)
Matrix([
[0, -I],
[I,  0]])
c                 0    [         R                  " U /UQ76 $ r.   rG   r0   s      r!   r/   SigmaY.__new__       ""3...r$   c                     U R                   UR                   :w  a  [        R                  $ S[        -  [	        U R                   5      -  $ rJ   r"   r   r6   r   r   r7   s      r!   rT   SigmaY._eval_commutator_SigmaZ   rO   r$   c                     U R                   UR                   :w  a  [        R                  $ S[        -  [	        U R                   5      -  $ rQ   rL   r7   s      r!   _eval_commutator_SigmaXSigmaY._eval_commutator_SigmaX   rV   r$   c                 "    [         R                  $ r.   r5   r7   s      r!   _eval_anticommutator_SigmaX"SigmaY._eval_anticommutator_SigmaX   r;   r$   c                 "    [         R                  $ r.   r5   r7   s      r!   r]   "SigmaY._eval_anticommutator_SigmaZ   r;   r$   c                     U $ r.   r*   r   s    r!   r`   SigmaY._eval_adjoint   rb   r$   c                 V    U R                   (       a  S[        U R                  5      -  $ g)Nz{\sigma_y^{(%s)}}z
{\sigma_y}rd   rf   s      r!   rh   SigmaY._print_contents_latex   rj   r$   c                     g)NzSigmaY()r*   rf   s      r!   rl   SigmaY._print_contents   rn   r$   c                     UR                   (       aB  UR                  (       a0  [        U R                  5      R	                  [        U5      S-  5      $ g g rJ   )rp   rq   r   r"   rr   rs   rt   s     r!   rv   SigmaY._eval_power   rx   r$   c                     UR                  SS5      nUS:X  a  [        S[        * /[        S//5      $ [        SU-   S-   5      e)Nr{   r|   r   r~   r   )r   r   r   r   r   s      r!   r   SigmaY._represent_default_basis   sW    Xw/WAr7QF+,,%&A&,'-/B'C D Dr$   r*   N)r<   r=   r>   r?   r@   r/   rT   r   r   r]   r`   rh   rl   rv   r   rC   r*   r$   r!   r   r   s   :    ./-/!9Dr$   r   c                   T    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)r      ai  Pauli sigma z operator

Parameters
==========

name : str
    An optional string that labels the operator. Pauli operators with
    different names commute.

Examples
========

>>> from sympy.physics.quantum import represent
>>> from sympy.physics.quantum.pauli import SigmaZ
>>> sz = SigmaZ()
>>> sz ** 3
SigmaZ()
>>> represent(sz)
Matrix([
[1,  0],
[0, -1]])
c                 0    [         R                  " U /UQ76 $ r.   rG   r0   s      r!   r/   SigmaZ.__new__   r   r$   c                     U R                   UR                   :w  a  [        R                  $ S[        -  [	        U R                   5      -  $ rJ   rS   r7   s      r!   r   SigmaZ._eval_commutator_SigmaX   rO   r$   c                     U R                   UR                   :w  a  [        R                  $ S[        -  [	        U R                   5      -  $ rQ   r   r7   s      r!   rM   SigmaZ._eval_commutator_SigmaY   rV   r$   c                 "    [         R                  $ r.   r5   r7   s      r!   r   "SigmaZ._eval_anticommutator_SigmaX   r;   r$   c                 "    [         R                  $ r.   r5   r7   s      r!   rZ   "SigmaZ._eval_anticommutator_SigmaY   r;   r$   c                     U $ r.   r*   r   s    r!   r`   SigmaZ._eval_adjoint   rb   r$   c                 V    U R                   (       a  S[        U R                  5      -  $ g)Nz{\sigma_z^{(%s)}}z
{\sigma_z}rd   rf   s      r!   rh   SigmaZ._print_contents_latex   rj   r$   c                     g)NzSigmaZ()r*   rf   s      r!   rl   SigmaZ._print_contents   rn   r$   c                     UR                   (       aB  UR                  (       a0  [        U R                  5      R	                  [        U5      S-  5      $ g g rJ   )rp   rq   r   r"   rr   rs   rt   s     r!   rv   SigmaZ._eval_power   rx   r$   c                 v    UR                  SS5      nUS:X  a  [        SS/SS//5      $ [        SU-   S-   5      e)Nr{   r|   r}   r   r~   r   r   r   s      r!   r   SigmaZ._represent_default_basis   sU    Xw/WAq6Ar7+,,%&A&,'-/B'C D Dr$   r*   N)r<   r=   r>   r?   r@   r/   r   rM   r   rZ   r`   rh   rl   rv   r   rC   r*   r$   r!   r   r      r   r$   r   c                   l    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rSrg)r      a  Pauli sigma minus operator

Parameters
==========

name : str
    An optional string that labels the operator. Pauli operators with
    different names commute.

Examples
========

>>> from sympy.physics.quantum import represent, Dagger
>>> from sympy.physics.quantum.pauli import SigmaMinus
>>> sm = SigmaMinus()
>>> sm
SigmaMinus()
>>> Dagger(sm)
SigmaPlus()
>>> represent(sm)
Matrix([
[0, 0],
[1, 0]])
c                 0    [         R                  " U /UQ76 $ r.   rG   r0   s      r!   r/   SigmaMinus.__new__  r   r$   c                     U R                   UR                   :w  a  [        R                  $ [        U R                   5      * $ r.   r"   r   r6   r   r7   s      r!   r   "SigmaMinus._eval_commutator_SigmaX  s-    99

"66M499%%%r$   c                     U R                   UR                   :w  a  [        R                  $ [        [	        U R                   5      -  $ r.   rL   r7   s      r!   rM   "SigmaMinus._eval_commutator_SigmaY"  /    99

"66Mvdii(((r$   c                     SU -  $ rJ   r*   r7   s      r!   rT   "SigmaMinus._eval_commutator_SigmaZ(  s    4xr$   c                 ,    [        U R                  5      $ r.   r   r"   r7   s      r!   _eval_commutator_SigmaMinus&SigmaMinus._eval_commutator_SigmaMinus+      dii  r$   c                 "    [         R                  $ r.   r5   r7   s      r!   r]   &SigmaMinus._eval_anticommutator_SigmaZ.  r;   r$   c                 "    [         R                  $ r.   r   Oner7   s      r!   r   &SigmaMinus._eval_anticommutator_SigmaX1      uur$   c                 0    [         [        R                  -  $ r.   )r   r   NegativeOner7   s      r!   rZ   &SigmaMinus._eval_anticommutator_SigmaY4  s    1==  r$   c                 "    [         R                  $ r.   r   r7   s      r!   _eval_anticommutator_SigmaPlus)SigmaMinus._eval_anticommutator_SigmaPlus7  r   r$   c                 ,    [        U R                  5      $ r.   )r   r"   r   s    r!   r`   SigmaMinus._eval_adjoint:  s    ##r$   c                 j    UR                   (       a"  UR                  (       a  [        R                  $ g g r.   rp   rq   r   r6   rt   s     r!   rv   SigmaMinus._eval_power=      <<AMM66M *<r$   c                 V    U R                   (       a  S[        U R                  5      -  $ g)Nz{\sigma_-^{(%s)}}z
{\sigma_-}rd   rf   s      r!   rh    SigmaMinus._print_contents_latexA  rj   r$   c                     g)NzSigmaMinus()r*   rf   s      r!   rl   SigmaMinus._print_contentsG  s    r$   c                 v    UR                  SS5      nUS:X  a  [        SS/SS//5      $ [        SU-   S-   5      erz   r   r   s      r!   r   #SigmaMinus._represent_default_basisJ  r   r$   r*   N)r<   r=   r>   r?   r@   r/   r   rM   rT   r   r]   r   rZ   r   r`   rv   rh   rl   r   rC   r*   r$   r!   r   r      sN    2/&)!!$!Dr$   r   c                   r    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)r   iS  a  Pauli sigma plus operator

Parameters
==========

name : str
    An optional string that labels the operator. Pauli operators with
    different names commute.

Examples
========

>>> from sympy.physics.quantum import represent, Dagger
>>> from sympy.physics.quantum.pauli import SigmaPlus
>>> sp = SigmaPlus()
>>> sp
SigmaPlus()
>>> Dagger(sp)
SigmaMinus()
>>> represent(sp)
Matrix([
[0, 1],
[0, 0]])
c                 0    [         R                  " U /UQ76 $ r.   rG   r0   s      r!   r/   SigmaPlus.__new__m  r   r$   c                     U R                   UR                   :w  a  [        R                  $ [        U R                   5      $ r.   r   r7   s      r!   r   !SigmaPlus._eval_commutator_SigmaXp  s*    99

"66M$))$$r$   c                     U R                   UR                   :w  a  [        R                  $ [        [	        U R                   5      -  $ r.   rL   r7   s      r!   rM   !SigmaPlus._eval_commutator_SigmaYv  r   r$   c                 `    U R                   UR                   :w  a  [        R                  $ SU -  $ rQ   )r"   r   r6   r7   s      r!   rT   !SigmaPlus._eval_commutator_SigmaZ|  s%    99

"66M9r$   c                 ,    [        U R                  5      $ r.   r   r7   s      r!   r   %SigmaPlus._eval_commutator_SigmaMinus  r   r$   c                 "    [         R                  $ r.   r5   r7   s      r!   r]   %SigmaPlus._eval_anticommutator_SigmaZ  r;   r$   c                 "    [         R                  $ r.   r   r7   s      r!   r   %SigmaPlus._eval_anticommutator_SigmaX  r   r$   c                     [         $ r.   r   r7   s      r!   rZ   %SigmaPlus._eval_anticommutator_SigmaY  s    r$   c                 "    [         R                  $ r.   r   r7   s      r!   _eval_anticommutator_SigmaMinus)SigmaPlus._eval_anticommutator_SigmaMinus  r   r$   c                 ,    [        U R                  5      $ r.   )r   r"   r   s    r!   r`   SigmaPlus._eval_adjoint  s    $))$$r$   c                 
    X-  $ r.   r*   )r    r8   s     r!   	_eval_mulSigmaPlus._eval_mul  s
    |r$   c                 j    UR                   (       a"  UR                  (       a  [        R                  $ g g r.   r   rt   s     r!   rv   SigmaPlus._eval_power  r   r$   c                 V    U R                   (       a  S[        U R                  5      -  $ g)Nz{\sigma_+^{(%s)}}z
{\sigma_+}rd   rf   s      r!   rh   SigmaPlus._print_contents_latex  rj   r$   c                     g)NzSigmaPlus()r*   rf   s      r!   rl   SigmaPlus._print_contents  s    r$   c                 v    UR                  SS5      nUS:X  a  [        SS/SS//5      $ [        SU-   S-   5      erz   r   r   s      r!   r   "SigmaPlus._represent_default_basis  r   r$   r*   N)r<   r=   r>   r?   r@   r/   r   rM   rT   r   r]   r   rZ   r   r`   r   rv   rh   rl   r   rC   r*   r$   r!   r   r   S  sS    2/%)!%!Dr$   r   c                   x    \ rS rSrSrS r\S 5       r\S 5       r	\S 5       r
S rS rS	 rS
 rS rS rS rSrg)r   i  znKet for a two-level system quantum system.

Parameters
==========

n : Number
    The state number (0 or 1).

c                 P    US;  a  [        S5      e[        R                  " X5      $ N)r   r}   zn must be 0 or 1)
ValueErrorr   r/   r1   ns     r!   r/   SigmaZKet.__new__  $    F?/00{{3""r$   c                      U R                   S   $ r   labelr   s    r!   r
  SigmaZKet.n      zz!}r$   c                     [         $ r.   )r   r   s    r!   
dual_classSigmaZKet.dual_class      r$   c                     [        S5      $ rJ   r   )r1   r  s     r!   _eval_hilbert_spaceSigmaZKet._eval_hilbert_space  s    Ar$   c                 B    [        U R                  UR                  5      $ r.   )r   r
  )r    brar2   s      r!   _eval_innerproduct_SigmaZBra&SigmaZKet._eval_innerproduct_SigmaZBra  s    dffcee,,r$   c                 L    U R                   S:X  a  U $ [        R                  U -  $ r   )r
  r   r   r    opr   s      r!   _apply_from_right_to_SigmaZ%SigmaZKet._apply_from_right_to_SigmaZ  s!    66Q;K==4''r$   c                 N    U R                   S:X  a  [        S5      $ [        S5      $ Nr   r}   )r
  r   r  s      r!   _apply_from_right_to_SigmaX%SigmaZKet._apply_from_right_to_SigmaX  s    #vv{y|<	!<r$   c                 l    U R                   S:X  a  [        [        S5      -  $ [        * [        S5      -  $ r#  )r
  r   r   r  s      r!   _apply_from_right_to_SigmaY%SigmaZKet._apply_from_right_to_SigmaY  s+    #'66Q;q9Q<GaR9Q<4GGr$   c                 X    U R                   S:X  a  [        S5      $ [        R                  $ r#  )r
  r   r   r6   r  s      r!   _apply_from_right_to_SigmaMinus)SigmaZKet._apply_from_right_to_SigmaMinus  s     66Q;Q<66Mr$   c                 X    U R                   S:X  a  [        R                  $ [        S5      $ r   )r
  r   r6   r   r  s      r!   _apply_from_right_to_SigmaPlus(SigmaZKet._apply_from_right_to_SigmaPlus  s     66Q;66MQ<r$   c                     UR                  SS5      nUS:X  a.  U R                  S:X  a  [        S/S//5      $ [        S/S//5      $ [        SU-   S-   5      erz   )r   r
  r   r   r   s      r!   r   "SigmaZKet._represent_default_basis  sl    Xw/W)-16A3*%L&1#s:LL%&A&,'-/B'C D Dr$   r*   N)r<   r=   r>   r?   r@   r/   rA   r
  rB   r  r  r  r   r$  r'  r*  r-  r   rC   r*   r$   r!   r   r     sm    #
      -(=H Dr$   r   c                   >    \ rS rSrSrS r\S 5       r\S 5       r	Sr
g)r   i  zgBra for a two-level quantum system.

Parameters
==========

n : Number
    The state number (0 or 1).

c                 P    US;  a  [        S5      e[        R                  " X5      $ r  )r  r   r/   r	  s     r!   r/   SigmaZBra.__new__  r  r$   c                      U R                   S   $ r   r  r   s    r!   r
  SigmaZBra.n  r  r$   c                     [         $ r.   )r   r   s    r!   r  SigmaZBra.dual_class  r  r$   r*   N)r<   r=   r>   r?   r@   r/   rA   r
  rB   r  rC   r*   r$   r!   r   r     s4    #
    r$   r   c                    [        U [        5      (       a  [        U[        5      (       d  [        X5      $ U R                  UR                  :w  a0  U R                  UR                  :  a  [        X5      $ [        X5      $ [        U [        5      (       Ga  [        U[        5      (       a  [
        R                  $ [        U[        5      (       a  [        [        U R                  5      -  $ [        U[        5      (       a  [        * [        U R                  5      -  $ [        U[        5      (       a)  [
        R                  [        U R                  5      S-  -   $ [        U[        5      (       a)  [
        R                  [        U R                  5      S-  -
  $ g[        U [        5      (       Ga  [        U[        5      (       a  [        * [        U R                  5      -  $ [        U[        5      (       a  [
        R                  $ [        U[        5      (       a  [        [	        U R                  5      -  $ [        U[        5      (       a1  [        * [
        R                  [        U R                  5      -   -  S-  $ [        U[        5      (       a0  [        [
        R                  [        U R                  5      -
  -  S-  $ g[        U [        5      (       a  [        U[        5      (       a  [        [        U R                  5      -  $ [        U[        5      (       a  [        * [	        U R                  5      -  $ [        U[        5      (       a  [
        R                  $ [        U[        5      (       a  [        U R                  5      * $ [        U[        5      (       a  [        U R                  5      $ g[        U [        5      (       Ga  [        U[        5      (       a)  [
        R                  [        U R                  5      -
  S-  $ [        U[        5      (       a1  [        * [
        R                  [        U R                  5      -
  -  S-  $ [        U[        5      (       a  [        UR                  5      $ [        U[        5      (       a  [
        R                  $ [        U[        5      (       a)  [
        R                  [        U R                  5      S-  -
  $ g[        U [        5      (       Ga  [        U[        5      (       a)  [
        R                  [        U R                  5      -   S-  $ [        U[        5      (       a0  [        [
        R                  [        U R                  5      -   -  S-  $ [        U[        5      (       a  [        U R                  5      * $ [        U[        5      (       a)  [
        R                  [        U R                  5      -   S-  $ [        U[        5      (       a  [
        R                  $ gX-  $ )zG
Internal helper function for simplifying products of Pauli operators.
rK   N)
isinstancer   r   r"   r   r   r   r   r   r   r   Halfr   r6   )abs     r!   _qsimplify_pauli_productr=    s!    q+&&:a+E+E1yvv66AFF?q9q9	Av		a  55La  vaff~%%a  3''a$$FFVAFF^A--.a##FFVAFF^A--. $ 
Av		a  3''a  55La  vaff~%%a$$2/022a##qvv./11 $ 
Av		a  vaff~%%a  3''a  55La$$'''a##QVV$$ $ 
Az	"	"a  EEF166N*A--a  3!%%&.01!33a  aff%%a$$66Ma##66F166N1,,, $ 
Ay	!	!a  EEF166N*A--a  qvv./11a  aff%%%a$$EEF166N*A--a##66M $ ur$   c                 t   [        U [        5      (       a  U $ [        U [        [        [        45      (       a!  [        U 5      nU" S U R                   5       6 $ [        U [        5      (       GaI  U R                  5       u  p#/ nU(       Ga  UR                  S5      n[        U5      (       a  [        U[        5      (       a  [        US   [        5      (       a  UR                  US   R                  :X  a  UR                  S5      n[        XV5      nUR                  5       u  p[        U	6 nX(-   n[        U5      (       aL  [        U[        5      (       a7  [        US   [        5      (       a  UR                  US   R                  :X  a  M  UR                  U5        U(       a  GM  [        U6 [        U6 -  $ U $ )a  
Simplify an expression that includes products of pauli operators.

Parameters
==========

e : expression
    An expression that contains products of Pauli operators that is
    to be simplified.

Examples
========

>>> from sympy.physics.quantum.pauli import SigmaX, SigmaY
>>> from sympy.physics.quantum.pauli import qsimplify_pauli
>>> sx, sy = SigmaX(), SigmaY()
>>> sx * sy
SigmaX()*SigmaY()
>>> qsimplify_pauli(sx * sy)
I*SigmaZ()
c              3   8   #    U  H  n[        U5      v   M     g 7fr.   )r   ).0args     r!   	<genexpr>"qsimplify_pauli.<locals>.<genexpr>  s     :6C?3''6s   r   )r9  r
   r   r   r	   typer   r   args_cncpoplenr   r"   r=  append)
ru   tcncnc_scurrxyc1nc1s
             r!   r   r   o  sQ   , !X!c3_%%G:166:;;!S

66!9Dr77dK00be[11991

*FF1I,T5**,CyF r77dK00be[11991

* KK b  Awd##Hr$   N)!r@   sympy.core.addr   sympy.core.mulr   sympy.core.numbersr   sympy.core.powerr   sympy.core.singletonr   &sympy.functions.elementary.exponentialr	   sympy.physics.quantumr
   r   r   r   sympy.matricesr   (sympy.functions.special.tensor_functionsr   __all__r   r   r   r   r   r   r   r   r=  r   r*   r$   r!   <module>r\     s            " 6 4 4 . ! C( ,FD[ FDRCD[ CDLCD[ CDLQD QDhWD WDt=D =D@ 2fR4r$   