
    \h                         S r SSKJr  SSKJr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  SS
KJr  \ " S S\	\\5      5       r\" 5       rg)z/Implementation of :class:`ComplexField` class.     )
SYMPY_INTS)FloatI)CharacteristicZero)FieldQQ_I)SimpleDomain)DomainErrorCoercionFailed)public)	MPContextc                   <   \ rS rSrSrSrS=rrSrSr	Sr
SrSr\S 5       r\S 5       r\S	 5       r\S
 5       rS*S jr\S 5       rS+S j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'S" r(S# r)S$ r*S% r+S,S& jr,S' r-S( r.S)r/g)-ComplexField   z+Complex numbers up to the given precision. CCTF5   c                 4    U R                   U R                  :H  $ N)	precision_default_precisionselfs    X/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/domains/complexfield.pyhas_default_precision"ComplexField.has_default_precision    s    ~~!8!888    c                 .    U R                   R                  $ r   )_contextprecr   s    r   r   ComplexField.precision$   s    }}!!!r   c                 .    U R                   R                  $ r   )r   dpsr   s    r   r#   ComplexField.dps(   s    }}   r   c                     U R                   $ r   )
_tolerancer   s    r   	toleranceComplexField.tolerance,   s    r   Nc                    [        5       nUc  Uc  U R                  Ul        OUc  Xl        OUc  X$l        O[	        S5      eX@l        UR                  U l        U R                  S5      U l	        U R                  S5      U l
        [        SUR                  -  S-  S5      U l        U R                  U R                  -  U l        g )NzCannot set both prec and dpsr            c   )r   r   r    r#   	TypeErrorr   mpc_dtypedtypezeroonemax
_max_denomr&   )r   r    r#   tolcontexts        r   __init__ComplexField.__init__0   s     +<CK22GL[L\K:;;kkJJqM	::a= ao4b9((T__4r   c                     U R                   $ r   )r0   r   s    r   tpComplexField.tpI   s     {{r   c                     [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        U5      nU R                  X5      $ r   )
isinstancer   intr0   )r   xys      r   r1   ComplexField.dtypeQ   s?     a$$AAa$$AA{{1  r   c                 b    [        U[        5      =(       a    U R                  UR                  :H  $ r   )r>   r   r   )r   others     r   __eq__ComplexField.__eq__[   s!    %.T4>>U__3TTr   c                 n    [        U R                  R                  U R                  U R                  45      $ r   )hash	__class____name__r0   r   r   s    r   __hash__ComplexField.__hash__^   s&    T^^,,dkk4>>JKKr   c                     [        UR                  U R                  5      [        [        UR                  U R                  5      -  -   $ )z%Convert ``element`` to SymPy number. )r   realr#   r   imagr   elements     r   to_sympyComplexField.to_sympya   s0    W\\488,qw||TXX1N/NNNr   c                     UR                  U R                  S9nUR                  5       u  p4UR                  (       a"  UR                  (       a  U R	                  X45      $ [        SU-  5      e)z%Convert SymPy's number to ``dtype``. )nzexpected complex number, got %s)evalfr#   as_real_imag	is_Numberr1   r   )r   exprnumberrN   rO   s        r   
from_sympyComplexField.from_sympye   sS    dhh'((*
>>dnn::d)) !BT!IJJr   c                 $    U R                  U5      $ r   r1   r   rQ   bases      r   from_ZZComplexField.from_ZZo       zz'""r   c                 6    U R                  [        U5      5      $ r   )r1   r?   r_   s      r   from_ZZ_gmpyComplexField.from_ZZ_gmpyr   s    zz#g,''r   c                 $    U R                  U5      $ r   r^   r_   s      r   from_ZZ_pythonComplexField.from_ZZ_pythonu   rc   r   c                 v    U R                  [        UR                  5      5      [        UR                  5      -  $ r   r1   r?   	numeratordenominatorr_   s      r   from_QQComplexField.from_QQx   ,    zz#g//01C8K8K4LLLr   c                 R    U R                  UR                  5      UR                  -  $ r   )r1   rl   rm   r_   s      r   from_QQ_pythonComplexField.from_QQ_python{   s"    zz'++,w/B/BBBr   c                 v    U R                  [        UR                  5      5      [        UR                  5      -  $ r   rk   r_   s      r   from_QQ_gmpyComplexField.from_QQ_gmpy~   rp   r   c                 r    U R                  [        UR                  5      [        UR                  5      5      $ r   )r1   r?   r@   rA   r_   s      r   from_GaussianIntegerRing%ComplexField.from_GaussianIntegerRing   s#    zz#gii.#gii.99r   c                    UR                   nUR                  nU R                  [        UR                  5      5      [        UR
                  5      -  U R                  S[        UR                  5      5      [        UR
                  5      -  -   $ )Nr   )r@   rA   r1   r?   rl   rm   )r   rQ   r`   r@   rA   s        r   from_GaussianRationalField'ComplexField.from_GaussianRationalField   sh    IIII

3q{{+,s1==/AA

1c!++./#amm2DDE 	Fr   c                 t    U R                  UR                  U5      R                  U R                  5      5      $ r   )r[   rR   rV   r#   r_   s      r   from_AlgebraicField ComplexField.from_AlgebraicField   s)    t}}W5;;DHHEFFr   c                 $    U R                  U5      $ r   r^   r_   s      r   from_RealFieldComplexField.from_RealField   rc   r   c                 $    U R                  U5      $ r   r^   r_   s      r   from_ComplexFieldComplexField.from_ComplexField   rc   r   c                     [        SU -  5      e)z)Returns a ring associated with ``self``. z#there is no ring associated with %s)r   r   s    r   get_ringComplexField.get_ring   s    ?$FGGr   c                     [         $ )z2Returns an exact domain associated with ``self``. r   r   s    r   	get_exactComplexField.get_exact   s    r   c                     gz.Returns ``False`` for any ``ComplexElement``. F rP   s     r   is_negativeComplexField.is_negative       r   c                     gr   r   rP   s     r   is_positiveComplexField.is_positive   r   r   c                     gr   r   rP   s     r   is_nonnegativeComplexField.is_nonnegative   r   r   c                     gr   r   rP   s     r   is_nonpositiveComplexField.is_nonpositive   r   r   c                     U R                   $ )z Returns GCD of ``a`` and ``b``. )r3   r   abs      r   gcdComplexField.gcd   s    xxr   c                 
    X-  $ )z Returns LCM of ``a`` and ``b``. r   r   s      r   lcmComplexField.lcm   s	    s
r   c                 :    U R                   R                  XU5      $ )z+Check if ``a`` and ``b`` are almost equal. )r   almosteq)r   r   r   r'   s       r   r   ComplexField.almosteq   s    }}%%aI66r   c                     g)zAReturns ``True``. Every complex number has a complex square root.Tr   r   r   s     r   	is_squareComplexField.is_square   s    r   c                     US-  $ )zReturns the principal complex square root of ``a``.

Explanation
===========
The argument of the principal square root is always within
$(-\frac{\pi}{2}, \frac{\pi}{2}]$. The square root may be
slightly inaccurate due to floating point rounding error.
g      ?r   r   s     r   exsqrtComplexField.exsqrt   s     Cxr   )r   r0   r5   r&   r3   r2   )NNN)r   r   )0rJ   
__module____qualname____firstlineno____doc__repis_ComplexFieldis_CCis_Exactis_Numericalhas_assoc_Ringhas_assoc_Fieldr   propertyr   r   r#   r'   r8   r;   r1   rE   rK   rR   r[   ra   re   rh   rn   rr   ru   rx   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r   r   r   r   r      s&   5
C""OeHLNO9 9 " " ! !  52  !ULOK#(#MCM:FG##H7	r   r   N)r   sympy.external.gmpyr   sympy.core.numbersr   r   &sympy.polys.domains.characteristiczeror   sympy.polys.domains.fieldr   #sympy.polys.domains.gaussiandomainsr	    sympy.polys.domains.simpledomainr
   sympy.polys.polyerrorsr   r   sympy.utilitiesr   mpmathr   r   r   r   r   r   <module>r      sR    5 + ' E + 4 9 > "  s5,l s sj ^r   