a
    kh                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ eG dd de	eZeG d	d
 d
e
eZejZeG dd deZ dS )zReal and complex elements.     )MPQ)DomainElement)public)PythonMPContext_mpf_mpc	_constant)MPZ_ONEfzerofonefinffninffnanround_nearestmpf_mulrepr_dps	int_typesfrom_int
from_floatfrom_strto_rationalc                   @   s2   e Zd ZdZdZdd Zedd eZdd Zd	S )
RealElementzAn element of a real domain. Z__mpf__c                 C   s
   || _ d S Nr   selfval r   L/var/www/auris/lib/python3.9/site-packages/sympy/polys/domains/mpelements.py_set_mpf   s    zRealElement._set_mpfc                 C   s   | j S r   r   r   r   r   r   <lambda>       zRealElement.<lambda>c                 C   s   | j jS r   context_parentr    r   r   r   parent   s    zRealElement.parentN)	__name__
__module____qualname____doc__	__slots__r   property_mpf_r&   r   r   r   r   r      s
   r   c                   @   s2   e Zd ZdZdZdd Zedd eZdd Zd	S )
ComplexElementz An element of a complex domain. Z__mpc__c                 C   s
   || _ d S r   r/   r   r   r   r   _set_mpc&   s    zComplexElement._set_mpcc                 C   s   | j S r   r/   r    r   r   r   r!   )   r"   zComplexElement.<lambda>c                 C   s   | j jS r   r#   r    r   r   r   r&   +   s    zComplexElement.parentN)	r'   r(   r)   r*   r+   r0   r,   Z_mpc_r&   r   r   r   r   r.       s
   r.   c                   @   sb   e Zd ZdddZdd Zdd	 Zd
d Zdd Zedd Z	edd Z
dddZdddZdS )	MPContext5   NFc                 C   sX  |t g| _|d u r| | n
| | t| _t| _| jt| jg| j_	| jt| jg| j_	|rf| | j_
n| | j_
t| _| jt| jg| j_	| | j_
| j| j| jg| _d| _d| _|d u r|  | _n|du rt| _n| || _| | j| _| jsd| _ntd| j | _| t| _| t| _| ttf| _| t| _| t| _ | t!| _"d S )NTFi@B    )#r   _prec_roundingZ	_set_precZ_set_dpsr   Zmpfr.   ZmpcnewZ_ctxdatar$   r   ZconstanttypesZtrap_complexpretty	_make_toltolr
   _convert_tolmake_mpf	tolerance	max_denomintZzeror   ZoneZmake_mpcjr   infr   Zninfr   nan)ctxprecZdpsr9   realr   r   r   __init__3   s@    


zMPContext.__init__c                 C   s    d}dt d| j df}t||S )N)r            r   r3   )r	   rC   r   )rB   ZhundredZepsr   r   r   r8   b   s    zMPContext._make_tolc                 C   s   |  |  S r   )r;   r8   rB   r   r   r   make_tolg   s    zMPContext.make_tolc                 C   sd   t |trt|S t |tr$t|S t|dr4|jS | j\}}t |trTt	|||S t
d| d S )Nr-   zexpected a real number, got %s)
isinstancer   r   floatr   hasattrr-   r4   strr   
ValueError)rB   r9   rC   roundingr   r   r   r:   j   s    




zMPContext._convert_tolc                 C   s   t dt| d S )Nzcannot create mpf from )	TypeErrorrepr)rB   xstringsr   r   r   _convert_fallbackv   s    zMPContext._convert_fallbackc                 C   s
   t | jS r   )r   Z_precrI   r   r   r   _repr_digitsy   s    zMPContext._repr_digitsc                 C   s   | j S r   )Z_dpsrI   r   r   r   _str_digits}   s    zMPContext._str_digitsTc                 C   s  t |j\}}t|}|r$|| jkr,||fS d\}}}}|| }	}
|	|
 }|||  }|| jkrbq|||||  |f\}}}}|
|	||
   }	}
qB| j| | }t||}t|||  |||  }t||}|r|s||fS t|| t|| kr|j|jfS |j|jfS d S )N)r   r3   r3   r   )r   r-   r>   r=   r   abs	numeratordenominator)rB   slimitpqZp0Zq0p1Zq1ndaZq2knumberZbound1Zbound2r   r   r   r      s*    



zMPContext.to_rationalc           	      C   s   |  |}|d u r,|d u r,| jp&|   }}|d u r@|  |}n|d u rR|  |}t|| }||krjdS t|}t|}||k r|| }n|| }||kS )NT)convertr<   rJ   rX   )	rB   r[   tZrel_epsZabs_epsdiffZabssZabsterrr   r   r   almosteq   s     


zMPContext.almosteq)r2   NNF)T)NN)r'   r(   r)   rE   r8   rJ   r:   rU   r,   rV   rW   r   ri   r   r   r   r   r1   0   s   
/


#r1   N)!r*   Zsympy.external.gmpyr   Z!sympy.polys.domains.domainelementr   Zsympy.utilitiesr   Zmpmath.ctx_mp_pythonr   r   r   r   Zmpmath.libmpr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   object__new__r5   r1   r   r   r   r   <module>   s   @