§
    ^²ÅjÒ  ã                   óÂ   — 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 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. é    )Ú
SYMPY_INTS)ÚFloatÚI)ÚCharacteristicZero)ÚField©ÚQQ_I)Ú	MPContext)ÚSimpleDomain)ÚDomainErrorÚCoercionFailed)Úpublicc                   óT  — 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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. ÚCCTFé5   c                 ó"   — | j         | j        k    S ©N)Ú	precisionÚ_default_precision©Úselfs    úQC:\Projects\Historical\venv\Lib\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ÚdtypeÚzeroÚone)r   r   r    ÚtolÚcontexts        r   Ú__init__zComplexField.__init__.   sR   € Ý˜D # s¨EÑ2Ô2ˆØˆŒØˆŒà”kˆŒØ—J’J˜q‘M”MˆŒ	Ø—:’:˜a‘=”=ˆŒˆˆr   c                 ó   — | j         S r   )r'   r   s    r   ÚtpzComplexField.tp7   s   € ð Œ{Ðr   r   c                 ó¾   — t          |t          ¦  «        rt          |¦  «        }t          |t          ¦  «        rt          |¦  «        }|                      ||¦  «        S r   )Ú
isinstancer   Úintr'   )r   ÚxÚys      r   r(   zComplexField.dtype?   sR   € õ �a�Ñ$Ô$ð 	Ý�A‘”ˆAÝ�a�Ñ$Ô$ð 	Ý�A‘”ˆAØ�{Š{˜1˜aÑ Ô Ð r   c                 ól   — t          |t          ¦  «        o| j        |j        k    o| j        |j        k    S r   )r1   r   r   r"   )r   Úothers     r   Ú__eq__zComplexField.__eq__I   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__N   s$   € Ý�T”^Ô,¨d¬k¸4¼>È4Ì>ÐZÑ[Ô[Ð[r   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_sympyQ   s.   € å�W”\ 4¤8Ñ,Ô,­qµ°w´|ÀTÄXÑ1NÔ1NÑ/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Únumberr>   r?   s        r   Ú
from_sympyzComplexField.from_sympyU   si   € à—’˜dœh�Ñ'Ô'ˆØ×(Ò(Ñ*Ô*‰
ˆˆdàŒ>ð 	K˜dœnð 	KØ—:’:˜d DÑ)Ô)Ð)å Ð!BÀTÑ!IÑJÔJÐJr   c                 ó,   — |                       |¦  «        S r   ©r(   ©r   rA   Úbases      r   Úfrom_ZZzComplexField.from_ZZ_   ó   € Ø�zŠz˜'Ñ"Ô"Ð"r   c                 óF   — |                       t          |¦  «        ¦  «        S r   )r(   r2   rM   s      r   Úfrom_ZZ_gmpyzComplexField.from_ZZ_gmpyb   s   € Ø�zŠz�#˜g™,œ,Ñ'Ô'Ð'r   c                 ó,   — |                       |¦  «        S r   rL   rM   s      r   Úfrom_ZZ_pythonzComplexField.from_ZZ_pythone   rP   r   c                 óz   — |                       t          |j        ¦  «        ¦  «        t          |j        ¦  «        z  S r   ©r(   r2   Ú	numeratorÚdenominatorrM   s      r   Úfrom_QQzComplexField.from_QQh   ó/   € Ø�zŠz�#˜gÔ/Ñ0Ô0Ñ1Ô1µC¸Ô8KÑ4LÔ4LÑLÐLr   c                 óF   — |                       |j        ¦  «        |j        z  S r   )r(   rW   rX   rM   s      r   Úfrom_QQ_pythonzComplexField.from_QQ_pythonk   s   € Ø�zŠz˜'Ô+Ñ,Ô,¨wÔ/BÑBÐBr   c                 óz   — |                       t          |j        ¦  «        ¦  «        t          |j        ¦  «        z  S r   rV   rM   s      r   Úfrom_QQ_gmpyzComplexField.from_QQ_gmpyn   rZ   r   c                 óv   — |                       t          |j        ¦  «        t          |j        ¦  «        ¦  «        S r   )r(   r2   r3   r4   rM   s      r   Úfrom_GaussianIntegerRingz%ComplexField.from_GaussianIntegerRingq   s&   € Ø�zŠz�#˜gœi™.œ.­#¨g¬i©.¬.Ñ9Ô9Ð9r   c                 ó  — |j         }|j        }|                      t          |j        ¦  «        ¦  «        t          |j        ¦  «        z  |                      dt          |j        ¦  «        ¦  «        t          |j        ¦  «        z  z   S )Nr   )r3   r4   r(   r2   rW   rX   )r   rA   rN   r3   r4   s        r   Úfrom_GaussianRationalFieldz'ComplexField.from_GaussianRationalFieldt   sn   € ØŒIˆØŒIˆØ—
’
�3˜qœ{Ñ+Ô+Ñ,Ô,­s°1´=Ñ/AÔ/AÑAØ—
’
˜1�c !¤+Ñ.Ô.Ñ/Ô/µ#°a´mÑ2DÔ2DÑDñEð 	Fr   c                 ó‚   — |                       |                     |¦  «                             | j        ¦  «        ¦  «        S r   )rJ   rB   rE   r    rM   s      r   Úfrom_AlgebraicFieldz ComplexField.from_AlgebraicFieldz   s0   € Ø�Š˜tŸ}š}¨WÑ5Ô5×;Ò;¸D¼HÑEÔEÑFÔFÐFr   c                 ó,   — |                       |¦  «        S r   rL   rM   s      r   Úfrom_RealFieldzComplexField.from_RealField}   rP   r   c                 ó<   — | |k    r|S |                       |¦  «        S r   rL   rM   s      r   Úfrom_ComplexFieldzComplexField.from_ComplexField€   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_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© r@   s     r   Úis_negativezComplexField.is_negativeŽ   ó   € àˆur   c                 ó   — dS rn   ro   r@   s     r   Úis_positivezComplexField.is_positive’   rq   r   c                 ó   — dS rn   ro   r@   s     r   Úis_nonnegativezComplexField.is_nonnegative–   rq   r   c                 ó   — dS rn   ro   r@   s     r   Úis_nonpositivezComplexField.is_nonpositiveš   rq   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``. ro   ry   s      r   ÚlcmzComplexField.lcm¢   s   € à�‰sˆ
r   c                 ó:   — | j                              |||¦  «        S )z+Check if ``a`` and ``b`` are almost equal. )r   Úalmosteq)r   rz   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.Tro   ©r   rz   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      à?ro   r‚   s     r   ÚexsqrtzComplexField.exsqrt®   s   € ð �C‰xˆr   )r   r   ).r;   Ú
__module__Ú__qualname__Ú__doc__ÚrepÚis_ComplexFieldÚis_CCÚis_ExactÚis_NumericalÚhas_assoc_RingÚhas_assoc_Fieldr   Úpropertyr   r   r    r"   r-   r/   r(   r7   r<   rB   rJ   rO   rR   rT   rY   r\   r^   r`   rb   rd   rf   rh   rj   rl   rp   rs   ru   rw   r|   r~   r€   rƒ   r…   ro   r   r   r   r      sŸ  € € € € € à5Ð5à
€Cà"Ð"€O�eà€HØ€Là€NØ€OàÐàð9ð 9ñ „Xð9ð ð"ð "ñ „Xð"ð ð!ð !ñ „Xð!ð ð'ð 'ñ „Xð'ð /°D¸dð !ð !ð !ð !ð ðð ñ „Xðð!ð !ð !ð !ð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ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð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.mpelementsr
   Ú sympy.polys.domains.simpledomainr   Úsympy.polys.polyerrorsr   r   Úsympy.utilitiesr   r   r   ro   r   r   ú<module>rš      s  ðØ 5Ð 5ð +Ð *Ð *Ð *Ð *Ð *Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø EÐ EÐ EÐ EÐ EÐ EØ +Ð +Ð +Ð +Ð +Ð +Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø "Ð "Ð "Ð "Ð "Ð "àðhð hð hð hð h�5Ð,¨lñ hô hñ „ðhðT €\�^„^€€€r   