o
    jg                     @   s   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 dee
eZe ZdS )z,Implementation of :class:`RealField` class.     )
SYMPY_INTS)Float)Field)SimpleDomain)CharacteristicZero)	MPContext)CoercionFailed)publicc                   @   s4  e Zd ZdZdZd ZZdZdZdZ	dZ
dZdZedd Zedd	 Zed
d Zedd ZeddfddZedd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Z d-d. Z!d?d/d0Z"d1d2 Z#d3d4 Z$d5d6 Z%d7d8 Z&d@d9d:Z'd;d< Z(d=d> Z)dS )A	RealFieldz(Real numbers up to the given precision. RRTF5   c                 C   s   | j | jkS N)	precision_default_precisionself r   U/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/polys/domains/realfield.pyhas_default_precision      zRealField.has_default_precisionc                 C      | j jS r   )_contextprecr   r   r   r   r   "      zRealField.precisionc                 C   r   r   )r   dpsr   r   r   r   r   &   r   zRealField.dpsc                 C   r   r   )r   	tolerancer   r   r   r   r   *   r   zRealField.toleranceNc                 C   s>   t |||d}| |_|| _|j| _| d| _| d| _d S )NTr      )r   _parentr   mpf_dtypedtypezeroone)r   r   r   tolcontextr   r   r   __init__.   s   zRealField.__init__c                 C      | j S r   )r   r   r   r   r   tp7   s   zRealField.tpc                 C   s   t |tr	t|}| |S r   )
isinstancer   intr   )r   argr   r   r   r    ?   s   

zRealField.dtypec                 C   s"   t |to| j|jko| j|jkS r   )r(   r
   r   r   )r   otherr   r   r   __eq__G   s
   


zRealField.__eq__c                 C   s   t | jj| j| j| jfS r   )hash	__class____name__r   r   r   r   r   r   r   __hash__L      zRealField.__hash__c                 C   s   t || jS )z%Convert ``element`` to SymPy number. )r   r   )r   elementr   r   r   to_sympyO   r   zRealField.to_sympyc                 C   s*   |j | jd}|jr| |S td| )z%Convert SymPy's number to ``dtype``. )nzexpected real number, got %s)evalfr   	is_Numberr    r   )r   exprnumberr   r   r   
from_sympyS   s   
zRealField.from_sympyc                 C   
   |  |S r   r    r   r2   baser   r   r   from_ZZ\      
zRealField.from_ZZc                 C   r:   r   r;   r<   r   r   r   from_ZZ_python_   r?   zRealField.from_ZZ_pythonc                 C   s   |  t|S r   )r    r)   r<   r   r   r   from_ZZ_gmpyb   s   zRealField.from_ZZ_gmpyc                 C      |  |jt|j S r   r    	numeratorr)   denominatorr<   r   r   r   from_QQi      zRealField.from_QQc                 C   rB   r   rC   r<   r   r   r   from_QQ_pythonl   rG   zRealField.from_QQ_pythonc                 C   s   |  t|jt|j S r   )r    r)   rD   rE   r<   r   r   r   from_QQ_gmpyo   r1   zRealField.from_QQ_gmpyc                 C   s   |  ||| jS r   )r9   r3   r5   r   r<   r   r   r   from_AlgebraicFieldr   s   zRealField.from_AlgebraicFieldc                 C   s   | |kr|S |  |S r   r;   r<   r   r   r   from_RealFieldu   s   
zRealField.from_RealFieldc                 C   s   |j s	| |jS d S r   )imagr    realr<   r   r   r   from_ComplexField{   s   zRealField.from_ComplexFieldc                 C   s   | j ||S )z*Convert a real number to rational number. )r   to_rational)r   r2   limitr   r   r   rO      s   zRealField.to_rationalc                 C   s   | S )z)Returns a ring associated with ``self``. r   r   r   r   r   get_ring   s   zRealField.get_ringc                 C   s   ddl m} |S )z2Returns an exact domain associated with ``self``. r   )QQ)sympy.polys.domainsrR   )r   rR   r   r   r   	get_exact   s   zRealField.get_exactc                 C   r&   )z Returns GCD of ``a`` and ``b``. )r"   r   abr   r   r   gcd   s   zRealField.gcdc                 C   s   || S )z Returns LCM of ``a`` and ``b``. r   rU   r   r   r   lcm   r   zRealField.lcmc                 C   s   | j |||S )z+Check if ``a`` and ``b`` are almost equal. )r   almosteq)r   rV   rW   r   r   r   r   rZ      s   zRealField.almosteqc                 C   s   |dkS )z8Returns ``True`` if ``a >= 0`` and ``False`` otherwise. r   r   r   rV   r   r   r   	is_square   r   zRealField.is_squarec                 C   s   |dkr|d 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      ?Nr   r[   r   r   r   exsqrt   s   zRealField.exsqrt)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'   r    r,   r0   r3   r9   r>   r@   rA   rF   rH   rI   rJ   rK   rN   rO   rQ   rT   rX   rY   rZ   r\   r]   r   r   r   r   r
      sV    



	
	

r
   N)r`   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   r   r   r   r   <module>   s     
