ó
    ‰*£h‰ò  ã                  ó"  • % S r SSKJr  SSKJrJrJrJrJr  SSK	r	SSK
Jr  SSKJrJrJrJrJrJrJrJrJr  SSKJr  SSK
JrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8  SSK
J9r:  SS	K;J<r<  SS
K=J>r>  SSK?J@r@JArA  SSKBJBrB  SSKCJDrD  SSKEJFrF  SSKGJHrH  SSKIJJrJ  SSKKJLrL  \(       a^  SSKMJNrN  SSKOJPrP  SSKQJRrR  SSKSJTrT  SSKUJVrV  SSKWJXrX  SSKYJZrZ  SSK[J\r\  SSK]J^r^J_r_  SSK`JaraJbrbJcrc  SSKdJereJfrf  SSKgJhrh  SSKiJjrjJkrkJlrlJmrmJnrn  \	RÞ                  " S 5      rp\5rqS! r9\r" \5      rs\r" \* 5      rtS"ru " S# S$\v5      rw \x\y\y\y\y4   rz \r{\|\}\4   r~SVS% jrSWSXS& jjr€\x\�\y   \y\y\y4   r‚\SYSZS' jj5       rƒ\SYS[S( jj5       rƒSY S\S) jjrƒSWS]S* jjr„S^S+ jr…S_S, jr†S`S- jr‡SaS. jrˆSbS/ jr‰ScS0 jrŠSdS1 jr‹SeS2 jrŒSfS3 jr�SW SgS4 jjrŽShS5 jr�SiS6 jr�SjS7 jr‘SkS8 jr’SlS9 jr“  SmS: jr”SnS; jr•SoS< jr–SpS= jr—SqS> jr˜SrS? jr™SsS@ jršStSA jr›SuSB jrœS_SC jr�SvSD jržSwSE jrŸSxSF jr SxSG jr¡SySH jr¢SzSI jr£S{SJ jr¤S|SK jr¥S}SL jr¦0 q§SM\¨SN'   SO r©S}SP jrªS~SQ jr« " SR SS5      r¬SST jr­   S€     S�SU jjr®g)‚z^
Adaptive numerical evaluation of SymPy expressions, using mpmath
for mathematical functions.
é    )Úannotations)ÚCallableÚTYPE_CHECKINGÚAnyÚoverloadÚTypeN)	Úmake_mpcÚmake_mpfÚmpÚmpcÚmpfÚnsumÚquadtsÚquadoscÚworkprec)Úinf)!Úfrom_intÚfrom_man_expÚfrom_rationalÚfhalfÚfnanÚfinfÚfninfÚfnoneÚfoneÚfzeroÚmpf_absÚmpf_addÚmpf_atanÚ	mpf_atan2Úmpf_cmpÚmpf_cosÚmpf_eÚmpf_expÚmpf_logÚmpf_ltÚmpf_mulÚmpf_negÚmpf_piÚmpf_powÚmpf_pow_intÚ	mpf_shiftÚmpf_sinÚmpf_sqrtÚ	normalizeÚround_nearestÚto_intÚto_strÚmpf_tan)Úbitcount)ÚMPZ)Ú	_infs_nan)Údps_to_precÚprec_to_dpsé   )Úsympify)ÚS)Ú
SYMPY_INTS)Úis_sequence)Úlambdify)Úas_int)ÚExpr©ÚAdd©ÚMul©ÚPow)ÚSymbol©ÚIntegral©ÚSum©ÚProduct©ÚexpÚlog)ÚAbsÚreÚim©ÚceilingÚfloor)Úatan)ÚFloatÚRationalÚIntegerÚAlgebraicNumberÚNumberé
   c                ó<   • [        [        [        U 5      5      5      $ )z8Return smallest integer, b, such that |n|/2**b < 1.
    )Úmpmath_bitcountÚabsÚint)Úns    ÚM/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/core/evalf.pyr4   r4   2   s   € ô œ3œs 1›v›;Ó'Ð'ó    iM  c                  ó   • \ rS rSrSrg)ÚPrecisionExhaustedéA   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__rh   rd   rc   rf   rf   A   s   † Úrd   rf   c                óF   • U (       a
  U [         :X  a  [        $ U S   U S   -   $ )aþ  Fast approximation of log2(x) for an mpf value tuple x.

Explanation
===========

Calculated as exponent + width of mantissa. This is an
approximation for two reasons: 1) it gives the ceil(log2(abs(x)))
value and 2) it is too high by 1 in the case that x is an exact
power of 2. Although this is easy to remedy by testing to see if
the odd mpf mantissa is 1 (indicating that one was dealing with
an exact power of 2) that would decrease the speed and is not
necessary as this is only being used as an approximation for the
number of bits in x. The correct return value could be written as
"x[2] + (x[3] if x[1] != 1 else 0)".
    Since mpf tuples always have an odd mantissa, no check is done
to see if the mantissa is a multiple of 2 (in which case the
result would be too large by 1).

Examples
========

>>> from sympy import log
>>> from sympy.core.evalf import fastlog, bitcount
>>> s, m, e = 0, 5, 1
>>> bc = bitcount(m)
>>> n = [1, -1][s]*m*2**e
>>> n, (log(n)/log(2)).evalf(2), fastlog((s, m, e, bc))
(10, 3.3, 4)
é   é   )r   Ú	MINUS_INF)Úxs    rc   Úfastlogrs   r   s%   € ö> �”U“
ÜÐØˆQ‰4�!�A‘$‰;Ðrd   c                ó¼   • U R                  5       u  p#U(       a*  UR                  5       u  pEU[        R                  L a  X$4$  gU(       a  U[        R                  4$ g)aÂ  Return a and b if v matches a + I*b where b is not zero and
a and b are Numbers, else None. If `or_real` is True then 0 will
be returned for `b` if `v` is a real number.

Examples
========

>>> from sympy.core.evalf import pure_complex
>>> from sympy import sqrt, I, S
>>> a, b, surd = S(2), S(3), sqrt(2)
>>> pure_complex(a)
>>> pure_complex(a, or_real=True)
(2, 0)
>>> pure_complex(surd)
>>> pure_complex(a + b*I)
(2, 3)
>>> pure_complex(I)
(0, 1)
N)Úas_coeff_AddÚas_coeff_Mulr;   ÚImaginaryUnitÚZero)ÚvÚor_realÚhÚtÚcÚis         rc   Úpure_complexr   –   sV   € ð( �>‰>Ó�D€AÞØ�~‰~Ó‰ˆØ”—‘ÒØ�4ˆKð  ð ö 
Ø”!—&‘&ˆyÐØrd   c                ó   • g ©Nrh   ©ÚmagÚsigns     rc   Úscaled_zeror…   ¹   ó   € àrd   c                ó   • g r�   rh   r‚   s     rc   r…   r…   ¼   r†   rd   c                ó8  • [        U [        5      (       a-  [        U 5      S:X  a  [        U SS9(       a  U S   S   4U SS -   $ [        U [        5      (       a9  US;  a  [        S5      e[        [        U 5      S	p2US:X  a  SOSnU/4USS -   nX#4$ [        S
5      e)a  Return an mpf representing a power of two with magnitude ``mag``
and -1 for precision. Or, if ``mag`` is a scaled_zero tuple, then just
remove the sign from within the list that it was initially wrapped
in.

Examples
========

>>> from sympy.core.evalf import scaled_zero
>>> from sympy import Float
>>> z, p = scaled_zero(100)
>>> z, p
(([0], 1, 100, 1), -1)
>>> ok = scaled_zero(z)
>>> ok
(0, 1, 100, 1)
>>> Float(ok)
1.26765060022823e+30
>>> Float(ok, p)
0.e+30
>>> ok, p = scaled_zero(100, -1)
>>> Float(scaled_zero(ok), p)
-0.e+30
é   T©Úscaledr   r9   N)éÿÿÿÿr9   zsign must be +/-1rŒ   z-scaled zero expects int or scaled_zero tuple.)Ú
isinstanceÚtupleÚlenÚiszeror<   Ú
ValueErrorr,   r   )rƒ   r„   ÚrvÚpÚss        rc   r…   r…   ¿   s¡   € ô4 �#”u×Ñ¤# c£(¨a£-´F¸3Àt×4LØ�A‘�q‘	ˆ|˜c ! "˜gÑ%Ð%Ü	�Cœ×	$Ñ	$Ø�wÓÜÐ0Ó1Ð1Üœ$ Ó$ bˆAØ˜“‰A ˆØˆcˆV�b˜˜�f‰_ˆØˆuˆäÐHÓIÐIrd   c                óÞ   • U(       d)  U (       + =(       d    U S   (       + =(       a
    U S   (       + $ U =(       a5    [        U S   [        5      =(       a    U S   U S   s=:H  =(       a    S:H  $ s  $ )Nr9   rŒ   r   )r�   Úlist)r   r‹   s     rc   r�   r�   æ   sY   € ÞØŒw×4˜c !™fœ*×4¨S°©W¬Ð4Ø×F”:˜c !™f¤dÓ+×F°°A±¸#¸b¹'×0FÓ0FÀQÑ0FÐFÑ0FÐFrd   c                óê   • U [         R                  L a  [        $ U u  pp4U(       d  U(       d  [        $ U$ U(       d  U$ [        U5      n[        U5      n[	        XS-
  Xd-
  5      nU[	        XV5      -
  nU* $ )aí  
Returns relative accuracy of a complex number with given accuracies
for the real and imaginary parts. The relative accuracy is defined
in the complex norm sense as ||z|+|error|| / |z| where error
is equal to (real absolute error) + (imag absolute error)*i.

The full expression for the (logarithmic) error can be approximated
easily by using the max norm to approximate the complex norm.

In the worst case (re and im equal), this is wrong by a factor
sqrt(2), or by log2(sqrt(2)) = 0.5 bit.
)r;   ÚComplexInfinityÚINFrs   Úmax)	ÚresultrR   rS   Úre_accÚim_accÚre_sizeÚim_sizeÚabsolute_errorÚrelative_errors	            rc   Úcomplex_accuracyr¢   ì   st   € ð ”×"Ñ"Ò"Üˆ
Ø#Ñ€BˆFÞÞÜˆJØˆÞØˆÜ�b‹k€GÜ�b‹k€GÜ˜Ñ)¨7Ñ+;Ó<€NØ#¤c¨'Ó&;Ñ;€NØˆ?Ðrd   c           	     óœ  • [        XS-   U5      nU[        R                  L a
  [        S US 4$ Uu  pEpgU(       d  XWXF4u  pFpWU(       ap  U R                  (       a.  [        [        [        XS-   5      5      US-   U5      u  p‰p©US U
S 4$ SU;   a  [        R                  " XE4U5      S US 4$ [        U 5      S US 4$ U(       a  [        U5      S US 4$ g)Nro   Úsubs©NNNN)
Úevalfr;   r˜   r   Ú	is_numberr`   ÚNÚlibmpÚmpc_absr   )ÚexprÚprecÚoptionsr›   rR   rS   rœ   r�   Úabs_exprÚ_Úaccs              rc   Úget_absr±   	  sÜ   € Ü�4 ™ 7Ó+€FØ”×"Ñ"Ò"Ü�T˜4 Ð%Ð%Ø#Ñ€BˆFÞØ!#¨RÐ!7Ñˆ�BÞ	Ø�>�>Ü"'¬¬A¨d¸1±HÓ,=Ó(>Ø(,¨q©°'ó#;ÑˆH˜à˜T 3¨Ð,Ð,à˜Ó Ü—}’} b X¨tÓ4°d¸FÀDÐHÐHÜ�t“9˜d D¨$Ð.Ð.Þ	Ü�r‹{˜D &¨$Ð.Ð.à%rd   c                óÚ   • UnSn [        XU5      nU[        R                  L a
  [        SUS4$ XaSS2   u  pxU(       a  X‚:¼  d
  US   * U:”  a  USUS4$ U[	        SSU-  5      -  nUS-  nMg  )z/no = 0 for real part, no = 1 for imaginary partr   r9   Nro   é   )r¦   r;   r˜   r   rš   )	r«   Únor¬   r­   r   r~   ÚresÚvalueÚaccuracys	            rc   Úget_complex_partr¸     s�   € à€HØ	€AØ
Ü�D GÓ,ˆØ”!×#Ñ#Ò#Ü˜˜t TÐ)Ð)Ø˜e !˜e™*‰ˆæ˜(Ó*¨u°Q©x¨i¸$Ó.>Ø˜$ ¨$Ð.Ð.Ø”C˜˜A˜q™D“MÑ!ˆØ	ˆQ‰ˆñ rd   c                ó4   • [        U R                  S   X5      $ ©Nr   )r±   Úargs©r«   r¬   r­   s      rc   Ú	evalf_absr½   /  s   € Ü�4—9‘9˜Q‘< Ó/Ð/rd   c                ó6   • [        U R                  S   SX5      $ rº   ©r¸   r»   r¼   s      rc   Úevalf_rerÀ   3  ó   € Ü˜DŸI™I a™L¨!¨TÓ;Ð;rd   c                ó6   • [        U R                  S   SX5      $ ©Nr   r9   r¿   r¼   s      rc   Úevalf_imrÄ   7  rÁ   rd   c                ó  • U [         :X  a  U[         :X  a  [        S5      eU [         :X  a  S US U4$ U[         :X  a  U S US 4$ [        U 5      n[        U5      nX4:”  a  UnU[        X4-
  * S5      -   nOUnU[        XC-
  * S5      -   nXXV4$ )Nz&got complex zero with unknown accuracyr   )r   r‘   rs   Úmin)rR   rS   r¬   Úsize_reÚsize_imrœ   r�   s          rc   Úfinalize_complexrÉ   ;  s¢   € Ø	ŒUƒ{�rœU“{ÜÐAÓBÐBØ	Œu‹Ø�R˜˜tÐ#Ð#Ø	Œu‹Ø�4˜˜tÐ#Ð#ä�b‹k€GÜ�b‹k€GØÓØˆØœ˜gÑ/Ð0°!Ó4Ñ4‰àˆØœ˜gÑ/Ð0°!Ó4Ñ4ˆØ�6Ð!Ð!rd   c                ó~  • U [         R                  L a  U $ U u  p#pEU(       a!  U[        ;  a  [        U5      U* S-   :  a  Su  p$U(       a!  U[        ;  a  [        U5      U* S-   :  a  Su  p5U(       aI  U(       aB  [        U5      [        U5      -
  nUS:  a  Xd-
  U* S-   ::  a  Su  p$US:  a  Xe-
  US-
  :¼  a  Su  p5X#XE4$ )z&
Chop off tiny real or complex parts.
r‰   ©NNro   )r;   r˜   r6   rs   )r¶   r¬   rR   rS   rœ   r�   Údeltas          rc   Ú
chop_partsrÍ   N  s¿   € ð ”×!Ñ!Ò!ØˆØ"Ñ€BˆFæ	ˆbœ	Ó!¤w¨r£{°d°U¸Q±YÓ'>Ø‰
ˆÞ	ˆbœ	Ó!¤w¨r£{°d°U¸Q±YÓ'>Ø‰
ˆæ	ŽbÜ˜“œg b›kÑ)ˆØ�A‹:˜5™>¨d¨U°Q©YÓ6Ø#‰JˆBØ�A‹:˜5™>¨T°A©XÓ5Ø#‰JˆBØ�6Ð!Ð!rd   c                ó@   • [        U5      nX2:  a  [        SU -  5      eg )Nz‡Failed to distinguish the expression: 

%s

from zero. Try simplifying the input, using chop=True, or providing a higher maxn for evalf)r¢   rf   )r«   r›   r¬   Úas       rc   Úcheck_targetrÐ   d  s0   € Ü˜Ó €AØƒxÜ ð "&à)-ñ"/ó 0ð 	0ð rd   c                óÆ  ^^^• SSK JnJn  Sn[        XT5      nU[        R
                  L a  [        S5      eUu  p‰p«U(       a,  U	(       a%  [        [        U5      U
-
  [        U	5      U-
  5      nO5U(       a  [        U5      U
-
  nOU	(       a  [        U	5      U-
  nO	U(       a  ggSnXÍ* :¼  a  XÖ-   U-   m[        U TT5      u  p‰p«OUmSUUU4S jjnSu  nnnnUb  U[        :w  a  U" U" U S	S
9U5      u  nnU	b  U	[        :w  a  U" U" U S	S
9U	5      u  nnU(       aB  [        [        U=(       d    [        5      5      [        [        U=(       d    [        5      5      4$ UUUU4$ )z�
With no = 1, computes ceiling(expr)
With no = -1, computes floor(expr)

Note: this function either gives the exact result or signals failure.
r   ©rR   rS   r³   z+Cannot get integer part of Complex Infinity©r   r   r¥   r]   c                ó6  >^• SSK Jn  Uu    p4nUS:H  n[        [        U[        5      5      nU(       an  [        X-
  ST5      u  pxpšU(       a   e[        U5      * S-   nUT:”  a  [        XT5      u  pxpšU(       a   eUn[        [        U[        5      5      nUu    p<nUS:H  nU(       d­  TR                  SS5      nU(       a<  S m[        U4S	 jUR                  5        5       5      (       a  U R                  U5      n U" X* SS
9n [        U ST5      u  pãpó [        XS US 4S5        U[        T[        U=(       d    [        [        5      T:H  -  5      -  n[!        U5      nU["        4$ ! [         a%    U R                  S5      (       d  [        e[        n Npf = f)Nr9   rA   r   r]   ro   r¤   Fc           	     óº   •  [        U SS9  g! [         aC     U R                  5        Vs/ s H  n[        USS9PM     Os  snf   n g! [         a      gf = ff = f)z)Check for integer or integer + I*integer.F)ÚstrictT)r?   r‘   Úas_real_imag)rr   r~   s     rc   Úis_int_reimÚ8get_integer_part.<locals>.calc_part.<locals>.is_int_reim´  s_   € ð)Ü˜q¨Ò/Ø#øÜ%ó )ð)Ø>?¿n¹nÔ>NÓOÒ>N¸œV A¨eÔ4Ò>NùÔOÙ#'øÜ)ó )Ú#(ð)úð	)ús/   ‚
 �
A˜Aª?¾AÁ
AÁAÁAÁAc              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr�   rh   )Ú.0ry   rØ   s     €rc   Ú	<genexpr>Ú6get_integer_part.<locals>.calc_part.<locals>.<genexpr>À  s   øé € Ð:ªz¨!‘{ 1—~�~ªzùs   ƒ©Úevaluaterp   )ÚaddrB   ra   r1   Úrndr¦   rs   ÚgetÚallÚvaluesr¤   rÐ   rf   Úequalsr   r!   r   r™   )Úre_imÚnexprrB   r¯   ÚexponentÚis_intÚnintÚireÚiimÚire_accÚiim_accÚsizeÚnew_expr”   rr   Úx_accrØ   r´   r­   r¬   s                   @€€€rc   Ú	calc_partÚ#get_integer_part.<locals>.calc_part—  sŠ  ù€ ÝØ!Ñˆˆ1˜Ø˜Q‘ˆÜ”6˜%¤Ó%Ó&ˆÞô */Ø‘˜b 'ó*+Ñ&ˆC�gæˆN�7Ü˜C“L�= 1Ñ$ˆDØ�d‹{Ü-2Ø ó.*Ñ*�˜'æ��wØ�Ü”v˜e¤SÓ)Ó*ˆDØ"ÑˆAˆq˜1Ø ‘\ˆFÞð —‘˜F EÓ*ˆAÞò
)ô Ô:¨q¯x©x¬zÓ:×:Ñ:Ø!ŸJ™J q›M�Eá˜˜u¨uÑ5ˆEÜ" 5¨"¨gÓ6‰NˆA�%ðÜ˜U¨¨e°TÐ$:¸AÔ>ð
 ”C˜œG A§J¬´Ó6¸"Ñ<Ñ=Ó>Ñ>ˆDÜ˜‹~ˆØ”SˆyÐøô &ó Ø—|‘| A—‘Ü,Ð,Ü’ðús   ÄE) Å),FÆFFrÞ   )ræ   r@   rç   ÚMPF_TUP)Ú$sympy.functions.elementary.complexesrR   rS   r¦   r;   r˜   r‘   rš   rs   r   ra   r1   )r«   r´   r­   Úreturn_intsrR   rS   Úassumed_sizer›   rë   rì   rí   rî   ÚgapÚmarginrò   Úre_Úim_rœ   r�   r¬   s    ``                @rc   Úget_integer_partrü   l  s_  ú€ ÷ <à€LÜ�4 wÓ/€FØ”×"Ñ"Ò"ÜÐFÓGÐGØ!'Ñ€Cˆgö ŽsÜ”'˜#“, Ñ(¬'°#«,¸Ñ*@ÓA‰Þ	Ü�c‹l˜WÑ$‰Þ	Ü�c‹l˜WÑ$‰ö Øà)à€Fà
ˆgƒ~ØÑ$ sÑ*ˆÜ%*Ø�$˜ó&!Ñ"ˆ�'˜7ð ˆ÷
6ñ 6ðp  6Ñ€Cˆˆf�fà
�˜3¤%›<Ù¡ 4°%Ñ 8¸#Ó>‰ˆˆVØ
�˜3¤%›<Ù¡ 4°%Ñ 8¸#Ó>‰ˆˆVæÜ”6˜#Ÿ,¤Ó'Ó(¬#¬f°S·\¼EÓ.BÓ*CÐCÐCØ��V˜VÐ#Ð#rd   c                ó6   • [        U R                  S   SU5      $ rÃ   ©rü   r»   r¼   s      rc   Úevalf_ceilingrÿ   Û  s   € Ü˜DŸI™I a™L¨!¨WÓ5Ð5rd   c                ó6   • [        U R                  S   SU5      $ )Nr   rŒ   rþ   r¼   s      rc   Úevalf_floorr  ß  s   € Ü˜DŸI™I a™L¨"¨gÓ6Ð6rd   c                ó"   • U R                   S US 4$ r�   )Ú_mpf_r¼   s      rc   Úevalf_floatr  ã  s   € Ø�:‰:�t˜T 4Ð'Ð'rd   c                óL   • [        U R                  U R                  U5      S US 4$ r�   )r   r“   Úqr¼   s      rc   Úevalf_rationalr  ç  s"   € Ü˜Ÿ™ §¡¨Ó.°°d¸DÐ@Ð@rd   c                ó6   • [        U R                  U5      S US 4$ r�   )r   r“   r¼   s      rc   Úevalf_integerr	  ë  s   € Ü�D—F‘F˜DÓ! 4¨¨tÐ3Ð3rd   c                ó–  • U  Vs/ s H  n[        US   5      (       a  M  UPM     n nU (       d  g[        U 5      S:X  a  U S   $ / nSSKJn  U  HP  nUR                  " US   S5      nU[
        R                  L d  UR                  (       d  M?  UR                  U5        MR     U(       a#  SSK	J
n  [        U" U6 US-   0 5      nUS   US   4$ SU-  n	Su  p«/ nU  H”  u  pÞUu  nnnnU(       a  U* nUR                  UU-   U-
  5        UU-
  nUU:¼  a8  UU	:”  a(  U
(       a  U[        [        U
5      5      -
  U	:”  a  Un
UnMf  U
UU-  -  n
Mp  U* nUU-
  U	:”  a  U
(       d  UUpºMˆ  MŠ  U
U-  U-   n
UnM–     [        U5      nU
(       d  [        U5      $ U
S:  a  SnU
* n
OSn[        U
5      nUU-   U-
  n[!        UX«UU["        5      U4nU$ s  snf )	aç  
Helper for evalf_add. Adds a list of (mpfval, accuracy) terms.

Returns
=======

- None, None if there are no non-zero terms;
- terms[0] if there is only 1 term;
- scaled_zero if the sum of the terms produces a zero by cancellation
  e.g. mpfs representing 1 and -1 would produce a scaled zero which need
  special handling since they are not actually zero and they are purposely
  malformed to ensure that they cannot be used in anything but accuracy
  calculations;
- a tuple that is scaled to target_prec that corresponds to the
  sum of the terms.

The returned mpf tuple will be normalized to target_prec; the input
prec is used to define the working precision.

XXX explain why this is needed and why one cannot just loop using mpf_add
r   rË   r9   ©rX   rA   r‰   ro   rÓ   )r�   r�   ÚnumbersrX   Ú_newr;   ÚNaNÚis_infiniteÚappendrà   rB   r¦   r4   r`   rš   r…   r/   rá   )Útermsr¬   Útarget_precr|   ÚspecialrX   ÚargrB   r’   Úworking_precÚsum_manÚsum_expÚabsolute_errrr   r·   r„   ÚmanrO   ÚbcrÌ   r    Úsum_signÚsum_bcÚsum_accuracyÚrs                            rc   Ú	add_termsr  õ  sú  € ñ0 Ó2š�1¤V¨A¨a©D§\�Q™€EÐ2ÞØÜ	ˆU‹�q‹Ø�Q‰xˆð €GÝÛˆØ�jŠj˜˜1™˜qÓ!ˆØ”!—%‘%Š<˜3Ÿ?Ÿ?™?Ø�N‰N˜3Öñ ö ÝÜ‘3˜�= $¨¡(¨BÓ/ˆØ�!‰u�b˜‘eˆ|Ðà�T‘6€LØÑ€GØ €Lã‰ˆØÑˆˆc�3˜ÞØ�$ˆCØ×Ñ˜B ™H xÑ/Ô0Ø�g‘ˆØ�'‹>ð ˜Ó%ÞØœ¤# g£,Ó/Ñ/°,Ó>Ø�Ø’à˜C 5™LÑ)’à�FˆEà�r‰z˜LÓ(ÞØ'*¨CšWñ ð # eÑ+¨sÑ2�Ø’ñ1 ô2 ˜Ó&€NÞÜ˜>Ó*Ð*Ø�ƒ{ØˆØ�(‰àˆÜ�gÓ€FØ˜VÑ# nÑ4€LÜ�(˜G¨f°kÜó	Øð	€Aà€Hùòw 3s
   …G Gc           	     óÒ  • [        U 5      nU(       a&  Uu  pE[        XAU5      u  pgp‡[        XQU5      u  p—p§XiXŠ4$ UR                  S[        5      nSnUn [	        USU-  5      US'   U R
                   Vs/ s H  n[        XáS-   U5      PM     nnUR                  [        R                  5      nUS:¼  a
  [        S US 4$ [        U Vs/ s H.  n[        U[        5      (       d  M  US   (       d  M&  USS S2   PM0     snX5      u  ph[        U Vs/ s H.  n[        U[        5      (       d  M  US   (       d  M&  USS S2   PM0     snX5      u  pšUS:X  aD  U[        [        [        4;   d  U	[        [        [        4;   a
  [        S US 4$ [        R                  $ [        XiXŠ45      nUU:¼  a%  UR                  S5      (       a  [!        SUSXŠ5        ONX-
  US   :”  a  OBU[#        SSU-  -   UU-
  5      -   nUS-  nUR                  S5      (       a  [!        S	U5        GMÊ  X²S'   [%        US
S9(       a  ['        U5      n[%        U	S
S9(       a  ['        U	5      n	XiXŠ4$ s  snf s  snf s  snf )NÚmaxprecr   r9   ro   r]   ÚverbosezADD: wantedúaccurate bits, gotzADD: restarting with precTrŠ   )r   r¦   râ   ÚDEFAULT_MAXPRECrÆ   r»   Úcountr;   r˜   r   r  r�   rŽ   r   r   r¢   Úprintrš   r�   r…   )ry   r¬   r­   rµ   r{   r}   rR   r¯   rœ   rS   r�   Ú
oldmaxprecr~   r  r  r  rb   rÏ   r°   s                      rc   Ú	evalf_addr(  K  sW  € Ü
�q‹/€CÞ
Ø‰ˆÜ  ¨'Ó2ÑˆˆvÜ  ¨'Ó2ÑˆˆvØ�vÐ%Ð%à—‘˜Y¬Ó8€Jà	€AØ€KØ
Ü  ¨Q¨t©VÓ4ˆ�	Ñà;<¿6º6ÓBº6°C”�s 2™I wÖ/¹6ˆÐBØ�K‰Kœ×)Ñ)Ó*ˆØ�‹6Ü˜˜t TÐ)Ð)ÜÙ#ÓEše˜¤z°!´U×';‹WÀÀ!Å‹WˆQˆqˆt�!ˆtŒW™eÑEÀtóZ‰
ˆäÙ#ÓEše˜¤z°!´U×';‹WÀÀ!Å‹WˆQˆqˆt�!ˆtŒW™eÑEÀtóZ‰
ˆà�‹6Ø”dœE¤4Ð(Ó(¨B´4¼ÄÐ2EÓ,EÜ˜T 4¨Ð-Ð-Ü×$Ñ$Ð$Ü ¨Ð7Ó8ˆØ�+ÓØ�{‰{˜9×%Ñ%Ü�m [Ð2FÈÔWØàÑ" g¨iÑ&8Ó8Øàœ#˜b 1 a¡4™i¨°sÑ):Ó;Ñ;ˆDØ�‰FˆAØ�{‰{˜9×%Ñ%ÜÐ1°4Ô8ò7 ð: $ˆIÑÜˆb˜×Ü˜‹_ˆÜˆb˜×Ü˜‹_ˆØ�6Ð!Ð!ùò? Cùò
 FùâEs*   Á4IÃIÃ$IÃ0IÄI$Ä,I$Ä8I$c           
     ó¼  • [        U 5      nU(       a  Uu  pE[        XQU5      u  pdptS US U4$ [        U R                  5      nSn	/ n
SSKJn  U Hž  n[        XÁU5      nU[        R                  L a  U
R                  U5        M5  US   c
  US   c  Sn	ME  UR                  " US   S5      nU[        R                  L a  [        S US 4s  $ UR                  (       d  M�  U
R                  U5        M      U
(       a*  U	(       a
  [        S US 4$ SSKJn  [        U" U
6 US-   0 5      $ U	(       a  gUnU[        U5      -   S	-   n[!        S5      SS4=nu  nnn[        U5      nSnUR                  [        R"                  5        / n[%        U5       Hù  u  nnUU:w  a+  [        U5      (       a  US
   U-  R'                  5       US
'   M7  UU:X  a  U[        R"                  L a  MR  [        UUU5      u  nnnnU(       a  U(       a  UR                  UUUU45        M‰  U(       a  UUsu  nnnnn OU(       a  Xgsu  nnnnn US-  nO  gUSU-  -  nUU-  nUU-  nUU-  nUSU-  :”  a  UU-  nUU-  nUU-  nUSU-  :”  a  M  [)        UU 5      nMû     US-  S-	  n!U(       d3  [+        U!UU[-        U5      U[.        5      n US-  (       a  S U S U4$ U S US 4$ UUU4U:w  a!  U!UU[-        U5      4S[!        S5      SS4nnSn"O)US   u  n#n$n%n&[)        U[1        U#U$U%U&45      5      nU#nU$nSn"UU"S   Hz  u  n#n$n%n&[)        U[1        U#U$U%U&45      5      nUn'[3        UU#U'5      n([3        [5        U5      U$U'5      n)[3        UU$U'5      n*[3        UU#U'5      n+[7        U(U)U'5      n[7        U*U+U'5      nM|     UR9                  S5      (       a  [;        SUSU5        US-  (       a  [5        U5      UnnUUUU4$ )NFr9   r  r   TrC   r‰   r¥   é   rŒ   ro   rp   r"  zMUL: wantedr#  )r   r¦   r–   r»   r  rX   r;   r˜   r  r  r  r   r  ÚmulrD   r�   r5   ÚOneÚ	enumerateÚexpandrÆ   r/   r4   rá   r¢   r'   r(   r   râ   r&  ),ry   r¬   r­   rµ   r¯   r{   rS   r�   r»   Úhas_zeror  rX   r  r›   ÚnumrD   r°   r  Ústartr  rO   r  ÚlastÚ	directionÚcomplex_factorsr~   rR   rœ   r”   ÚmÚeÚbÚw_accr„   Úi0ÚwreÚwimÚwre_accÚwim_accÚuse_precÚAÚBÚCÚDs,                                               rc   Ú	evalf_mulrC  |  sM  € Ü
�q‹/€CÞ
à‰ˆÜ  ¨'Ó2ÑˆˆvØ�R˜˜vÐ%Ð%Ü�—‘‹<€Dð €HØ€GÝÛˆÜ�s 'Ó*ˆØ”Q×&Ñ&Ò&Ø�N‰N˜6Ô"ÙØ�!‰9ÑØ�a‰yÑ Ø�ÙØ�jŠj˜ ™ AÓ&ˆØ”!—%‘%Š<Ü˜˜t TÐ)Ò)Ø�?�?‰?Ø�N‰N˜3Öñ ö ÞÜ˜˜t TÐ)Ð)ÝÜ‘S˜'�] D¨1¡H¨bÓ1Ð1ÞØ%ð €Cð œ#˜d›)Ñ# aÑ'€Lô ˜q›6 1 a˜<Ð'€E‰LˆC��bô ˆt‹9€DØ€IØ‡K�K”—‘ÔØ€Oä˜D–/‰ˆˆ3Ø�‹9œ c×*Ñ*Ø˜R™ ™×,Ñ,Ó.ˆD�‰HÙØ�$‹Y˜3¤!§%¡%š<ÙÜ!& s¨L¸'Ó!BÑˆˆB�˜Þ–"Ø×"Ñ" B¨¨F°FÐ#;Ô<ÙÞØ"$ fÐ‰LˆQ��1�a™%ÞØ"$Ð‰LˆQ��1�a˜%Ø˜‰N‰Iá)Ø�Q�q‘SÑˆ	Øˆq‰ˆØˆq‰ˆØ
ˆa‰ˆØ�1�\‘>Ó!Ø�LÑ ˆCØ�<ÑˆCØ�,ÑˆBð �1�\‘>Õ!ô �#�u‹oŠñ3 "ð4 ˜‰M˜aÑ€DÞÜ�d˜C ¤h¨s£m°T¼3Ó?ˆà�q�=Ø˜˜D #Ð%Ð%à�d˜C Ð%Ð%ð ��bˆ>˜UÓ"à˜C ¤h¨s£mÐ4°q¼#¸a»&À!ÀQÐ6G�ˆBØ‰Bð *9¸Ñ);Ñ&ˆC��g˜wÜ�cÜ&¨¨S°'¸7Ð'CÓDóFˆCàˆBØˆBØˆBà*9¸"¸#Ó*>Ñ&ˆC��g˜wô �cÜ&¨¨S°'¸7Ð'CÓDóFˆCð $ˆHÜ˜˜C Ó*ˆAÜœ › S¨(Ó3ˆAÜ˜˜C Ó*ˆAÜ˜˜C Ó*ˆAÜ˜˜A˜xÓ(ˆBÜ˜˜A˜xÓ(ŠBñ +?ð �;‰;�y×!Ñ!Ü�- Ð';¸SÔAà�q�=Ü˜R“[ "�ˆBØ�2�s˜CÐÐrd   c                óz  • UnU R                   u  pEUR                  (       Ga;  UR                  nU(       d
  [        S US 4$ U[	        [
        R                  " [        U5      5      5      -  n[        XAS-   U5      nU[        R                  L a	  US:  a  gU$ Uu  p‰p«U(       a  U	(       d  [        X†U5      S US 4$ U	(       aZ  U(       dS  [        X–U5      nUS-  nUS:X  a  US US 4$ US:X  a  S US U4$ US:X  a  [        U5      S US 4$ US:X  a  S [        U5      S U4$ U(       d  US:  a  [        R                  $ g[        R                  " X‰4Xa5      u  p‰[        X‰U5      $ [        XAS-   U5      nU[        R                  L a   UR                   (       a	  US:  a  gU$ ["        eU[        R$                  L a†  Uu  pï  nU(       a4  [        R&                  " U=(       d    [(        U4U5      u  p‰[        X‰U5      $ U(       d  g[+        U[(        5      (       a  S [-        [        U5      U5      S U4$ [-        Xá5      S US 4$ US-  n[        XQU5      nU[        R                  L a
  [.        S US 4$ Uu  nn  nU(       d  U(       d
  [        S US 4$ [1        U5      nUS:”  a  UU-  n[        XQU5      u  nn  nU[        R2                  L aK  U(       a4  [        R4                  " U=(       d    [(        U4U5      u  p‰[        X‰U5      $ [7        UU5      S US 4$ [        XAS-   U5      u  pï  nU(       d2  U(       d+  U(       a
  [.        S US 4$ US   S:X  a  [        R                  $ gU(       aQ  [        R8                  " U=(       d    [(        U=(       d    [(        4U=(       d    [(        U4U5      u  p‰[        X‰U5      $ U(       a5  [        R:                  " U=(       d    [(        U4UU5      u  p‰[        X‰U5      $ [+        U[(        5      (       a,  [        R:                  " U[(        4UU5      u  p‰[        X‰U5      $ [=        UUU5      S US 4$ )	Nr*  r   r¥   r‰   r9   ro   rp   r]   )r»   Ú
is_Integerr“   r   ra   ÚmathÚlog2r`   r¦   r;   r˜   r+   r(   r©   Úmpc_pow_intrÉ   Úis_RationalÚNotImplementedErrorÚHalfÚmpc_sqrtr   r&   r.   r   rs   ÚExp1Úmpc_expr$   Úmpc_powÚmpc_pow_mpfr*   )ry   r¬   r­   r  ÚbaserO   r“   r›   rR   rS   rœ   r�   ÚzÚcaseÚxreÚximr¯   ÚyreÚyimÚysizes                       rc   Ú	evalf_powrY  ú  sô  € à€KØ—‘�I€Dð
 ‡~‡~€~Ø—‘ˆæÜ˜˜t TÐ)Ð)ð 	””D—I’Iœc !›fÓ%Ó&Ñ&ˆÜ�t A™X wÓ/ˆØ”Q×&Ñ&Ò&Ø�1‹uØ-ØˆMØ!'Ñˆ�æ–bÜ˜r kÓ2°D¸+ÀtÐKÐKæ–bÜ˜B ;Ó/ˆAØ�q‘5ˆDØ�q‹yØ˜$ ¨TÐ1Ð1Ø�q‹yØ˜Q  kÐ1Ð1Ø�q‹yÜ˜q“z 4¨°dÐ:Ð:Ø�q‹yØœW Q›Z¨¨{Ð:Ð:æØ�1‹uÜ×(Ñ(Ð(Ø)ä×"Ò" B 8¨QÓ5‰ˆä ¨Ó4Ð4ä�4 ™ 7Ó+€FØ”×"Ñ"Ò"Ø�?�?Ø�Q‹wØ-ØˆMÜ!Ð!ð Œa�f‰f‚}Ø‰ˆ�!�QæÜ—^’^ S§\¬E°3Ð$7¸Ó>‰FˆBÜ# B¨DÓ1Ð1ÞØ)ä�#”u×ÑØœ¤'¨#£,°Ó5°t¸TÐAÐAä˜Ó" D¨$°Ð4Ð4ð 	ˆB�J€DÜ�3˜gÓ&€FØ”×"Ñ"Ò"Ü�T˜4 Ð%Ð%Ø�N€Cˆˆa�æ–3Ü�T˜4 Ð%Ð%ä�C‹L€Eð ˆqƒyØ�‰ˆÜ˜s¨'Ó2‰ˆˆS�!�Qð Œq�v‰v‚~ÞÜ—]’] C§L¬5°#Ð#6¸Ó=‰FˆBÜ# B¨KÓ8Ð8Ü�s˜KÓ(¨$°¸TÐAÐAä˜4¨¡¨7Ó3�N€Cˆa�æ–3ÞÜ˜˜t TÐ)Ð)Øˆq‰6�Q‹;Ü×$Ñ$Ð$Ø%ö Ü—’Ø�\”E˜3Ÿ<¤%Ð(¨3¯<´%¸Ð*=Øó‰ˆô   ¨Ó4Ð4æ
Ü×"Ò" C§L¬5°#Ð#6¸¸[ÓI‰ˆÜ ¨Ó4Ð4ä	�”U×	Ñ	Ü×"Ò" C¬ <°°kÓB‰ˆÜ ¨Ó4Ð4ô �s˜C Ó-¨t°[À$ÐFÐFrd   c                ób   • SSK Jn  [        U" [        R                  U R
                  SS9X5      $ )Nr9   rE   FrÞ   )ÚpowerrF   rY  r;   rM  rO   )r«   r¬   r­   rF   s       rc   Ú	evalf_expr\  |  s#   € ÝÜ‘SœŸ™ §¡°EÑ:¸DÓJÐJrd   c                ó°  • SSK JnJnJn  [	        X5      (       a  [
        nO4[	        X5      (       a  [        nO[	        X5      (       a  [        nO[        eU R                  S   nUS-   n[        XxU5      u  pšp¼U
(       a5  SU;   a  U R                  US   5      n [        U R                  U5      X5      $ U	(       dB  [	        X5      (       a
  [        SUS4$ [	        X5      (       a  g[	        X5      (       a  g[        e[        U	5      nUS:  a  U" X‘[        5      SUS4$ US:¼  a  X-   n[        XxU5      u  pšp¼ U" X‘[        5      n[        U5      nU* nX�-
  U-
  nUU:  ap  UR!                  S	5      (       a%  [#        S
USUSU5        [#        [%        US5      5        X‚R!                  S[&        5      :”  a  USUS4$ UU-  n[        XxU5      u  pšp¼M™  USUS4$ )z@
This function handles sin , cos and tan of complex arguments.

r   )ÚcosÚsinÚtané   r¤   Nr¥   r9   r]   r"  zSIN/COS/TANÚwantedrø   r!  )Ú(sympy.functions.elementary.trigonometricr^  r_  r`  r�   r"   r-   r3   rJ  r»   r¦   r¤   Ú_eval_evalfr   rs   rá   râ   r&  r2   r$  )ry   r¬   r­   r^  r_  r`  Úfuncr  ÚxprecrR   rS   rœ   r�   ÚxsizeÚyrX  rø   r·   s                     rc   Ú
evalf_trigri  �  sÔ  € ÷
 GÑFÜ�!×ÑÜ‰Ü	�A×	Ñ	Ü‰Ü	�A×	Ñ	Ü‰ä!Ð!Ø
�&‰&�‰)€Cð �2‰I€EÜ" 3¨wÓ7Ñ€BˆFÞ	Ø�WÓØ—‘�w˜v‘Ó'ˆAÜ�Q—]‘] 4Ó(¨$Ó8Ð8ÞÜ�a×ÑÜ˜˜t TÐ)Ð)Ü˜×ÑØ)Ü˜×ÑØ)ä%Ð%ô �B‹K€Eð ˆqƒyÙ�BœcÓ" D¨$°Ð4Ð4à�ƒ{Ø‘ˆÜ!& s°7Ó!;Ñˆ�ð Ù�œ3ÓˆÜ˜“
ˆØˆfˆØ‘M SÑ(ˆØ�d‹?Ø�{‰{˜9×%Ñ%Ü�m X¨x¸¸uÀcÔJÜ”f˜Q “mÔ$Ø—{‘{ 9¬oÓ>Ó>Ø˜$ ¨$Ð.Ð.Ø�S‰LˆEÜ%*¨3°wÓ%?Ñ"ˆB�FÙà�d˜D $Ð&Ð&rd   c           	     ó2  • [        U R                  5      S:”  a  U R                  5       n [        XU5      $ U R                  S   nUS-   n[        X4U5      nU[        R
                  L a  U$ Uu  pgp‰Xgs=L a  c	  O  O[        nU(       aF  SSKJn
  SSK	J
n  [        U" U
" USS9SS9X5      n[        Xv=(       d    [        U5      nUS   XÜS   U4$ [        U[        5      S:  n[        [        U5      U[         5      n[#        U5      nX-
  U:”  am  U[        :w  ac  SS	KJn  U" [        R(                  USS9n[+        UX5      u  pg  n	U[#        U5      -
  n[        [        [-        U[.        U5      5      U[         5      nUnU(       a  U[1        U5      UU4$ US US 4$ )
Nr9   r   r]   )rQ   )rP   FrÞ   ro   rA   )r�   r»   Údoitr¦   r;   r˜   r   rõ   rQ   Ú&sympy.functions.elementary.exponentialrP   Ú	evalf_logr    r!   r%   r   rá   rs   rà   rB   ÚNegativeOner(  r   r   r)   )r«   r¬   r­   r  r   r›   rT  rU  Úxaccr¯   rQ   rP   rR   rS   Úimaginary_termrï   rB   rà   Úprec2rœ   s                       rc   rm  rm  Á  s€  € Ü
ˆ4�9‰9ƒ~�aÓØ�y‰y‹{ˆÜ�T Ó)Ð)Ø
�)‰)�A‰,€CØ�b‰y€HÜ�3 'Ó*€FØ”×"Ñ"Ò"ØˆØÑ€Cˆdð ×Ñô ˆæ
Ý<Ý>ô Ù‘�C %Ñ(°5Ñ9¸4óJˆä�sŸL¤5¨$Ó/ˆØ�!‰u�b˜Q™% Ð%Ð%ä˜c¤5Ó)¨AÑ-€Nä	”˜“˜t¤SÓ	)€BÜ�2‹;€DØ�{�XÓ "¬£+Ýá”!—-‘- ¨uÑ5ˆÜ" 3¨Ó6‰ˆ�!�QØœ7 3›<Ñ'ˆä”WœW S¬$°Ó6Ó7¸¼sÓCˆà€FæØ”6˜$“< ¨Ð-Ð-à�4˜ Ð%Ð%rd   c                óœ   • U R                   S   n[        X1S-   U5      u  pEpgXEs=L a  c   g  U(       a  [        e[        XA[        5      S US 4$ )Nr   r*  r¥   )r»   r¦   rJ  r   rá   )ry   r¬   r­   r  rT  rU  ÚreaccÚimaccs           rc   Ú
evalf_atanru  ö  sQ   € Ø
�&‰&�‰)€CÜ" 3¨q©°'Ó:Ñ€CˆeØ
×Øð æ
Ü!Ð!Ü�CœsÓ# T¨4°Ð5Ð5rd   c                óž   • 0 nUR                  5        H6  u  p4[        U5      nUR                  (       a  UR                  U 5      nXBU'   M8     U$ )z;Change all Float entries in `subs` to have precision prec. )Úitemsr;   Úis_Floatrd  )r¬   r¤   ÚnewsubsrÏ   r7  s        rc   Ú
evalf_subsrz     sE   € à€GØ—
‘
–‰ˆÜˆa‹DˆØ�:�:Ø—‘˜dÓ#ˆAØ�‹
ñ	 ð
 €Nrd   c                ó`  • SSK JnJn  SU;   a›  U R                  [	        XS   5      5      n UR                  5       nUS	 [        U S5      (       a  [        XU5      $ [        U [        5      (       a  [        U" U 5      X5      $ [        U [        5      (       a  [        U" U 5      X5      $ [        e)Nr9   )rX   rZ   r¤   re  )r  rX   rZ   r¤   rz  ÚcopyÚhasattrr¦   r�   Úfloatra   rJ  )r«   r¬   r­   rX   rZ   Únewoptss         rc   Úevalf_piecewiser€    s”   € ß'Ø�ÓØ�y‰yœ D°&©/Ó:Ó;ˆØ—,‘,“.ˆØ�FˆOÜ�4˜× Ñ Ü˜ WÓ-Ð-Ü�dœE×"Ñ"Ü™˜t› dÓ4Ð4Ü�dœC× Ñ Ü™ ›¨Ó6Ð6ô Ðrd   c                ó6   • [        U R                  5       X5      $ r�   )r¦   Úto_root)rÏ   r¬   r­   s      rc   Úevalf_alg_numrƒ    s   € Ü�—‘“˜dÓ,Ð,rd   c                ó  • SSK JnJnJn  [	        U 5      n [        X5      (       d  U S:X  a  [        S5      $ [        X5      (       a  [        S5      $ [        X5      (       a  [        S5      $ [        XU5      n[        U5      $ )Nr9   )ÚInfinityÚNegativeInfinityrx   g        r   r   z-inf)	r  r…  r†  rx   r:   r�   r   r¦   Úquad_to_mpmath)rr   r¬   r­   r…  r†  rx   r›   s          rc   Ú	as_mpmathrˆ  &  sl   € ß9Ñ9Ü�‹
€AÜ�!×Ñ˜a 3›hÜ�1‹vˆÜ�!×ÑÜ�5‹zÐÜ�!×&Ñ&Ü�6‹{Ðä�1˜GÓ$€FÜ˜&Ó!Ð!rd   c           	     ó  ^^^^^• U R                   S   mU R                   S   u  mp4X4:X  a  S=p4OFTTR                  ;  a6  UR                  UR                  -  (       a  XC-
  nUR                  (       a  SUpCUR                  S[        5      n[        USU-  5      US'   [        US-   5         [        X1S-   U5      n[        XAS-   U5      nSSKJ	nJ
n  SSKJn	  S	S	/m[        m[        mSUUUUU4S
 jjn
UR                  S5      S:X  aª  U	" ST/S9nU	" ST/S9nU	" S5      nTR                  U" UT-  U-   5      U-  5      nU(       d   TR                  U" UT-  U-   5      U-  5      nU(       d  [        S5      e[        S[         R"                  -  Xë   -  US-   U5      n[%        X£U/US9n[        nO$['        X£U/SS9u  nn[)        UR*                  5      nS S S 5        XbS'   TS   (       au  WR,                  R*                  nU[.        :X  a/  [1        [3        [5        UTW5      * 5      5      u  nn[1        U5      nO+[3        [5        T[)        U5      -
  U-
  W5      * 5      nOSu  nnTS   (       au  WR6                  R*                  nU[.        :X  a/  [1        [3        [5        UTW5      * 5      5      u  nn[1        U5      nO+[3        [5        T[)        U5      -
  U-
  W5      * 5      nOSu  nnUUUU4nU$ ! , (       d  f       GN#= f)Nr   r9   r!  ro   r*  é   )r^  r_  )ÚWildFc                óP  >• [        T[        R                  ST	U 005      u  pp4U=(       d    TS   TS'   U=(       d    TS   TS'   [        T[	        U5      5      m[        T[	        U5      5      mU(       a  [        U=(       d    [        U5      $ [        U=(       d    [        5      $ )Nr¤   r   r9   )r¦   r   r¬   rš   rs   r   r   r   )
r|   rR   rS   rœ   r�   re  Ú	have_partÚmax_imag_termÚmax_real_termrr   s
        €€€€€rc   ÚfÚdo_integral.<locals>.fW  sŠ   ø€ ä%*¨4´·±¸6ÀAÀqÀ6Ð:JÓ%KÑ"ˆB�Fà×- ¨1¡ˆI�a‰LØ×- ¨1¡ˆI�a‰Lä ¬w°r«{Ó;ˆMÜ ¬w°r«{Ó;ˆMæÜ˜2Ÿ;¤¨Ó+Ð+Ü�r—{œUÓ#Ð#rd   ÚquadÚoscr?  )Úexcluder@  rB  zbAn integrand of the form sin(A*x+B)*f(x) or cos(A*x+B)*f(x) is required for oscillatory quadrature)Úperiod)ÚerrorrË   )r|   r@   Úreturnú	mpc | mpf)r»   Úfree_symbolsr§   râ   r$  rÆ   r   rˆ  rc  r^  r_  Úsymbolr‹  rq   Úmatchr‘   r;   ÚPir   r   rs   r  Úrealr   r…   ra   rš   Úimag)r«   r¬   r­   ÚxlowÚxhighÚdiffr'  r^  r_  r‹  r�  r?  r@  rB  r5  r•  r›   Úquadrature_errorÚquadrature_errrR   Úre_srœ   rS   Úim_sr�   re  r�  rŽ  r�  rr   s                            @@@@@rc   Údo_integralr¦  4  sß  ü€ Ø�9‰9�Q‰<€DØ—Y‘Y˜q‘\�N€A€tØƒ}ØÐˆˆuØ	
�$×#Ñ#Ó	#ð
 ×Ñ × 1Ñ 1×1Ø‘<ˆDØ�~�~Ø �eà—‘˜Y¬Ó8€JÜ˜Z¨¨4©Ó0€GˆIÑä	�$˜‘(Õ	Ü˜ b™y¨'Ó2ˆÜ˜%¨¡¨GÓ4ˆ÷ 	FÝ à˜E�Nˆ	Ü%.ˆÜ%.ˆ÷	$ó 	$ð �;‰;�vÓ %Ó'Ù�S 1 #Ñ&ˆAÙ�S 1 #Ñ&ˆAÙ�S“	ˆAØ—
‘
™3˜q ™s Q™w›<¨™>Ó*ˆAÞØ—J‘J™s 1 Q¡3¨¡7›|¨A™~Ó.�ÞÜ ð "Nó Oð Oä˜q¤§¡™v a¡d™{¨D°2©I°wÓ?ˆFÜ˜Q u °fÑ=ˆFä(Ñä%+¨A°e¨}ÀAÑ%FÑ"ˆF�NÜ& ~×';Ñ';Ó<Ð÷_ 
ðb $ˆIÑà�‡|Ø#Ÿ[™[×.Ñ.ˆà”‹;Ü&¤s¬C°°mÐEUÓ,VÐ+VÓ'WÓX‰LˆD�&Ü˜TÓ"‰Bäœ#˜m¬g°b«kÑ9¸DÑ@ÐBRÓSÐSÓT‰Fà‰
ˆˆFà�‡|Ø#Ÿ[™[×.Ñ.ˆà”‹;Ü&¤s¬C°°mÐEUÓ,VÐ+VÓ'WÓX‰LˆD�&Ü˜TÓ"‰Bäœ#˜m¬g°b«kÑ9¸DÑ@ÐBRÓSÐSÓT‰Fà‰
ˆˆFà��V˜VÐ#€FØ€M÷U 
Ö	ús   Â,D,K4Ë4
Lc                óL  • U R                   n[        U5      S:w  d  [        US   5      S:w  a  [        eUnSnUR                  S[        5      n [        XU5      n[        U5      nX�:¼  a   U$ XF:¼  a   U$ US:X  a  US-  nOU[        USU-  5      -  n[        XF5      nUS-  nMW  )Nr9   r   rp   r!  rŒ   ro   )	Úlimitsr�   rJ  râ   r™   r¦  r¢   rš   rÆ   )	r«   r¬   r­   r¨  r   r~   r!  r›   r·   s	            rc   Úevalf_integralr©  “  sÁ   € Ø�[‰[€FÜ
ˆ6ƒ{�aÓœ3˜v a™y›>¨QÓ.Ü!Ð!Ø€HØ	€AØ�k‰k˜)¤SÓ)€GØ
Ü˜T¨WÓ5ˆÜ# FÓ+ˆØÓØð €Mð ÓØð €Mð �r‹>ð ˜‰M‰Hàœ˜D ! Q¡$›Ñ'ˆHÜ�xÓ)ˆØ	ˆQ‰ˆñ rd   c                óì  • SSK Jn  U" X5      nU" X5      nUR                  5       nUR                  5       nXv-
  nU(       a  USS4$ UR                  5       UR                  5       -  n	SSKJn
  U
" [        U	5      S5      (       d  X‰S4$ UR                  5       UR                  5       s=:X  a  S:X  a  O  OX‰S4$ UR                  5       S   nUR                  5       S   nX‰XË-
  UR                  5       -  4$ )a	  
Returns
=======

(h, g, p) where
-- h is:
    > 0 for convergence of rate 1/factorial(n)**h
    < 0 for divergence of rate factorial(n)**(-h)
    = 0 for geometric or polynomial convergence or divergence

-- abs(g) is:
    > 1 for geometric convergence of rate 1/h**n
    < 1 for geometric divergence of rate h**n
    = 1 for polynomial convergence or divergence

    (g < 0 indicates an alternating series)

-- p is:
    > 1 for polynomial convergence of rate 1/n**h
    <= 1 for polynomial divergence of rate n**(-h)

r   )ÚPolyNr9   )Úequal_valued)Úsympy.polys.polytoolsr«  ÚdegreeÚLCr  r¬  r`   Ú
all_coeffs)ÚnumerÚdenomrb   r«  ÚnpolÚdpolr“   r  ÚrateÚconstantr¬  ÚpcÚqcs                rc   Úcheck_convergencer¹  ­  sÙ   € õ. +Ù�‹>€DÙ�‹>€DØ�‰‹€AØ�‰‹€AØ‰5€DÞØ�T˜4ÐÐØ�w‰w‹y˜4Ÿ7™7›9Ñ$€HÝ%Ùœ˜H› q×)Ñ)Ø˜tÐ#Ð#Ø‡{�{ƒ}˜Ÿ™›Õ*¨Ö*Ø˜qÐ Ð Ø	�‰Ó	˜1Ñ	€BØ	�‰Ó	˜1Ñ	€BØ˜B™G T§W¡W£YÑ.Ð.Ð.rd   c                óò  ^^^• SSK JnJn  SSKJn  U[        S5      :X  a  [        S5      eU(       a  U R                  XU-   5      n U" X5      nUc  [        S5      eUR                  5       u  p‰[        X5      m[        X5      m[        X‰U5      u  p«nU
S:  a  [        S	U
* -  5      eU R                  US5      nUR                  (       d  [        S
5      eUnU
S:”  d  U
S:X  a›  [        U5      S:”  aŒ  [        UR                  5      U-  UR                   -  nUnSn[        U5      S:”  aH  U[        T" US-
  5      5      -  nU[        T" US-
  5      5      -  nXþ-  nUS-  n[        U5      S:”  a  MH  [#        Xó* 5      $ US:  n[        U5      S:  a  [        S[        SU-  5      -  5      eUS:  d  U" US5      (       a  U(       d  [        SU* -  5      eSn[%        U5      n SU-  m[        UR                  5      T-  UR                   -  nU/4UUU4S jjn['        U5         [)        US[*        /SS9nSSS5        U" WU5      nUb  UU:X  a   UR,                  $ X3-  nUnM‚  ! , (       d  f       N5= f)zÇ
Sum a rapidly convergent infinite hypergeometric series with
given general term, e.g. e = hypsum(1/factorial(n), n). The
quotient between successive terms must be a quotient of integer
polynomials.
r9   )rX   r¬  r   )Ú	hypersimpr   zdoes not support inf precNz#a hypergeometric series is requiredzSum diverges like (n!)^%iz3Non rational term functionality is not implemented.r*  zSum diverges like (%i)^nzSum diverges like n^%ir‰   c           	     óÖ   >• U (       aI  [        U 5      n US==   [        T" U S-
  5      5      -  ss'   US==   [        T" U S-
  5      5      -  ss'   [        [        US   T* 5      5      $ rÃ   )ra   r5   r
   r   )ÚkÚ_termÚfunc1Úfunc2rq  s     €€€rc   ÚsummandÚhypsum.<locals>.summand  s]   ø€ ÞÜ˜A›�AØ˜!“H¤¡E¨!¨a©%£LÓ 1Ñ1“HØ˜!“H¤¡U¨1¨q©5£\Ó!2Ñ2“HÜ¤¨U°1©X¸°vÓ >Ó?Ð?rd   Ú
richardson)Úmethod)r  rX   r¬  Úsympy.simplify.simplifyr»  r~  rJ  r¤   Úas_numer_denomr>   r¹  r‘   rI  r`   r5   r“   r  r   r8   r   r   Ú
mpmath_infr  )r«   rb   r1  r¬   rX   r¬  r»  Úhsr0  Údenr{   Úgr“   ÚetermÚtermr”   r½  ÚaltÚvoldÚndigÚterm0rÁ  ry   Úvfr¿  rÀ  rq  s                           @@@rc   ÚhypsumrÒ  ×  sk  ú€ ÷ -Ý1àŒu�U‹|ÓÜ!Ð"=Ó>Ð>æØ�y‰y˜ ™IÓ&ˆÙ	�4Ó	€BØ	�zÜ!Ð"GÓHÐHØ× Ñ Ó"�H€Cä�QÓ€EÜ�QÓ€Eä ¨!Ó,�G€Aˆ!àˆ1ƒuÜÐ4¸¸Ñ;Ó<Ð<à�I‰I�a˜‹O€EØ××Ü!Ð"WÓXÐXà€Dð 	ˆ1ƒu��a“œC ›F Q›JÜ�D—F‘F“˜tÑ#¨¯©Ñ.ˆØˆØˆÜ�$‹i˜!‹mØ”C™˜a !™e›Ó%Ñ%ˆDØ”S™˜q 1™u›Ó&Ñ&ˆDØ‰IˆAØ�‰FˆAô	 �$‹i˜!�mô
 ˜A˜uÓ%Ð%à�!‰eˆÜˆq‹6�A‹:ÜÐ7¼#¸aÀ¹c»(ÑBÓCÐCØˆq‹5‘\ ! Q×'Ñ'¶ÜÐ5¸!¸Ñ<Ó=Ð=àˆÜ˜4Ó ˆØð �d‘FˆEÜ˜Ÿ™“[ EÑ)¨d¯f©fÑ4ˆEà"' ÷ @ñ @ô ˜$•Ü˜ 1¤j /¸,ÑG�÷  á�q˜$“ˆBØÑ D¨B£JØð �w‰wˆð ‰LˆDØˆDñ) ÷  •ús   È'I(É(
I6c                óº   • [        S U R                   5       5      (       a  [        U R                  5       XS9nU$ SSKJn  [        U R                  U5      XS9nU$ )Nc              3  óJ   #   • U  H  oS    US   -
  R                   v •  M     g7f)r9   ro   N)rE  )rÛ   Úls     rc   rÜ   Úevalf_prod.<locals>.<genexpr>'  s    é € Ð
9ª[¨ˆa‰D�1�Q‘4‰K×#Ö#ª[ùs   ‚!#)r¬   r­   r   rJ   )rã   r¨  r¦   rk  Úsympy.concrete.summationsrK   Úrewrite)r«   r¬   r­   r›   rK   s        rc   Ú
evalf_prodrÙ  &  sO   € Ü
Ñ
9¨T¯[ª[Ó
9×9Ñ9Ü�t—y‘y“{¨Ñ?ˆð €Mõ 	2Ü�t—|‘| CÓ(¨tÑEˆØ€Mrd   c           	     ó´  • SSK Jn  SU;   a  U R                  US   5      n U R                  nU R                  n[        U5      S:w  d  [        US   5      S:w  a  [        eUR                  (       a  S S US 4$ US-   n US   u  pxn	U	[        R                  Ld"  U[        R                  L d  U[        U5      :w  a  [        e[        XG[        U5      U5      n
U[        U
5      -
  n[        U
5      S:  a  [        XG[        U5      U5      n
U
S [        X5      S 4$ ! [         aµ    U" S5      U* -  n[        SS	5       HQ  nS
U-  U-  =pçU R!                  XçUSS9u  nnUR#                  5       nU[        R$                  L a  [        eUU::  d  MQ    O   [        [#        ['        W5      SU5      S   5      n[#        WXb5      u  nnnnUc  U* nUc  U* nUUUU4s $ f = f)Nr9   r  r¤   r   rp   r]   iöÿÿÿg       @r*  ro   F)r5  rb   ÚepsÚeval_integralra  )r  rX   r¤   Úfunctionr¨  r�   rJ  Úis_zeror;   r…  r†  ra   rÒ  rs   rÆ   ÚrangeÚeuler_maclaurinr¦   r  r`   )r«   r¬   r­   rX   re  r¨  rq  rb   rÏ   r7  ry   rÌ   rÛ  r~   r5  r”   ÚerrrR   rS   rœ   r�   s                        rc   Ú	evalf_sumrâ  /  sÝ  € ÝØ�ÓØ�y‰y˜ ™Ó)ˆØ�=‰=€DØ�[‰[€FÜ
ˆ6ƒ{�aÓœ3˜v a™y›>¨QÓ.Ü!Ð!Ø‡|‡|Ø�T˜4 Ð%Ð%Ø�2‰I€Eð&Ø˜‘)‰ˆˆaØ”A—J‘JÒ !¤q×'9Ñ'9Ò"9¸QÄ#ÀaÃ&»[Ü%Ð%ä�4œC ›F EÓ*ˆØ”w˜q“zÑ!ˆÜ�1‹:˜ÓÜ�t¤ A£¨Ó.ˆAØ�$œ˜DÓ(¨$Ð.Ð.øÜó &á�C‹j˜D˜5Ñ!ˆÜ�q˜!–ˆAØ�q‘D˜4‘KÐˆAØ×)Ñ)¨A¸Ø#ð *ð %‰FˆAˆsà—)‘)“+ˆCØ”a—e‘eŠ|Ü)Ð)Ø�c�zÙñ ô ”eœC ›H b¨'Ó2°1Ñ5Ó6ˆÜ!& q¨%Ó!9ÑˆˆB�˜Ø‰>Ø�TˆFØ‰>Ø�TˆFØ�2�v˜vÐ%Ò%ð%&ús   Á=BD ÄA/GÆA	GÇGc                ó  • US   U    n[        U[        5      (       a  U(       d  gUR                  S US 4$ SU;  a  0 US'   US   nUR                  U S [        45      u  pVXa:¼  a  U$ [        [        U5      X5      nXq4X@'   U$ )Nr¤   r¥   Ú_cache)r�   r   r  râ   rq   r¦   r:   )rr   r¬   r­   ÚvalÚcacheÚcachedÚcached_precry   s           rc   Úevalf_symbolré  _  s“   € Ø
�&‰/˜!Ñ
€CÜ�#”s×ÑÞØ)Ø�y‰y˜$  dÐ*Ð*à˜7Ó"Ø "ˆG�HÑØ˜Ñ!ˆØ#Ÿi™i¨¨D´)Ð+<Ó=ÑˆØÓØˆMÜ”'˜#“, Ó.ˆØ�9ˆ‰Øˆrd   z:dict[Type[Expr], Callable[[Expr, int, OPT_DICT], TMP_RES]]Úevalf_tablec                 ó�  • SSK Jn   SSKJn  SSKJn  SSKJn  SSKJ	nJ
nJnJnJnJn	Jn
JnJnJnJnJnJn  SSKJn  SS	KJnJn  SS
KJnJnJn  SSKJ nJ!n  SSK"J#nJ$n  SSK%J&n  SSK'J(nJ)nJ*nJ+n  SSK,J-n   0 U[\        _U[\        _U[^        _U[`        _U[b        _US _US _US _US _US _US _U
S _US _U	S _U[d        _U[f        _U[f        _0 U[f        _U[h        _U[j        _U[l        _U[n        _U[p        _U[r        _U[t        _U[v        _U[x        _U[z        _U [|        _U[~        _U [€        _U[‚        _U[„        _EqCg )Nr   rL   rJ   r9   rA   rC   )rM  rX   rK  rw   rZ   r  rn  r,  rœ  rY   rx   r˜   r[   rE   )ÚDummyrG   )rQ   rS   rR   rN   rT   )Ú	Piecewise)rW   r^  r_  r`  rH   c                ó   • S S US 4$ r�   rh   ©rr   r¬   r­   s      rc   Ú<lambda>Ú%_create_evalf_table.<locals>.<lambda>‰  s   € ¨¨d°D¸$Ñ'?rd   c                ó   • [         S US 4$ r�   ©r   rï  s      rc   rð  rñ  Š  ó   € ¤t¨T°4¸Ñ&>rd   c                ó   • [         S US 4$ r�   )r   rï  s      rc   rð  rñ  ‹  s   € ¬¨t°T¸4Ñ'@rd   c                ó    • [        U5      S US 4$ r�   )r)   rï  s      rc   rð  rñ  Œ  s   € ¤f¨T£l°D¸$ÀÑ%Erd   c                ó    • [        U5      S US 4$ r�   )r#   rï  s      rc   rð  rñ  �  s   € ¬¨d«°T¸4ÀÑ'Frd   c                ó   • S [         S U4$ r�   ró  rï  s      rc   rð  rñ  Ž  s   € °´t¸TÀ4Ñ0Hrd   c                ó   • [         S US 4$ r�   )r   rï  s      rc   rð  rñ  �  s   € ¬u°d¸DÀ$Ñ.Grd   c                ó"   • [         R                  $ r�   )r;   r˜   rï  s      rc   rð  rñ  �  s
   € ´!×2CÒ2Crd   c                ó   • [         S US 4$ r�   )r   rï  s      rc   rð  rñ  ‘  rô  rd   )DÚsympy.concrete.productsrM   r×  rK   rà   rB   r+  rD   r  rM  rX   rK  rw   rZ   r  rn  r,  rœ  rY   rx   r˜   r[   r[  rF   rš  rì  rG   rõ   rQ   rS   rR   rl  rO   rP   Ú#sympy.functions.elementary.integersrU   rV   Ú$sympy.functions.elementary.piecewiserí  rc  rW   r^  r_  r`  Úsympy.integrals.integralsrI   ré  r  r  r	  r\  ri  r(  rC  rY  rm  ru  r½   rÀ   rÄ   r  rÿ   r©  râ  rÙ  r€  rƒ  rê  )!rM   rK   rB   rD   rM  rX   rK  rw   rZ   r  rn  r,  rœ  rY   rx   r˜   r[   rF   rì  rG   rQ   rS   rR   rO   rP   rU   rV   rí  rW   r^  r_  r`  rI   s!                                    rc   Ú_create_evalf_tabler   s  sæ  € å/Ý-ÝÝ÷/÷ /÷ /õ /åß%ß@Ñ@ß?ßBÝ>ßLÓLÝ2ð)Ø”ð)àŒ|ð)ð 	Œ{ð)ð 	”.ð	)ð
 	”ð)ð 	Ñ?ð)ð 	Ñ>ð)ð 	Ñ@ð)ð 	ÑEð)ð 	ÑFð)ð 	ÑHð)ð 	ÑGð)ð 	ÑCð)ð 	Ñ>ð)ð  	ŒYð!)ð$ 	ŒZð%)ð& 	ŒZñ')ð( 	ŒZð))ð, 	ŒYð-)ð. 	ŒYð/)ð0 	ŒYð1)ð4 	ŒYð5)ð6 	Œjð7)ð8 	ŒYð9)ð< 	ŒHð=)ð> 	ŒHð?)ð@ 	Œ{ðA)ðB 	”ðC)ðF 	”.ðG)ðH 	ŒYðI)ðJ 	”ðK)ðL 	”?ðM)ðP 	œñQ)�Krd   c                ó–  • SSK JnJn   [        [	        U 5         nU" XU5      nUR                  S5      (       a_  [!        S	U 5        [!        S
[#        U[$        5      (       a  ['        US   =(       d    [(        S5      OU5        [!        SU5        [!        5         UR                  SS5      nU(       aL  USL a  UnO9[+        [-        S[.        R0                  " U5      -  S-   5      5      nUS:X  a  US-  n[3        Xn5      nUR                  S5      (       a  [5        XU5        U$ ! [
         Ga    SU;   a  U R                  [        XS   5      5      n U R                  U5      nUc  [        e[        USS5      nUc  [        eU" 5       u  pšU	R                  " U5      (       d  U
R                  " U5      (       a  [        eU	(       d  Sn	SnO5U	R                  (       a  U	R                  " USS9R                  n	UnO[        eU
(       d  Sn
SnO5U
R                  (       a  U
R                  " USS9R                  n
UnO[        eXšX¼4n GN"f = f)a&  
Evaluate the ``Expr`` instance, ``x``
to a binary precision of ``prec``. This
function is supposed to be used internally.

Parameters
==========

x : Expr
    The formula to evaluate to a float.
prec : int
    The binary precision that the output should have.
options : dict
    A dictionary with the same entries as
    ``EvalfMixin.evalf`` and in addition,
    ``maxprec`` which is the maximum working precision.

Returns
=======

An optional tuple, ``(re, im, re_acc, im_acc)``
which are the real, imaginary, real accuracy
and imaginary accuracy respectively. ``re`` is
an mpf value tuple and so is ``im``. ``re_acc``
and ``im_acc`` are ints.

NB: all these return values can be ``None``.
If all values are ``None``, then that represents 0.
Note that 0 is also represented as ``fzero = (0, 0, 0, 0)``.
r   rÒ   r¤   Nr×   F)Ú
allow_intsr"  z	### inputz
### outputé2   z### rawÚchopTgÅ °rh‘
Àg      @rp   r9   rÖ   )rõ   rR   rS   rê  ÚtypeÚKeyErrorr¤   rz  rd  rJ  ÚgetattrÚhasr§   Ú
_to_mpmathr  râ   r&  r�   rŽ   r2   r   ra   ÚroundrF  Úlog10rÍ   rÐ   )rr   r¬   r­   rú   rû   Úrfr  Úxer×   rR   rS   ÚreprecÚimprecr  Ú	chop_precs                  rc   r¦   r¦   ¯  sõ  € ÷> Jð #Üœ˜a›Ñ!ˆÙˆq˜Ó ˆð@ ‡{�{�9×ÑÜˆk˜1ÔÜˆl¼ÀAÄu×9MÑ9MœF 1 Q¡4§=¬5°"Ô5ÐSTÔUÜˆi˜ÔÜŒØ�;‰;�v˜uÓ%€DÞØ�4Š<Ø‰Iô
 œE &¬¯ª°DÓ)9Ñ"9¸CÑ"?Ó@ÓAˆIØ˜A‹~Ø˜Q‘�	Ü�qÓ$ˆØ‡{�{�8×ÑÜ�Q˜4Ô Ø€Høôe ô #à�WÓØ—‘”z $°©Ó8Ó9ˆAØ�]‰]˜4Ó ˆØ‰:Ü%Ð%Ü˜r >°4Ó8ˆØÑÜ%Ð%Ù“‰ˆØ�6Š6�#�;‰;˜"Ÿ&š& Ÿ+™+Ü%Ð%ÞØˆBØ‰FØ�\�\Ø—’˜t°Ñ6×<Ñ<ˆBØ‰Fä%Ð%ÞØˆBØ‰FØ�\�\Ø—’˜t°Ñ6×<Ñ<ˆBØ‰Fä%Ð%Ø�FÐ"‹ð;#ús   ŠD# Ä#D!IÉIc                ó  • Uc  [         OUR                   nUc  [        OUR                  nU [        R                  L a  [        eU u  pE  nU(       a  U(       d  [
        nU" XE45      $ U(       a  U" U5      $ U" [
        5      $ )z@Turn the quad returned by ``evalf`` into an ``mpf`` or ``mpc``. )r	   r
   r;   r˜   rJ  r   )r  Úctxr   r   rR   rS   r¯   s          rc   r‡  r‡    sl   € à‘k�( s§|¡|€CØ‘k�( s§|¡|€CØŒA×ÑÒÜ!Ð!Ø�L€BˆAˆqÞ	ÞÜˆBÙ�B�8‹}ÐÞ	Ù�2‹wˆá”5‹zÐrd   c                  óT   • \ rS rSr% SrSrS\S'   SS jr\rSS jr	SS	 jr
SS
 jrSrg)Ú
EvalfMixini  z$Mixin class adding evalf capability.rh   ztuple[str, ...]Ú	__slots__Nc           	     óš  • SSK JnJn	  Ub  UOSnU(       a  [        U5      (       a  [	        S5      eUS:X  aH  [        X	5      (       a8  SSKJn
  U R                  SX#XEXg5      nU
" U5      nUR                  SU-
  5      nU$ [        (       d
  [        5         [        U5      n[        U[        U[        -  5      5      UXWS.nUb  X.S'   Ub  XnS	'    [        XS
-   U5      nU[*        R,                  L a  U$ Uu  nnnnU[*        R.                  L d  U[*        R.                  L a  [*        R.                  $ U(       a*  [        [1        UU5      S5      nUR2                  " UU5      nO[*        R4                  nU(       a?  [        [1        UU5      S5      nUR2                  " UU5      nUU[*        R6                  -  -   $ U$ ! [          a‡    [#        U S5      (       a$  Ub!  U R%                  U5      R'                  U5      nOU R'                  U5      nUc  U s $ UR(                  (       d  Us $  [        UXÞ5      n GNW! [          a    Us s $ f = ff = f)a©  
Evaluate the given formula to an accuracy of *n* digits.

Parameters
==========

subs : dict, optional
    Substitute numerical values for symbols, e.g.
    ``subs={x:3, y:1+pi}``. The substitutions must be given as a
    dictionary.

maxn : int, optional
    Allow a maximum temporary working precision of maxn digits.

chop : bool or number, optional
    Specifies how to replace tiny real or imaginary parts in
    subresults by exact zeros.

    When ``True`` the chop value defaults to standard precision.

    Otherwise the chop value is used to determine the
    magnitude of "small" for purposes of chopping.

    >>> from sympy import N
    >>> x = 1e-4
    >>> N(x, chop=True)
    0.000100000000000000
    >>> N(x, chop=1e-5)
    0.000100000000000000
    >>> N(x, chop=1e-4)
    0

strict : bool, optional
    Raise ``PrecisionExhausted`` if any subresult fails to
    evaluate to full accuracy, given the available maxprec.

quad : str, optional
    Choose algorithm for numerical quadrature. By default,
    tanh-sinh quadrature is used. For oscillatory
    integrals on an infinite interval, try ``quad='osc'``.

verbose : bool, optional
    Print debug information.

Notes
=====

When Floats are naively substituted into an expression,
precision errors may adversely affect the result. For example,
adding 1e16 (a Float) to 1 will truncate to 1e16; if 1e16 is
then subtracted, the result will be 0.
That is exactly what happens in the following:

>>> from sympy.abc import x, y, z
>>> values = {x: 1e16, y: 1, z: 1e16}
>>> (x + y - z).subs(values)
0

Using the subs argument for evalf is the accurate way to
evaluate such an expression:

>>> (x + y - z).evalf(subs=values)
1.00000000000000
r9   )rX   r\   rŠ  z"subs must be given as a dictionary)Ú_magro   )r!  r  rÖ   r"  r¤   r’  r‰   )r  rX   r\   r=   Ú	TypeErrorr�   r«   r  r¦   r
  rê  r   r7   rš   ra   ÚLG10rJ  r}  r¤   rd  r§   r;   r˜   r  rÆ   r  rx   rw   )Úselfrb   r¤   Úmaxnr  rÖ   r’  r"  rX   r\   r  r’   r5  r¬   r­   r›   ry   rR   rS   rœ   r�   r“   s                         rc   r¦   ÚEvalfMixin.evalf  s  € ÷B 	+Ø‘‰A Bˆæ”K ×%Ñ%ÜÐ@ÓAÐAð �‹6”j ×.Ñ.Ý"Ø—‘˜A˜t¨4¸ÓGˆBÙ�R“ˆAØ—‘˜!˜a™%“ˆBØˆIçŠ{ÜÔ!Ü˜1‹~ˆÜ! $¬¨D´©I«Ó7ÀØñ5ˆàÑØ"�F‰OØÑØ"�F‰Oð	Ü˜4¨¡¨7Ó3ˆFð" ”Q×&Ñ&Ò&ØˆMØ!'ÑˆˆB�˜Ø”—‘Š;˜"¤§¡š+Ü—5‘5ˆLÞÜ”C˜˜fÓ% qÓ)ˆAØ—’˜B Ó"‰Bä—‘ˆBÞÜ”C˜˜fÓ% qÓ)ˆAØ—’˜B Ó"ˆBØ˜œ1Ÿ?™?Ñ*Ñ*Ð*àˆIøô? #ó 	ä�t˜V×$Ñ$¨Ñ)9Ø—I‘I˜d“O×/Ñ/°Ó5‘à×$Ñ$ TÓ*�Ø‰yØ’Ø—[—[Ø’ðä˜q $Ó0“øÜ&ó à”ðúð	ús1   ÃF9 Æ9AI
ÈI
È&H5È5IÉI
ÉIÉI
c                ó2   • U R                  U5      nUc  U nU$ )z@Helper for evalf. Does the same thing but takes binary precision)rd  )r  r¬   r  s      rc   Ú_evalfÚEvalfMixin._evalfš  s!   € à×Ñ˜TÓ"ˆØ‰9ØˆAØˆrd   c                ó   • g r�   rh   )r  r¬   s     rc   rd  ÚEvalfMixin._eval_evalf¡  s   € Ørd   c                ó  • SnU(       a  U R                   (       a  U R                  $ [        U S5      (       a  [        U R	                  U5      5      $  [        X0 5      n[        U5      $ ! [         Ga    U R                  U5      nUc  [        U5      eUR                  (       a  [        UR                  5      s $ UR                  5       u  pgU(       a'  UR                   (       a  [        UR                  5      nO)UR                  (       a  UR                  nO[        U5      eU(       a'  UR                   (       a  [        UR                  5      nO)UR                  (       a  UR                  nO[        U5      e[        Xg45      s $ f = f)Nzcannot convert to mpmath numberÚ_as_mpf_val)rE  r“   r}  r
   r#  r¦   r‡  rJ  rd  r‘   rx  r  r×   r   r	   )r  r¬   r  Úerrmsgr›   ry   rR   rS   s           rc   r	  ÚEvalfMixin._to_mpmath¤  s  € à2ˆÞ˜$Ÿ/Ÿ/Ø—6‘6ˆMÜ�4˜×'Ñ'Ü˜D×,Ñ,¨TÓ2Ó3Ð3ð	&Ü˜4 rÓ*ˆFÜ! &Ó)Ð)øÜ"ô 	&Ø× Ñ  Ó&ˆAØ‰yÜ  Ó(Ð(Ø�z�zÜ §¡Ó(Ò(à—^‘^Ó%‰FˆBÞ˜bŸmŸmÜ˜bŸd™d“^‘Ø——Ø—X‘X‘ä  Ó(Ð(Þ˜bŸmŸmÜ˜bŸd™d“^‘Ø——Ø—X‘X‘ä  Ó(Ð(Ü˜R˜HÓ%Ò%ð)	&ús   ÁA* Á*AFÂ<CFÆ
F)rŠ  Néd   FFNF)r¬   ra   r—  r@   )r¬   ra   r—  úExpr | None)T)ri   rj   rk   rl   Ú__doc__r  Ú__annotations__r¦   rb   r  rd  r	  rm   rh   rd   rc   r  r    s,   ‡ Ù.à!#€IˆÓ#ôyðv 	€Aôô÷&rd   r  c                ó8   • [        U SS9R                  " U40 UD6$ )ah  
Calls x.evalf(n, \*\*options).

Explanations
============

Both .n() and N() are equivalent to .evalf(); use the one that you like better.
See also the docstring of .evalf() for information on the options.

Examples
========

>>> from sympy import Sum, oo, N
>>> from sympy.abc import k
>>> Sum(1/k**k, (k, 1, oo))
Sum(k**(-k), (k, 1, oo))
>>> N(_, 4)
1.291

T)Úrational)r:   r¦   )rr   rb   r­   s      rc   r¨   r¨   Å  s!   € ô. �1˜tÑ$×*Ò*¨1Ñ8°Ñ8Ð8rd   c                óf  • UbS  UR                   (       d  UR                  (       a  US:”  d  [        S5      e[        SU-  S0 5      u  n    n[	        U5      n[        U S0 5      u  pg  n[	        U5      [	        U5      p˜[        X‰5      S-   n
[        SX*-   S-   5      nU=(       d    0 n[        XU5      $ )aÝ  
Evaluate *x* to within a bounded absolute error.

Parameters
==========

x : Expr
    The quantity to be evaluated.
eps : Expr, None, optional (default=None)
    Positive real upper bound on the acceptable error.
m : int, optional (default=0)
    If *eps* is None, then use 2**(-m) as the upper bound on the error.
options: OPT_DICT
    As in the ``evalf`` function.

Returns
=======

A tuple ``(re, im, re_acc, im_acc)``, as returned by ``evalf``.

See Also
========

evalf

r   zeps must be positiver9   )rI  rx  r‘   r¦   rs   rš   )rr   rÛ  r5  r­   r  r¯   r}   ÚdÚnrÚnirb   r“   s               rc   Ú_evalf_with_bounded_errorr0  ß  s¦   € ð: �Ø—— 3§<§<¸¸a»ÜÐ3Ó4Ð4Ü˜1˜S™5 ! RÓ(‰
ˆˆ1ˆa�Ü�A‹Jˆä�q˜!˜R“�J€Aˆ!ˆQô �Q‹Zœ ›ˆÜˆB‹�a‰€Aô 	ˆAˆq‰u�q‰yÓ€Aà�m˜€GÜ��wÓÐrd   )rr   zMPF_TUP | Noner—  ú	int | Any)F)ry   r@   r—  ztuple[Number, Number] | None)r9   )rƒ   ÚSCALED_ZERO_TUPr—  rô   )rƒ   ra   r—  ztuple[SCALED_ZERO_TUP, int])rƒ   zSCALED_ZERO_TUP | intr—  z%MPF_TUP | tuple[SCALED_ZERO_TUP, int])r   z MPF_TUP | SCALED_ZERO_TUP | Noner—  zbool | None)r›   ÚTMP_RESr—  r1  )r«   r@   r¬   ra   r­   ÚOPT_DICTr—  r3  )
r«   r@   r´   ra   r¬   ra   r­   r4  r—  r3  )r«   z'Abs'r¬   ra   r­   r4  r—  r3  )r«   z're'r¬   ra   r­   r4  r—  r3  )r«   z'im'r¬   ra   r­   r4  r—  r3  )rR   rô   rS   rô   r¬   ra   r—  r3  )r¶   r3  r¬   ra   r—  r3  )r«   r@   r›   r3  r¬   ra   )r«   r@   r´   ra   r­   r4  r—  zTMP_RES | tuple[int, int])r«   z	'ceiling'r¬   ra   r­   r4  r—  r3  )r«   z'floor'r¬   ra   r­   r4  r—  r3  )r«   z'Float'r¬   ra   r­   r4  r—  r3  )r«   z
'Rational'r¬   ra   r­   r4  r—  r3  )r«   z	'Integer'r¬   ra   r­   r4  r—  r3  )r  r–   r¬   ra   r  ra   r—  z3tuple[MPF_TUP | SCALED_ZERO_TUP | None, int | None])ry   z'Add'r¬   ra   r­   r4  r—  r3  )ry   z'Mul'r¬   ra   r­   r4  r—  r3  )ry   z'Pow'r¬   ra   r—  r3  )r«   z'exp'r¬   ra   r­   r4  r—  r3  )ry   r@   r¬   ra   r­   r4  r—  r3  )r«   z'log'r¬   ra   r­   r4  r—  r3  )ry   z'atan'r¬   ra   r­   r4  r—  r3  )r¬   ra   r¤   Údictr—  r5  )rÏ   z'AlgebraicNumber'r¬   ra   r­   r4  r—  r3  )rr   r   r¬   ra   r­   r4  r—  r˜  )r«   z
'Integral'r¬   ra   r­   r4  r—  r3  )r±  r@   r²  r@   rb   rG   r—  ztuple[int, Any, Any])
r«   r@   rb   rG   r1  ra   r¬   ra   r—  r   )r«   z	'Product'r¬   ra   r­   r4  r—  r3  )r«   z'Sum'r¬   ra   r­   r4  r—  r3  )rr   r@   r¬   ra   r­   r4  r—  r3  r�   )rŠ  )Nr   N)
rr   r@   rÛ  r'  r5  ra   r­   zOPT_DICT | Noner—  r3  )¯r(  Ú
__future__r   Útypingr   r   r   r   r   rF  Úmpmath.libmpr©   Úmpmathr	   r
   r   r   r   r   r   r   r   r   rÇ  r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r_   Úmpmath.libmp.backendr5   Úmpmath.libmp.libmpcr6   Úmpmath.libmp.libmpfr7   r8   r:   Ú	singletonr;   Úsympy.external.gmpyr<   Úsympy.utilities.iterablesr=   Úsympy.utilities.lambdifyr>   Úsympy.utilities.miscr?   Úsympy.core.exprr@   Úsympy.core.addrB   Úsympy.core.mulrD   Úsympy.core.powerrF   Úsympy.core.symbolrG   rÿ  rI   r×  rK   rü  rM   rl  rO   rP   rõ   rQ   rR   rS   rý  rU   rV   rc  rW   r  rX   rY   rZ   r[   r\   rG  r  rá   r~  r™   rq   r$  ÚArithmeticErrorrf   rŽ   ra   rô   r3  r5  Ústrr4  rs   r   r–   r2  r…   r�   r¢   r±   r¸   r½   rÀ   rÄ   rÉ   rÍ   rÐ   rü   rÿ   r  r  r  r	  r  r(  rC  rY  r\  ri  rm  ru  rz  r€  rƒ  rˆ  r¦  r©  r¹  rÒ  rÙ  râ  ré  rê  r)  r   r¦   r‡  r  r¨   r0  rh   rd   rc   Ú<module>rI     s¸  ðòõ #ß ?Õ ?ã å ÷G÷ Gõ Gå $÷W÷ W÷ W÷ W÷ W÷ W÷ W÷ Wõ Wõ
 5Ý $Ý )ß 8å Ý Ý *Ý 1Ý -Ý 'æÝ$Ý"Ý"Ý$Ý(Ý2Ý-Ý/ß?ß@Ñ@ßBÝ=ßJÕJà‡y‚y�ƒ}€Ø€ò(ñ ˆJÓ€Ù�:�+Ó€	ð €ô	˜ô 	ðð ��S˜#˜sÐ"Ñ
#€ðð& €ð ��S�‰>€ô!öHð> ˜˜S™	 3¨¨SÐ0Ñ1€ð 
õó 
ðà	õó 
ðð$JØ-õ$JöNGôô:&ô,ô 0ô<ô<ô"ô&"ô,0ðl$Ø!õl$ô^6ô7ô(ôAô4ðSØ;ôSôl."ôb{ ô|xGôDKô
='ô@2&ôj6ôôô"-ô"ô\ô~ô4'/ôTLô^ô'&ô`ð" KM€ÐGÓ Lò9ôxUôp÷"j&ñ j&ôZ9ð4 ;?Ø'(Ø9=ð1 Ø!$ð1 à'6ð1 àBIö1 rd   