
    MZd                         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y)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%y
)!	RealFieldz(Real numbers up to the given precision. RRTF5   c                 4    | j                   | j                  k(  S N)	precision_default_precisionselfs    ?/usr/lib/python3/dist-packages/sympy/polys/domains/realfield.pyhas_default_precisionzRealField.has_default_precision   s    ~~!8!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                  | _        | j	                  d      | _        | j	                  d      | _        y )NTr      )r   _parentr   mpfdtypezeroone)r   r   r   tolcontexts        r   __init__zRealField.__init__-   sI    D#sD1[[
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RealField.__eq__6   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RealField.__hash__;   s,    T^^,,djj$..$..YZZr   c                 .    t        || j                        S )z%Convert ``element`` to SymPy number. )r   r   )r   elements     r   to_sympyzRealField.to_sympy>   s    Wdhh''r   c                     |j                  | j                        }|j                  r| j                  |      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   s?    dhh'::f%% !?$!FGGr   c                 $    | j                  |      S r   r"   r   r2   bases      r   from_ZZzRealField.from_ZZK       zz'""r   c                 $    | j                  |      S r   r<   r=   s      r   from_ZZ_pythonzRealField.from_ZZ_pythonN   r@   r   c                 R    | j                  |j                        |j                  z  S r   r"   	numeratordenominatorr=   s      r   from_QQzRealField.from_QQQ   "    zz'++,w/B/BBBr   c                 R    | j                  |j                        |j                  z  S r   rD   r=   s      r   from_QQ_pythonzRealField.from_QQ_pythonT   rH   r   c                 6    | j                  t        |            S r   )r"   intr=   s      r   from_ZZ_gmpyzRealField.from_ZZ_gmpyW   s    zz#g,''r   c                 v    | j                  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1C8K8K4LLLr   c                 t    | j                  |j                  |      j                  | j                              S r   )r:   r3   r6   r   r=   s      r   from_AlgebraicFieldzRealField.from_AlgebraicField]   s)    t}}W5;;DHHEFFr   c                 2    | |k(  r|S | j                  |      S r   r<   r=   s      r   from_RealFieldzRealField.from_RealField`   s    4<N::g&&r   c                 R    |j                   s| j                  |j                        S y r   )imagr"   realr=   s      r   from_ComplexFieldzRealField.from_ComplexFieldf   s!    ||::gll++ r   c                 :    | j                   j                  ||      S )z*Convert a real number to rational number. )r   to_rational)r   r2   limits      r   rY   zRealField.to_rationalj   s    }}((%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    xxr   c                     ||z  S )z Returns LCM of ``a`` and ``b``. r\   rc   s      r   lcmzRealField.lcm{   s    s
r   c                 <    | j                   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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
CL5HLFNO9 9 " " ! ! ' ' /Dd !2
[(H##CC(MG',9
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~      sJ    2 % + 9 E 4 1 "t7)< t7 t7n [r   