
    MZd                         d 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 e G d	 d
eee             Z e       Zy)z/Implementation of :class:`ComplexField` class.     )FloatI)CharacteristicZero)Field)	MPContext)SimpleDomain)DomainErrorCoercionFailed)publicc                      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ed
d
f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)y
)%ComplexFieldz+Complex numbers up to the given precision. CCTF5   c                 4    | j                   | j                  k(  S N)	precision_default_precisionselfs    B/usr/lib/python3/dist-packages/sympy/polys/domains/complexfield.pyhas_default_precisionz"ComplexField.has_default_precision   s    ~~!8!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                   j                  S r   )r   	tolerancer   s    r   r   zComplexField.tolerance(   s    }}&&&r   Nc                     t        |||d      }| |_        || _        |j                  | _        | j	                  d      | _        | j	                  d      | _        y )NFr      )r   _parentr   mpcdtypezeroone)r   r   r   tolcontexts        r   __init__zComplexField.__init__,   sI    D#sE2[[
JJqM	::a=r   c                     t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )
isinstancer   r   r   )r   others     r   __eq__zComplexField.__eq__5   s;    5,/ 1~~01~~0	2r   c                     t        | j                  j                  | j                  | j                  | j
                  f      S r   )hash	__class____name__r$   r   r   r   s    r   __hash__zComplexField.__hash__:   s,    T^^,,djj$..$..YZZr   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_sympy=   s0    W\\488,qw||TXX1N/NNNr   c                     |j                  | j                        }|j                         \  }}|j                  r|j                  r| j	                  ||      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numberr4   r5   s        r   
from_sympyzComplexField.from_sympyA   sW    dhh'((*
d>>dnn::dD)) !BT!IJJr   c                 $    | j                  |      S r   r$   r   r7   bases      r   from_ZZzComplexField.from_ZZK       zz'""r   c                 v    | j                  t        |j                              t        |j                        z  S r   r$   int	numeratordenominatorrC   s      r   from_QQzComplexField.from_QQN   ,    zz#g//01C8K8K4LLLr   c                 $    | j                  |      S r   rB   rC   s      r   from_ZZ_pythonzComplexField.from_ZZ_pythonQ   rF   r   c                 R    | j                  |j                        |j                  z  S r   )r$   rJ   rK   rC   s      r   from_QQ_pythonzComplexField.from_QQ_pythonT   s"    zz'++,w/B/BBBr   c                 6    | j                  t        |            S r   )r$   rI   rC   s      r   from_ZZ_gmpyzComplexField.from_ZZ_gmpyW   s    zz#g,''r   c                 v    | j                  t        |j                              t        |j                        z  S r   rH   rC   s      r   from_QQ_gmpyzComplexField.from_QQ_gmpyZ   rM   r   c                 r    | j                  t        |j                        t        |j                              S r   )r$   rI   xyrC   s      r   from_GaussianIntegerRingz%ComplexField.from_GaussianIntegerRing]   s#    zz#gii.#gii.99r   c                    |j                   }|j                  }| j                  t        |j                              t        |j
                        z  | j                  dt        |j                              t        |j
                        z  z   S )Nr   )rW   rX   r$   rI   rJ   rK   )r   r7   rD   rW   rX   s        r   from_GaussianRationalFieldz'ComplexField.from_GaussianRationalField`   sh    IIII

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

1c!++./#amm2DDE 	Fr   c                 t    | j                  |j                  |      j                  | j                              S r   )r@   r8   r;   r   rC   s      r   from_AlgebraicFieldz ComplexField.from_AlgebraicFieldf   s)    t}}W5;;DHHEFFr   c                 $    | j                  |      S r   rB   rC   s      r   from_RealFieldzComplexField.from_RealFieldi   rF   r   c                 2    | |k(  r|S | j                  |      S r   rB   rC   s      r   from_ComplexFieldzComplexField.from_ComplexFieldl   s    4<N::g&&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_ringr   s    ?$FGGr   c                     t        d| z        )z2Returns an exact domain associated with ``self``. z+there is no exact domain associated with %src   r   s    r   	get_exactzComplexField.get_exactv   s    G$NOOr   c                      yz.Returns ``False`` for any ``ComplexElement``. F r6   s     r   is_negativezComplexField.is_negativez       r   c                      yrh   ri   r6   s     r   is_positivezComplexField.is_positive~   rk   r   c                      yrh   ri   r6   s     r   is_nonnegativezComplexField.is_nonnegative   rk   r   c                      yrh   ri   r6   s     r   is_nonpositivezComplexField.is_nonpositive   rk   r   c                     | j                   S )z Returns GCD of ``a`` and ``b``. )r&   r   abs      r   gcdzComplexField.gcd   s    xxr   c                     ||z  S )z Returns LCM of ``a`` and ``b``. ri   rs   s      r   lcmzComplexField.lcm   s    s
r   c                 <    | j                   j                  |||      S )z+Check if ``a`` and ``b`` are almost equal. )r   almosteq)r   rt   ru   r   s       r   rz   zComplexField.almosteq   s    }}%%aI66r   r   )*r1   
__module____qualname____doc__repis_ComplexFieldis_CCis_Exactis_Numericalhas_assoc_Ringhas_assoc_Fieldr   propertyr   r   r   r   r)   r-   r2   r8   r@   rE   rL   rO   rQ   rS   rU   rY   r[   r]   r_   ra   rd   rf   rj   rm   ro   rq   rv   rx   rz   ri   r   r   r   r      s   5
C""OeHLNO9 9 " " ! ! ' ' /Dd !2
[OK#M#C(M:FG#'HP7r   r   N)r}   sympy.core.numbersr   r   &sympy.polys.domains.characteristiczeror   sympy.polys.domains.fieldr   sympy.polys.domains.mpelementsr    sympy.polys.domains.simpledomainr   sympy.polys.polyerrorsr	   r
   sympy.utilitiesr   r   r   ri   r   r   <module>r      sJ    5 ( E + 4 9 > "G75,l G7 G7T ^r   