
    Ed                         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dS )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)d
S )%ComplexFieldz+Complex numbers up to the given precision. CCTF5   c                 "    | j         | j        k    S N)	precision_default_precisionselfs    @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         j        S r   )r   	tolerancer   s    r   r   zComplexField.tolerance(   s    }&&r   Nc                     t          |||d          }| |_        || _        |j        | _        |                     d          | _        |                     d          | _        d S )NFr      )r   _parentr   mpcdtypezeroone)r   r   r   tolcontexts        r   __init__zComplexField.__init__,   sR    D#sE22[
JJqMM	::a==r   c                 l    t          |t                    o| j        |j        k    o| j        |j        k    S r   )
isinstancer   r   r   )r   others     r   __eq__zComplexField.__eq__5   s6    5,// 1~01~0	2r   c                 Z    t          | j        j        | j        | j        | j        f          S r   )hash	__class____name__r$   r   r   r   s    r   __hash__zComplexField.__hash__:   s$    T^,dj$.$.YZ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=   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numberr4   r5   s        r   
from_sympyzComplexField.from_sympyA   si    dh''((**
d> 	Kdn 	K::dD))) !BT!IJJJr   c                 ,    |                      |          S r   r$   r   r7   bases      r   from_ZZzComplexField.from_ZZK       zz'"""r   c                 z    |                      t          |j                            t          |j                  z  S r   r$   int	numeratordenominatorrC   s      r   from_QQzComplexField.from_QQN   /    zz#g/0011C8K4L4LLLr   c                 ,    |                      |          S r   rB   rC   s      r   from_ZZ_pythonzComplexField.from_ZZ_pythonQ   rF   r   c                 F    |                      |j                  |j        z  S r   )r$   rJ   rK   rC   s      r   from_QQ_pythonzComplexField.from_QQ_pythonT   s    zz'+,,w/BBBr   c                 F    |                      t          |                    S r   )r$   rI   rC   s      r   from_ZZ_gmpyzComplexField.from_ZZ_gmpyW   s    zz#g,,'''r   c                 z    |                      t          |j                            t          |j                  z  S r   rH   rC   s      r   from_QQ_gmpyzComplexField.from_QQ_gmpyZ   rM   r   c                 v    |                      t          |j                  t          |j                            S r   )r$   rI   xyrC   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   )rW   rX   r$   rI   rJ   rK   )r   r7   rD   rW   rX   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   )r@   r8   r;   r   rC   s      r   from_AlgebraicFieldz ComplexField.from_AlgebraicFieldf   s0    t}}W55;;DHEEFFFr   c                 ,    |                      |          S r   rB   rC   s      r   from_RealFieldzComplexField.from_RealFieldi   rF   r   c                 <    | |k    r|S |                      |          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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OOr   c                     dS z.Returns ``False`` for any ``ComplexElement``. F r6   s     r   is_negativezComplexField.is_negativez       ur   c                     dS rh   ri   r6   s     r   is_positivezComplexField.is_positive~   rk   r   c                     dS rh   ri   r6   s     r   is_nonnegativezComplexField.is_nonnegative   rk   r   c                     dS 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	    xr   c                     ||z  S )z Returns LCM of ``a`` and ``b``. ri   rs   s      r   lcmzComplexField.lcm   s    s
r   c                 :    | 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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      sU       55
C""OeHLNO9 9 X9 " " X" ! ! X! ' ' X' /Dd ! ! ! !2 2 2
[ [ [O O OK K K# # #M M M# # #C C C( ( (M M M: : :F F FG G G# # #' ' 'H H HP P P            7 7 7 7 7 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      s    5 5 ( ' ' ' ' ' ' ' E E E E E E + + + + + + 4 4 4 4 4 4 9 9 9 9 9 9 > > > > > > > > " " " " " "G7 G7 G7 G7 G75,l G7 G7 G7T \^^r   