
    Xh8                         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dS )z,Implementation of :class:`RealField` class.     )
SYMPY_INTSMPQ)Float)Field)SimpleDomain)CharacteristicZero)CoercionFailed)public)	MPContext)to_rationalTc                    t          | j                  \  }}t          |          }t          |          }|r||k    r||fS d\  }}}}||}
}		 |	|
z  }|||z  z   }||k    rn|||||z  z   |f\  }}}}|
|	||
z  z
  }
}	0||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                    o/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/polys/domains/realfield.pyr   r      s]   qw''DAq
 	AAAA ANN!tNBBaqAqD!B$Y	>>RadB.BB!ac'1 
R"AAYYFadB2I&&FR[[F 4 4!t	Vf_		Vf_!5!5	5	5!333!333    c                   4   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)d
S )&	RealFieldz(Real numbers up to the given precision. RRTF5   c                 "    | j         | j        k    S N)	precision_default_precisionselfs    r&   has_default_precisionzRealField.has_default_precisionG   s    ~!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        | _        |                     d          | _	        |                     d          | _
        t          d|j        z  dz  d          | _        | j
        | j        z  | _        d S )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     ++<CK2GLL[GLL\GKK:;;;kJJqMM	::a== ao4b99(T_4r'   c                     | j         S r-   )rA   r0   s    r&   tpzRealField.tpq   s     {r'   c                 t    t          |t                    rt          |          }|                     |          S r-   )
isinstancer   r   rA   )r1   args     r&   rB   zRealField.dtypey   s3     c:&& 	c((C{{3r'   c                 L    t          |t                    o| 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^,dk4>JKKKr'   c                 ,    t          || j                  S )z%Convert ``element`` to SymPy number. )r   r7   )r1   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``. )r   zexpected real number, got %s)evalfr7   	is_NumberrB   r	   )r1   exprr#   s      r&   
from_sympyzRealField.from_sympy   sI    dh'' 	H::f%%% !?$!FGGGr'   c                 ,    |                      |          S r-   rB   r1   rX   bases      r&   from_ZZzRealField.from_ZZ       zz'"""r'   c                 ,    |                      |          S r-   r`   ra   s      r&   from_ZZ_pythonzRealField.from_ZZ_python   rd   r'   c                 F    |                      t          |                    S r-   )rB   r   ra   s      r&   from_ZZ_gmpyzRealField.from_ZZ_gmpy   s    zz#g,,'''r'   c                 `    |                      |j                  t          |j                  z  S r-   rB   r   r   r   ra   s      r&   from_QQzRealField.from_QQ   '    zz'+,,s73F/G/GGGr'   c                 `    |                      |j                  t          |j                  z  S r-   rj   ra   s      r&   from_QQ_pythonzRealField.from_QQ_python   rl   r'   c                 z    |                      t          |j                            t          |j                  z  S r-   )rB   r   r   r   ra   s      r&   from_QQ_gmpyzRealField.from_QQ_gmpy   s/    zz#g/0011C8K4L4LLLr'   c                     |                      |                    |                              | j                            S r-   )r^   rY   r[   r7   ra   s      r&   from_AlgebraicFieldzRealField.from_AlgebraicField   s0    t}}W55;;DHEEFFFr'   c                 ,    |                      |          S r-   r`   ra   s      r&   from_RealFieldzRealField.from_RealField   rd   r'   c                 H    |j         s|                     |j                  S d S r-   )imagrB   realra   s      r&   from_ComplexFieldzRealField.from_ComplexField   s*    | 	,::gl+++	, 	,r'   c                 0    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    7DO5AA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r'   c                     ||z  S )z Returns LCM of ``a`` and ``b``. r{   r   s      r&   lcmzRealField.lcm   s    s
r'   c                 :    | 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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    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      ?Nr{   r   s     r&   exsqrtzRealField.exsqrt   s     66qCxxt+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   sN       22
CL5HLFNO9 9 X9 " " X" ! ! X!   X5 5 5 54   X     R R RL L L( ( (H H H# # ## # #( ( (H H HH H HM M MG G G# # #, , ,B B B B    
    7 7 7 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      s   2 2 0 / / / / / / / $ $ $ $ $ $ + + + + + + 9 9 9 9 9 9 E E E E E E 1 1 1 1 1 1 " " " " " "       ; ; ; ; ; ;#4 #4 #4 #4L b, b, b, b, b,)< b, b, b,J Y[[r'   