
    Ed                        d 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 ddlmZ e G d dee                      Ze G d	 d
ee                      Zej        Ze G d de                      Z dS )zReal and complex elements.     )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_rational)mpqc                   <    e Zd ZdZdZd Z ed e          Zd ZdS )RealElementzAn element of a real domain. __mpf__c                     || _         d S Nr   selfvals     >lib/python3.11/site-packages/sympy/polys/domains/mpelements.py_set_mpfzRealElement._set_mpf           c                     | j         S r   r   r   s    r!   <lambda>zRealElement.<lambda>       $, r$   c                     | j         j        S r   context_parentr&   s    r!   parentzRealElement.parent       |##r$   N)	__name__
__module____qualname____doc__	__slots__r"   property_mpf_r-    r$   r!   r   r      sT        ''I   H..99E$ $ $ $ $r$   r   c                   <    e Zd ZdZdZd Z ed e          Zd ZdS )ComplexElementz An element of a complex domain. __mpc__c                     || _         d S r   r9   r   s     r!   _set_mpczComplexElement._set_mpc"   r#   r$   c                     | j         S r   r9   r&   s    r!   r'   zComplexElement.<lambda>%   r(   r$   c                     | j         j        S r   r*   r&   s    r!   r-   zComplexElement.parent'   r.   r$   N)	r/   r0   r1   r2   r3   r<   r4   _mpc_r-   r6   r$   r!   r8   r8      sT        **I   H..99E$ $ $ $ $r$   r8   c                   j    e Zd ZddZd Zd Zd Zd Zed	             Z	ed
             Z
ddZddZdS )	MPContext5   NFc                    |t           g| _        ||                     |           n|                     |           t          | _        t          | _        | j        t          | j        g| j        _	        | j        t          | j        g| j        _	        |r| | j        _
        n| | j        _
        t          | _        | j        t          | j        g| j        _	        | | j        _
        | j        | j        | j        g| _        d| _        d| _        ||                                 | _        n+|du rt$          | _        n|                     |          | _        |                     | j                  | _        | j        sd| _        nt/          d| j        z            | _        |                     t$                    | _        |                     t2                    | _        |                     t$          t2          f          | _        |                     t:                    | _        |                     t>                    | _         |                     tB                    | _"        d S )NTFi@B    )#r   _prec_rounding	_set_prec_set_dpsr   mpfr8   mpcnew_ctxdatar+   r   constanttypestrap_complexpretty	_make_toltolr
   _convert_tolmake_mpf	tolerance	max_denomintzeror   onemake_mpcjr   infr   ninfr   nan)ctxprecdpsrQ   reals        r!   __init__zMPContext.__init__/   s   "M2 	MM$LL GS#*<=GS#*<= 	"!CGOO!CGO !$#s/A B"Wcgs|4	
 	,mmooCGGE\ 	,CGG&&s++CGSW--} 	1#CMM#-00CM<<&&,,t$$eT]++,,t$$<<&&,,t$$r$   c                 L    d}dt           d| j        z
  df}t          ||          S )N)r            r   rD   )r	   r_   r   )r^   hundredepss      r!   rP   zMPContext._make_tol^   s+    '1SX:q)w$$$r$   c                 P    |                      |                                           S r   )rS   rP   r^   s    r!   make_tolzMPContext.make_tolc   s    ||CMMOO,,,r$   c                 D   t          |t                    rt          |          S t          |t                    rt	          |          S t          |d          r|j        S | j        \  }}t          |t                    rt          |||          S t          d|z            )Nr5   zexpected a real number, got %s)
isinstancer   r   floatr   hasattrr5   rE   strr   
ValueError)r^   rQ   r_   roundings       r!   rR   zMPContext._convert_tolf   s    c9%% 	!C== c5!! 	#c??"3   	9+hc3 	1Cx0009C?@@@r$   c                 @    t          dt          |          z             )Nzcannot create mpf from )	TypeErrorrepr)r^   xstringss      r!   _convert_fallbackzMPContext._convert_fallbackr   s    1DGG;<<<r$   c                 *    t          | j                  S r   )r   _precrj   s    r!   _repr_digitszMPContext._repr_digitsu   s    	"""r$   c                     | j         S r   )_dpsrj   s    r!   _str_digitszMPContext._str_digitsy   s	    xr$   Tc                    t          |j                  \  }}|r|| j        k    r||fS d\  }}}}||}
}		 |	|
z  }|||z  z   }|| j        k    rn|||||z  z   |f\  }}}}|
|	||
z  z
  }
}	5| j        |z
  |z  }t          ||          }t          |||z  z   |||z  z             }t          ||          }|r|s||fS t	          ||z
            t	          ||z
            k    r|j        S |j        S )N)r   rD   rD   r   )r   r5   rU   r   abs_mpq_)r^   slimitpqp0q0p1q1ndaq2knumberbound1bound2s                    r!   r   zMPContext.to_rational}   sD   17##1 	S]* 	a4K#BB!1	1AadBCM! R!B$Y2NBBa!A#gqA	 ]R"$QR!B$YQrT	**R 	 V 	 a4K&!!S&%9%99 	 <<r$   c                 j   |                      |          }||| j        p|                                 x}}||                      |          }n||                      |          }t          ||z
            }||k    rdS t          |          }t          |          }||k     r||z  }n||z  }||k    S )NT)convertrT   rk   r   )	r^   r   trel_epsabs_epsdiffabssabsterrs	            r!   almosteqzMPContext.almosteq   s    KKNN 	@w 	@ # ??Gg 	+kk'**GG 	+kk'**G1Q3xx7? 	41vv1vv$; 	t)CCt)Cg~r$   )rB   NNF)T)NN)r/   r0   r1   rb   rP   rk   rR   rx   r4   r{   r~   r   r   r6   r$   r!   rA   rA   ,   s        -% -% -% -%^% % %
- - -
A 
A 
A= = = # # X#   X       <     r$   rA   N)!r2   !sympy.polys.domains.domainelementr   sympy.utilitiesr   mpmath.ctx_mp_pythonr   r   r   r   mpmath.libmpr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   mpmath.rationalr   r   r8   object__new__rJ   rA   r6   r$   r!   <module>r      s   ! ! < ; ; ; ; ; " " " " " " G G G G G G G G G G G G1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1        $ $ $ $ $$ $ $ $ $ $ $ $ $T= $ $ $ n         r$   