B
    ˜‘[½  ã               @   sˆ   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mZ ddlmZ dd	lmZ eG d
d„ dee	eƒƒZdS )z,Implementation of :class:`RealField` class. é    )Úprint_functionÚdivision)ÚField)ÚSimpleDomain)ÚCharacteristicZero)Ú	MPContext)ÚDomainErrorÚCoercionFailed)ÚFloat)Úpublicc               @   sø   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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d1d%d&„Zd'd(„ Zd)d*„ Zd+d,„ Z d-d.„ Z!d2d/d0„Z"dS )3Ú	RealFieldz(Real numbers up to the given precision. ZRRTFé5   c             C   s   | j | jkS )N)Ú	precisionÚ_default_precision)Úself© r   ú<lib/python3.7/site-packages/sympy/polys/domains/realfield.pyÚhas_default_precision   s    zRealField.has_default_precisionc             C   s   | j jS )N)Ú_contextÚprec)r   r   r   r   r   #   s    zRealField.precisionc             C   s   | j jS )N)r   Údps)r   r   r   r   r   '   s    zRealField.dpsc             C   s   | j jS )N)r   Ú	tolerance)r   r   r   r   r   +   s    zRealField.toleranceNc             C   s<   t |||ƒ}| |_|| _|j| _|  d¡| _|  d¡| _d S )Nr   é   )r   Z_parentr   ZmpfÚdtypeZzeroÚone)r   r   r   ZtolÚcontextr   r   r   Ú__init__/   s    zRealField.__init__c             C   s"   t |tƒo | j|jko | j|jkS )N)Ú
isinstancer   r   r   )r   Úotherr   r   r   Ú__eq__8   s    
zRealField.__eq__c             C   s   t | jj| j| j| jfƒS )N)ÚhashÚ	__class__Ú__name__r   r   r   )r   r   r   r   Ú__hash__=   s    zRealField.__hash__c             C   s   t || jƒS )z%Convert ``element`` to SymPy number. )r
   r   )r   Úelementr   r   r   Úto_sympy@   s    zRealField.to_sympyc             C   s.   |j | jd}|jr|  |¡S td| ƒ‚dS )z%Convert SymPy's number to ``dtype``. )Únzexpected real number, got %sN)Zevalfr   Z	is_Numberr   r	   )r   ÚexprZnumberr   r   r   Ú
from_sympyD   s    
zRealField.from_sympyc             C   s
   |   |¡S )N)r   )r   r$   Úbaser   r   r   Úfrom_ZZ_pythonM   s    zRealField.from_ZZ_pythonc             C   s   |   |j¡|j S )N)r   Ú	numeratorÚdenominator)r   r$   r)   r   r   r   Úfrom_QQ_pythonP   s    zRealField.from_QQ_pythonc             C   s   |   t|ƒ¡S )N)r   Úint)r   r$   r)   r   r   r   Úfrom_ZZ_gmpyS   s    zRealField.from_ZZ_gmpyc             C   s   |   t|jƒ¡t|jƒ S )N)r   r.   r+   r,   )r   r$   r)   r   r   r   Úfrom_QQ_gmpyV   s    zRealField.from_QQ_gmpyc             C   s   | |kr|S |   |¡S d S )N)r   )r   r$   r)   r   r   r   Úfrom_RealFieldY   s    zRealField.from_RealFieldc             C   s   |j s|  |j¡S d S )N)Úimagr   Úreal)r   r$   r)   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   r$   Úlimitr   r   r   r5   c   s    zRealField.to_rationalc             C   s   | S )z)Returns a ring associated with ``self``. r   )r   r   r   r   Úget_ringg   s    zRealField.get_ringc             C   s   ddl m} |S )z2Returns an exact domain associated with ``self``. r   )ÚQQ)Zsympy.polys.domainsr8   )r   r8   r   r   r   Ú	get_exactk   s    zRealField.get_exactc             C   s   | j S )z Returns GCD of ``a`` and ``b``. )r   )r   ÚaÚbr   r   r   Úgcdp   s    zRealField.gcdc             C   s   || S )z Returns LCM of ``a`` and ``b``. r   )r   r:   r;   r   r   r   Úlcmt   s    zRealField.lcmc             C   s   | j  |||¡S )z+Check if ``a`` and ``b`` are almost equal. )r   Úalmosteq)r   r:   r;   r   r   r   r   r>   x   s    zRealField.almosteq)T)N)#r"   Ú
__module__Ú__qualname__Ú__doc__ZrepZis_RealFieldZis_RRZis_ExactZis_NumericalZis_PIDZhas_assoc_RingZhas_assoc_Fieldr   Úpropertyr   r   r   r   r   r   r#   r%   r(   r*   r-   r/   r0   r1   r4   r5   r7   r9   r<   r=   r>   r   r   r   r   r      s<   		
r   N)rA   Z
__future__r   r   Zsympy.polys.domains.fieldr   Z sympy.polys.domains.simpledomainr   Z&sympy.polys.domains.characteristiczeror   Zsympy.polys.domains.mpelementsr   Zsympy.polys.polyerrorsr   r	   Zsympy.core.numbersr
   Zsympy.utilitiesr   r   r   r   r   r   Ú<module>   s   