
    sg                         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 dd	lmZ e G d
 dee
e             Z e       Zy)z,Implementation of :class:`RealField` class.     )
SYMPY_INTS)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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. RRTF5   c                 4    | j                   | j                  k(  S N)	precision_default_precisionselfs    P/var/www/html/venv/lib/python3.12/site-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dtypezeroone)r   r   r   tolcontexts        r   __init__zRealField.__init__.   sI    D#sD1kkJJqM	::a=r   c                     | j                   S r   )r#   r   s    r   tpzRealField.tp7   s     {{r   c                 Z    t        |t              rt        |      }| j                  |      S r   )
isinstancer   intr#   )r   args     r   r$   zRealField.dtype?   s&     c:&c(C{{3r   c                     t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )r-   r   r   r   )r   others     r   __eq__zRealField.__eq__G   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__L   s,    T^^,,dkk4>>4>>Z[[r   c                 .    t        || j                        S )z%Convert ``element`` to SymPy number. )r   r   )r   elements     r   to_sympyzRealField.to_sympyO   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_sympyS   s?    dhh'::f%% !?$!FGGr   c                 $    | j                  |      S r   r$   r   r9   bases      r   from_ZZzRealField.from_ZZ\       zz'""r   c                 $    | j                  |      S r   rC   rD   s      r   from_ZZ_pythonzRealField.from_ZZ_python_   rG   r   c                 6    | j                  t        |            S r   )r$   r.   rD   s      r   from_ZZ_gmpyzRealField.from_ZZ_gmpyb   s    zz#g,''r   c                 d    | j                  |j                        t        |j                        z  S r   r$   	numeratorr.   denominatorrD   s      r   from_QQzRealField.from_QQi   '    zz'++,s73F3F/GGGr   c                 d    | j                  |j                        t        |j                        z  S r   rM   rD   s      r   from_QQ_pythonzRealField.from_QQ_pythonl   rQ   r   c                 v    | j                  t        |j                              t        |j                        z  S r   )r$   r.   rN   rO   rD   s      r   from_QQ_gmpyzRealField.from_QQ_gmpyo   s,    zz#g//01C8K8K4LLLr   c                 t    | j                  |j                  |      j                  | j                              S r   )rA   r:   r=   r   rD   s      r   from_AlgebraicFieldzRealField.from_AlgebraicFieldr   s)    t}}W5;;DHHEFFr   c                 2    | |k(  r|S | j                  |      S r   rC   rD   s      r   from_RealFieldzRealField.from_RealFieldu   s    4<N::g&&r   c                 R    |j                   s| j                  |j                        S y r   )imagr$   realrD   s      r   from_ComplexFieldzRealField.from_ComplexField{   s!    ||::gll++ r   c                 :    | j                   j                  ||      S )z*Convert a real number to rational number. )r   to_rational)r   r9   limits      r   r_   zRealField.to_rational   s    }}((%88r   c                     | S )z)Returns a ring associated with ``self``.  r   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.domainsre   )r   re   s     r   	get_exactzRealField.get_exact   s
    *	r   c                     | j                   S )z Returns GCD of ``a`` and ``b``. )r&   r   abs      r   gcdzRealField.gcd   s    xxr   c                     ||z  S )z Returns LCM of ``a`` and ``b``. rb   ri   s      r   lcmzRealField.lcm   s    s
r   c                 <    | j                   j                  |||      S )z+Check if ``a`` and ``b`` are almost equal. )r   almosteq)r   rj   rk   r   s       r   rp   zRealField.almosteq   s    }}%%aI66r   c                     |dk\  S )z8Returns ``True`` if ``a >= 0`` and ``False`` otherwise. r   rb   r   rj   s     r   	is_squarezRealField.is_square   s    Avr   c                     |dk\  r|dz  S dS )zNon-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      ?Nrb   rr   s     r   exsqrtzRealField.exsqrt   s     6qCx+t+r   )Tr   )*r6   
__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+   r$   r2   r7   r:   rA   rF   rI   rK   rP   rS   rU   rW   rY   r]   r_   rc   rg   rl   rn   rp   rs   ru   rb   r   r   r   r      s   2
CL5HLFNO9 9 " " ! ! ' ' /Dd !   2
\(H##(HHMG',9
7,r   r   N)rx   sympy.external.gmpyr   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   rb   r   r   <module>r      sM    2 + $ + 9 E 4 1 "V,)< V, V,r [r   