
    g                         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dS )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)d
S )%	RealFieldz(Real numbers up to the given precision. RRTF5   c                 "    | j         | j        k    S N)	precision_default_precisionselfs    Y/var/www/html/ai-engine/env/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dtypezeroone)r   r   r   tolcontexts        r   __init__zRealField.__init__.   sR    D#sD11kJJqMM	::a==r   c                     | j         S r   )r#   r   s    r   tpzRealField.tp7   s     {r   c                 t    t          |t                    rt          |          }|                     |          S r   )
isinstancer   intr#   )r   args     r   r$   zRealField.dtype?   s3     c:&& 	c((C{{3r   c                 l    t          |t                    o| j        |j        k    o| j        |j        k    S r   )r-   r   r   r   )r   others     r   __eq__zRealField.__eq__G   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__L   s$    T^,dk4>4>Z[[[r   c                 ,    t          || j                  S )z%Convert ``element`` to SymPy number. )r   r   )r   elements     r   to_sympyzRealField.to_sympyO   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_sympyS   sI    dh'' 	H::f%%% !?$!FGGGr   c                 ,    |                      |          S r   r$   r   r9   bases      r   from_ZZzRealField.from_ZZ\       zz'"""r   c                 ,    |                      |          S r   rC   rD   s      r   from_ZZ_pythonzRealField.from_ZZ_python_   rG   r   c                 F    |                      t          |                    S r   )r$   r.   rD   s      r   from_ZZ_gmpyzRealField.from_ZZ_gmpyb   s    zz#g,,'''r   c                 `    |                      |j                  t          |j                  z  S r   r$   	numeratorr.   denominatorrD   s      r   from_QQzRealField.from_QQi   '    zz'+,,s73F/G/GGGr   c                 `    |                      |j                  t          |j                  z  S r   rM   rD   s      r   from_QQ_pythonzRealField.from_QQ_pythonl   rQ   r   c                 z    |                      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011C8K4L4LLLr   c                     |                      |                    |                              | j                            S r   )rA   r:   r=   r   rD   s      r   from_AlgebraicFieldzRealField.from_AlgebraicFieldr   s0    t}}W55;;DHEEFFFr   c                 <    | |k    r|S |                      |          S r   rC   rD   s      r   from_RealFieldzRealField.from_RealFieldu   s"    4<<N::g&&&r   c                 H    |j         s|                     |j                  S d S r   )imagr$   realrD   s      r   from_ComplexFieldzRealField.from_ComplexField{   s*    | 	,::gl+++	, 	,r   c                 8    | j                             ||          S )z*Convert a real number to rational number. )r   to_rational)r   r9   limits      r   r_   zRealField.to_rational   s    }((%8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	    xr   c                     ||z  S )z Returns LCM of ``a`` and ``b``. rb   ri   s      r   lcmzRealField.lcm   s    s
r   c                 :    | 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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  n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     66qCxxt+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      sP       22
CL5HLFNO9 9 X9 " " X" ! ! X! ' ' X' /Dd ! ! ! !   X     2 2 2
\ \ \( ( (H H H# # ## # #( ( (H H HH H HM M MG G G' ' ', , ,9 9 9 9    
    7 7 7 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      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 " " " " " "V, V, V, V, V,)< V, V, V,r Y[[r   