
    Xh                         d 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 dd
lmZ e G d de	ee                      Z e            ZdS )z/Implementation of :class:`ComplexField` class.     )
SYMPY_INTS)FloatI)CharacteristicZero)FieldQQ_I)SimpleDomain)DomainErrorCoercionFailed)public)	MPContextc                   N   e Zd ZdZdZdxZZdZdZdZ	dZ
dZed             Zed             Zed             Zed	             Zd)dZed             Zd*dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'd# Z(d$ Z)d% Z*d+d&Z+d' Z,d( Z-d
S ),ComplexFieldz+Complex numbers up to the given precision. CCTF5   c                 "    | j         | j        k    S N)	precision_default_precisionselfs    r/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/polys/domains/complexfield.pyhas_default_precisionz"ComplexField.has_default_precision    s    ~!888    c                     | j         j        S r   )_contextprecr   s    r   r   zComplexField.precision$   s    }!!r   c                     | j         j        S r   )r   dpsr   s    r   r    zComplexField.dps(   s    }  r   c                     | j         S r   )
_tolerancer   s    r   	tolerancezComplexField.tolerance,   s
    r   Nc                    t                      }||| j        |_        n#|||_        n|||_        nt	          d          || _        |j        | _        |                     d          | _	        |                     d          | _
        t          d|j        z  dz  d          | _        | j
        | j        z  | _        d S )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__zComplexField.__init__0   s     ++<CK2GLL[GLL\GKK:;;;kJJqMM	::a== ao4b99(T_4r   c                     | j         S r   )r+   r   s    r   tpzComplexField.tpI   s     {r   r   c                     t          |t                    rt          |          }t          |t                    rt          |          }|                     ||          S r   )
isinstancer   intr+   )r   xys      r   r,   zComplexField.dtypeQ   sR     a$$ 	AAa$$ 	AA{{1a   r   c                 L    t          |t                    o| j        |j        k    S r   )r7   r   r   )r   others     r   __eq__zComplexField.__eq__[   s     %..T4>U_3TTr   c                 N    t          | j        j        | j        | j        f          S r   )hash	__class____name__r+   r   r   s    r   __hash__zComplexField.__hash__^   s     T^,dk4>JKKKr   c                 |    t          |j        | j                  t          t          |j        | j                  z  z   S )z%Convert ``element`` to SymPy number. )r   realr    r   imagr   elements     r   to_sympyzComplexField.to_sympya   s.    W\48,,qw|TX1N1N/NNNr   c                     |                     | j                  }|                                \  }}|j        r|j        r|                     ||          S t          d|z            )z%Convert SymPy's number to ``dtype``. )nzexpected complex number, got %s)evalfr    as_real_imag	is_Numberr,   r   )r   exprnumberrD   rE   s        r   
from_sympyzComplexField.from_sympye   si    dh''((**
d> 	Kdn 	K::dD))) !BT!IJJJr   c                 ,    |                      |          S r   r,   r   rG   bases      r   from_ZZzComplexField.from_ZZo       zz'"""r   c                 F    |                      t          |                    S r   )r,   r8   rS   s      r   from_ZZ_gmpyzComplexField.from_ZZ_gmpyr   s    zz#g,,'''r   c                 ,    |                      |          S r   rR   rS   s      r   from_ZZ_pythonzComplexField.from_ZZ_pythonu   rV   r   c                 z    |                      t          |j                            t          |j                  z  S r   r,   r8   	numeratordenominatorrS   s      r   from_QQzComplexField.from_QQx   /    zz#g/0011C8K4L4LLLr   c                 F    |                      |j                  |j        z  S r   )r,   r]   r^   rS   s      r   from_QQ_pythonzComplexField.from_QQ_python{   s    zz'+,,w/BBBr   c                 z    |                      t          |j                            t          |j                  z  S r   r\   rS   s      r   from_QQ_gmpyzComplexField.from_QQ_gmpy~   r`   r   c                 v    |                      t          |j                  t          |j                            S r   )r,   r8   r9   r:   rS   s      r   from_GaussianIntegerRingz%ComplexField.from_GaussianIntegerRing   s&    zz#gi..#gi..999r   c                    |j         }|j        }|                     t          |j                            t          |j                  z  |                     dt          |j                            t          |j                  z  z   S )Nr   )r9   r:   r,   r8   r]   r^   )r   rG   rT   r9   r:   s        r   from_GaussianRationalFieldz'ComplexField.from_GaussianRationalField   sn    II

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

1c!+..//#am2D2DDE 	Fr   c                     |                      |                    |                              | j                            S r   )rP   rH   rK   r    rS   s      r   from_AlgebraicFieldz ComplexField.from_AlgebraicField   s0    t}}W55;;DHEEFFFr   c                 ,    |                      |          S r   rR   rS   s      r   from_RealFieldzComplexField.from_RealField   rV   r   c                 ,    |                      |          S r   rR   rS   s      r   from_ComplexFieldzComplexField.from_ComplexField   rV   r   c                 &    t          d| z            )z)Returns a ring associated with ``self``. z#there is no ring associated with %s)r   r   s    r   get_ringzComplexField.get_ring   s    ?$FGGGr   c                     t           S )z2Returns an exact domain associated with ``self``. r   r   s    r   	get_exactzComplexField.get_exact   s    r   c                     dS z.Returns ``False`` for any ``ComplexElement``. F rF   s     r   is_negativezComplexField.is_negative       ur   c                     dS rt   ru   rF   s     r   is_positivezComplexField.is_positive   rw   r   c                     dS rt   ru   rF   s     r   is_nonnegativezComplexField.is_nonnegative   rw   r   c                     dS rt   ru   rF   s     r   is_nonpositivezComplexField.is_nonpositive   rw   r   c                     | j         S )z Returns GCD of ``a`` and ``b``. )r.   r   abs      r   gcdzComplexField.gcd   s	    xr   c                     ||z  S )z Returns LCM of ``a`` and ``b``. ru   r   s      r   lcmzComplexField.lcm   s    s
r   c                 :    | j                             |||          S )z+Check if ``a`` and ``b`` are almost equal. )r   almosteq)r   r   r   r#   s       r   r   zComplexField.almosteq   s    }%%aI666r   c                     dS )zAReturns ``True``. Every complex number has a complex square root.Tru   r   r   s     r   	is_squarezComplexField.is_square   s    tr   c                     |dz  S )a,  Returns 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      ?ru   r   s     r   exsqrtzComplexField.exsqrt   s     Cxr   )NNN)r   r   ).rA   
__module____qualname____doc__repis_ComplexFieldis_CCis_Exactis_Numericalhas_assoc_Ringhas_assoc_Fieldr   propertyr   r   r    r#   r3   r5   r,   r=   rB   rH   rP   rU   rX   rZ   r_   rb   rd   rf   rh   rj   rl   rn   rp   rr   rv   ry   r{   r}   r   r   r   r   r   ru   r   r   r   r      s       55
C""OeHLNO9 9 X9 " " X" ! ! X!   X5 5 5 52   X! ! ! !U U UL L LO O OK K K# # #( ( (# # #M M MC C CM M M: : :F F FG G G# # ## # #H H H              7 7 7 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   ru   r   r   <module>r      s   5 5 + * * * * * ' ' ' ' ' ' ' ' E E E E E E + + + + + + 4 4 4 4 4 4 9 9 9 9 9 9 > > > > > > > > " " " " " "       s s s s s5,l s s sj \^^r   