Ë
    täi8  ã                   ó²   — 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 ddlmZ dd	lmZ dd
lmZ dd„Ze G d„ deee	«      «       Z e«       Zy)z,Implementation of :class:`RealField` class. é    )Ú
SYMPY_INTSÚMPQ)ÚFloat)ÚField)ÚSimpleDomain)ÚCharacteristicZero)ÚCoercionFailed)Úpublic)Ú	MPContext)Úto_rationalc                 ó  — t        | j                  «      \  }}t        |«      }t        |«      }|r||k  r||fS d\  }}}}||}
}		 |	|
z  }|||z  z   }||kD  rn|||||z  z   |f\  }}}}|
|	||
z  z
  }
}	Œ/||z
  |z  }t        ||«      }t        |||z  z   |||z  z   «      }t        ||«      }|r|s||fS t	        ||z
  «      t	        ||z
  «      k  r|j
                  |j                  fS |j
                  |j                  fS )N)r   é   r   r   )Ú_mpmath_to_rationalÚ_mpf_Úintr   ÚabsÚ	numeratorÚdenominator)ÚsÚ	max_denomÚlimitÚpÚqÚp0Úq0Úp1Úq1ÚnÚdÚaÚq2ÚkÚnumberÚbound1Úbound2s                    úl/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/sympy/polys/domains/realfield.pyr   r      s?  € ä˜qŸw™wÓ'�D€A€qô
 	ˆA‹€AÜˆA‹€Aá�A˜’NØ�!ˆtˆà�N€BˆˆB�Øˆa€q€Aà
Øˆq‰DˆØ�!�B‘$‰YˆØ�	Š>ØØ˜R  a¨¡d¡¨BÐ.‰ˆˆB��BØ�!�a˜‘c‘'ˆ1ˆð ð 
�R‰˜"Ñ€Aä��A‹Y€FÜ��a˜‘d‘˜B  2¡™IÓ&€FÜ��R‹[€Fá™Ø�!ˆtˆÜ	ˆV�f‰_Ó	¤ V¨f¡_Ó!5Ò	5Ø×Ñ ×!3Ñ!3Ð3Ð3à×Ñ ×!3Ñ!3Ð3Ð3ó    c                   ó  — e Zd ZdZdZdxZZd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„ 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„ Z%d„ Z&d%d „Z'd!„ Z(d"„ Z)y
)&Ú	RealFieldz(Real numbers up to the given precision. ÚRRTFé5   c                 ó4   — | j                   | j                  k(  S ©N)Ú	precisionÚ_default_precision©Úselfs    r&   Úhas_default_precisionzRealField.has_default_precisionG   s   € à�~‰~ ×!8Ñ!8Ñ8Ð8r'   c                 ó.   — | j                   j                  S r-   )Ú_contextÚprecr0   s    r&   r.   zRealField.precisionK   s   € à�}‰}×!Ñ!Ð!r'   c                 ó.   — | j                   j                  S r-   )r4   Údpsr0   s    r&   r7   zRealField.dpsO   s   € à�}‰}× Ñ Ð r'   c                 ó   — | j                   S r-   )Ú
_tolerancer0   s    r&   Ú	tolerancezRealField.toleranceS   s   € à�‰Ðr'   Nc                 óˆ  — t        «       }|€|€| j                  |_        n|€||_        n|€||_        nt	        d«      ‚|| _        |j                  | _        | j                  d«      | _	        | j                  d«      | _
        t        d|j                  z  dz  d«      | _        | j                  | j                  z  | _        y )NzCannot set both prec and dpsr   r   é   éÈ   éc   )r   r/   r5   r7   Ú	TypeErrorr4   ÚmpfÚ_dtypeÚdtypeÚzeroÚoneÚmaxÚ
_max_denomr9   )r1   r5   r7   ÚtolÚcontexts        r&   Ú__init__zRealField.__init__W   s¦   € ô “+ˆàˆ<˜C˜KØ×2Ñ2ˆG�LØˆ[ØˆG�LØˆ\ØˆG�KäÐ:Ó;Ð;àˆŒà—k‘kˆŒØ—J‘J˜q“MˆŒ	Ø—:‘:˜a“=ˆŒô ˜a §¡™o°Ñ4°bÓ9ˆŒØŸ(™( T§_¡_Ñ4ˆ�r'   c                 ó   — | j                   S r-   )rA   r0   s    r&   ÚtpzRealField.tpq   s   € ð �{‰{Ðr'   c                 óZ   — t        |t        «      rt        |«      }| j                  |«      S r-   )Ú
isinstancer   r   rA   )r1   Úargs     r&   rB   zRealField.dtypey   s&   € ô �cœ:Ô&Ü�c“(ˆCØ�{‰{˜3ÓÐr'   c                 óX   — t        |t        «      xr | j                  |j                  k(  S r-   )rM   r)   r.   )r1   Úothers     r&   Ú__eq__zRealField.__eq__�   s!   € Ü˜%¤Ó+ÒQ°·±À%Ç/Á/Ñ0QÐQr'   c                 ón   — t        | j                  j                  | j                  | j                  f«      S r-   )ÚhashÚ	__class__Ú__name__rA   r.   r0   s    r&   Ú__hash__zRealField.__hash__„   s&   € Ü�T—^‘^×,Ñ,¨d¯k©k¸4¿>¹>ÐJÓKÐKr'   c                 ó.   — t        || j                  «      S )z%Convert ``element`` to SymPy number. )r   r7   )r1   Úelements     r&   Úto_sympyzRealField.to_sympy‡   s   € ä�W˜dŸh™hÓ'Ð'r'   c                 ó�   — |j                  | j                  ¬«      }|j                  r| j                  |«      S t	        d|z  «      ‚)z%Convert SymPy's number to ``dtype``. )r   zexpected real number, got %s)Úevalfr7   Ú	is_NumberrB   r	   )r1   Úexprr#   s      r&   Ú
from_sympyzRealField.from_sympy‹   s?   € à—‘˜dŸh™h�Ó'ˆà×ÒØ—:‘:˜fÓ%Ð%ä Ð!?À$Ñ!FÓGÐGr'   c                 ó$   — | j                  |«      S r-   ©rB   ©r1   rX   Úbases      r&   Úfrom_ZZzRealField.from_ZZ”   ó   € Ø�z‰z˜'Ó"Ð"r'   c                 ó$   — | j                  |«      S r-   r`   ra   s      r&   Úfrom_ZZ_pythonzRealField.from_ZZ_python—   rd   r'   c                 ó6   — | j                  t        |«      «      S r-   )rB   r   ra   s      r&   Úfrom_ZZ_gmpyzRealField.from_ZZ_gmpyš   s   € Ø�z‰zœ#˜g›,Ó'Ð'r'   c                 ód   — | j                  |j                  «      t        |j                  «      z  S r-   ©rB   r   r   r   ra   s      r&   Úfrom_QQzRealField.from_QQ¡   ó'   € Ø�z‰z˜'×+Ñ+Ó,¬s°7×3FÑ3FÓ/GÑGÐGr'   c                 ód   — | j                  |j                  «      t        |j                  «      z  S r-   rj   ra   s      r&   Úfrom_QQ_pythonzRealField.from_QQ_python¤   rl   r'   c                 óv   — | j                  t        |j                  «      «      t        |j                  «      z  S r-   )rB   r   r   r   ra   s      r&   Úfrom_QQ_gmpyzRealField.from_QQ_gmpy§   s,   € Ø�z‰zœ#˜g×/Ñ/Ó0Ó1´C¸×8KÑ8KÓ4LÑLÐLr'   c                 ót   — | j                  |j                  |«      j                  | j                  «      «      S r-   )r^   rY   r[   r7   ra   s      r&   Úfrom_AlgebraicFieldzRealField.from_AlgebraicFieldª   s)   € Ø�‰˜tŸ}™}¨WÓ5×;Ñ;¸D¿H¹HÓEÓFÐFr'   c                 ó$   — | j                  |«      S r-   r`   ra   s      r&   Úfrom_RealFieldzRealField.from_RealField­   rd   r'   c                 óR   — |j                   s| j                  |j                  «      S y r-   )ÚimagrB   Úrealra   s      r&   Úfrom_ComplexFieldzRealField.from_ComplexField°   s!   € Ø�|Š|Ø—:‘:˜gŸl™lÓ+Ð+ð r'   c                 ó2   — t        || j                  |¬«      S )z*Convert a real number to rational number. )r   )r   rF   )r1   rX   r   s      r&   r   zRealField.to_rational´   s   € ä˜7 D§O¡O¸5ÔAÐAr'   c                 ó   — | S )z)Returns a ring associated with ``self``. © r0   s    r&   Úget_ringzRealField.get_ring¸   s   € àˆr'   c                 ó   — ddl m} |S )z2Returns an exact domain associated with ``self``. r   )ÚQQ)Úsympy.polys.domainsr~   )r1   r~   s     r&   Ú	get_exactzRealField.get_exact¼   s
   € å*Øˆ	r'   c                 ó   — | j                   S )z Returns GCD of ``a`` and ``b``. )rD   ©r1   r    Úbs      r&   ÚgcdzRealField.gcdÁ   s   € à�x‰xˆr'   c                 ó   — ||z  S )z Returns LCM of ``a`` and ``b``. r{   r‚   s      r&   ÚlcmzRealField.lcmÅ   s   € à�‰sˆ
r'   c                 ó<   — | j                   j                  |||«      S )z+Check if ``a`` and ``b`` are almost equal. )r4   Úalmosteq)r1   r    rƒ   r:   s       r&   rˆ   zRealField.almosteqÉ   s   € à�}‰}×%Ñ% a¨¨IÓ6Ð6r'   c                 ó   — |dk\  S )z8Returns ``True`` if ``a >= 0`` and ``False`` otherwise. r   r{   ©r1   r    s     r&   Ú	is_squarezRealField.is_squareÍ   s   € à�A‰vˆr'   c                 ó   — |dk\  r|dz  S dS )zÒNon-negative square root for ``a >= 0`` and ``None`` otherwise.

        Explanation
        ===========
        The square root may be slightly inaccurate due to floating point
        rounding error.
        r   g      à?Nr{   rŠ   s     r&   ÚexsqrtzRealField.exsqrtÑ   s   € ð  š6ˆq�C‰xÐ+ tÐ+r'   )NNN©Tr-   )*rU   Ú
__module__Ú__qualname__Ú__doc__ÚrepÚis_RealFieldÚis_RRÚis_ExactÚis_NumericalÚis_PIDÚhas_assoc_RingÚhas_assoc_Fieldr/   Úpropertyr2   r.   r7   r:   rI   rK   rB   rQ   rV   rY   r^   rc   rf   rh   rk   rn   rp   rr   rt   rx   r   r|   r€   r„   r†   rˆ   r‹   r�   r{   r'   r&   r)   r)   6   s  „ á2à
€CàÐ€L�5à€HØ€LØ€Fà€NØ€OàÐàñ9ó ð9ð ñ"ó ð"ð ñ!ó ð!ð ñó ðó5ð4 ñó ðò òRòLò(òHò#ò#ò(òHòHòMòGò#ò,óBòòò
òó7òó,r'   r)   NrŽ   )r‘   Úsympy.external.gmpyr   r   Úsympy.core.numbersr   Úsympy.polys.domains.fieldr   Ú sympy.polys.domains.simpledomainr   Ú&sympy.polys.domains.characteristiczeror   Úsympy.polys.polyerrorsr	   Úsympy.utilitiesr
   Úmpmathr   Úmpmath.libmpr   r   r)   r*   r{   r'   r&   Ú<module>r¤      sX   ðÙ 2÷ 0Ý $Ý +Ý 9Ý EÝ 1Ý "å Ý ;ó#4ðL ôb,�Ð)¨<ó b,ó ðb,ñJ ƒ[�r'   