
    Ed                         d 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 e G d	 d
eee                      Z e            ZdS )z,Implementation of :class:`RealField` class.     )Float)Field)SimpleDomain)CharacteristicZero)	MPContext)CoercionFailed)publicc                      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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dZ d Z!d Z"d Z#d Z$d dZ%d
S )!	RealFieldz(Real numbers up to the given precision. RRTF5   c                 "    | j         | j        k    S N)	precision_default_precisionselfs    =lib/python3.11/site-packages/sympy/polys/domains/realfield.pyhas_default_precisionzRealField.has_default_precision   s    ~!888    c                     | j         j        S r   )_contextprecr   s    r   r   zRealField.precision!   s    }!!r   c                     | j         j        S r   )r   dpsr   s    r   r   zRealField.dps%   s    }  r   c                     | j         j        S r   )r   	tolerancer   s    r   r   zRealField.tolerance)   s    }&&r   Nc                     t          |||d          }| |_        || _        |j        | _        |                     d          | _        |                     d          | _        d S )NTr      )r   _parentr   mpfdtypezeroone)r   r   r   tolcontexts        r   __init__zRealField.__init__-   sR    D#sD11[
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RealField.__eq__6   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RealField.__hash__;   s$    T^,dj$.$.YZZZr   c                 ,    t          || j                  S )z%Convert ``element`` to SymPy number. )r   r   )r   elements     r   to_sympyzRealField.to_sympy>   s    Wdh'''r   c                     |                     | j                  }|j        r|                     |          S t	          d|z            )z%Convert SymPy's number to ``dtype``. )nzexpected real number, got %s)evalfr   	is_Numberr"   r   )r   exprnumbers      r   
from_sympyzRealField.from_sympyB   sI    dh'' 	H::f%%% !?$!FGGGr   c                 ,    |                      |          S r   r"   r   r2   bases      r   from_ZZzRealField.from_ZZK       zz'"""r   c                 ,    |                      |          S r   r<   r=   s      r   from_ZZ_pythonzRealField.from_ZZ_pythonN   r@   r   c                 F    |                      |j                  |j        z  S r   r"   	numeratordenominatorr=   s      r   from_QQzRealField.from_QQQ       zz'+,,w/BBBr   c                 F    |                      |j                  |j        z  S r   rD   r=   s      r   from_QQ_pythonzRealField.from_QQ_pythonT   rH   r   c                 F    |                      t          |                    S r   )r"   intr=   s      r   from_ZZ_gmpyzRealField.from_ZZ_gmpyW   s    zz#g,,'''r   c                 z    |                      t          |j                            t          |j                  z  S r   )r"   rL   rE   rF   r=   s      r   from_QQ_gmpyzRealField.from_QQ_gmpyZ   s/    zz#g/0011C8K4L4LLLr   c                     |                      |                    |                              | j                            S r   )r:   r3   r6   r   r=   s      r   from_AlgebraicFieldzRealField.from_AlgebraicField]   s0    t}}W55;;DHEEFFFr   c                 <    | |k    r|S |                      |          S r   r<   r=   s      r   from_RealFieldzRealField.from_RealField`   s%    4< 	'N::g&&&r   c                 H    |j         s|                     |j                  S d S r   )imagr"   realr=   s      r   from_ComplexFieldzRealField.from_ComplexFieldf   s*    | 	,::gl+++	, 	,r   c                 8    | j                             ||          S )z*Convert a real number to rational number. )r   to_rational)r   r2   limits      r   rY   zRealField.to_rationalj   s    }((%888r   c                     | S )z)Returns a ring associated with ``self``.  r   s    r   get_ringzRealField.get_ringn   s    r   c                     ddl m} |S )z2Returns an exact domain associated with ``self``. r   )QQ)sympy.polys.domainsr_   )r   r_   s     r   	get_exactzRealField.get_exactr   s    ******	r   c                     | j         S )z Returns GCD of ``a`` and ``b``. )r$   r   abs      r   gcdzRealField.gcdw   s	    xr   c                     ||z  S )z Returns LCM of ``a`` and ``b``. r\   rc   s      r   lcmzRealField.lcm{   s    s
r   c                 :    | j                             |||          S )z+Check if ``a`` and ``b`` are almost equal. )r   almosteq)r   rd   re   r   s       r   rj   zRealField.almosteq   s    }%%aI666r   )Tr   )&r/   
__module____qualname____doc__repis_RealFieldis_RRis_Exactis_Numericalis_PIDhas_assoc_Ringhas_assoc_Fieldr   propertyr   r   r   r   r'   r+   r0   r3   r:   r?   rB   rG   rJ   rM   rO   rQ   rS   rW   rY   r]   ra   rf   rh   rj   r\   r   r   r   r      s       22
CL5HLFNO9 9 X9 " " X" ! ! X! ' ' X' /Dd ! ! ! !2 2 2
[ [ [( ( (H H H# # ## # #C C CC C C( ( (M M MG G G' ' ', , ,9 9 9 9    
    7 7 7 7 7 7r   r   N)rm   sympy.core.numbersr   sympy.polys.domains.fieldr    sympy.polys.domains.simpledomainr   &sympy.polys.domains.characteristiczeror   sympy.polys.domains.mpelementsr   sympy.polys.polyerrorsr   sympy.utilitiesr	   r   r   r\   r   r   <module>r~      s    2 2 % $ $ $ $ $ + + + + + + 9 9 9 9 9 9 E E E E E E 4 4 4 4 4 4 1 1 1 1 1 1 " " " " " "t7 t7 t7 t7 t7)< t7 t7 t7n Y[[r   