+
    ‰°³j,Á  ã                   ó¾  € R t Rt^ RIt^ RIt^RIHt ^RIHtHt ^RI	H
t
 ^RI
HtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2H3t3H4t4H5t5H6t6H7t7H8t8H9t9H:t:H;t;H<t<H=t=H>t>H?t?H@t@HAtAHBtBHCtCHDtDHEtEHFtFHGtGHHtHHItIHJtJHKtKHLtLHMtMHNtNHOtOHPtPHQtQHRtRHStSHTtTHUtUHVtVHWtWHXtXHYtYHZtZH[t[H\t\H]t]H^t^Ht ^RI	H_t_ ^RI	H`t` ]aPÄ                  tc]PÈ                  ! R	4      te]R
8X  d   ^ RIfHgth ^ RIfHiu Hju Hktl M^RImHnth ^RI	Hmtl ^RImHotoHptpHqtq  ! R R]h]4      tr ! R R4      ts]tR8X  d   ^ RIutu]uPì                  ! 4        R# R# )z[
This module defines the mpf, mpc classes, and standard functions for
operating with them.
Ú	plaintextN)ÚStandardBaseContext)Ú
basestringÚBACKEND)Úlibmp)UÚMPZÚMPZ_ZEROÚMPZ_ONEÚ	int_typesÚrepr_dpsÚround_floorÚround_ceilingÚdps_to_precÚround_nearestÚprec_to_dpsÚComplexResultÚto_pickableÚfrom_pickableÚ	normalizeÚfrom_intÚ
from_floatÚfrom_strÚto_intÚto_floatÚto_strÚfrom_rationalÚfrom_man_expÚfoneÚfzeroÚfinfÚfninfÚfnanÚmpf_absÚmpf_posÚmpf_negÚmpf_addÚmpf_subÚmpf_mulÚmpf_mul_intÚmpf_divÚmpf_rdiv_intÚmpf_pow_intÚmpf_modÚmpf_eqÚmpf_cmpÚmpf_ltÚmpf_gtÚmpf_leÚmpf_geÚmpf_hashÚmpf_randÚmpf_sumÚbitcountÚto_fixedÚ
mpc_to_strÚmpc_to_complexÚmpc_hashÚmpc_posÚmpc_is_nonzeroÚmpc_negÚmpc_conjugateÚmpc_absÚmpc_addÚmpc_add_mpfÚmpc_subÚmpc_sub_mpfÚmpc_mulÚmpc_mul_mpfÚmpc_mul_intÚmpc_divÚmpc_div_mpfÚmpc_powÚmpc_pow_mpfÚmpc_pow_intÚmpc_mpf_divÚmpf_powÚmpf_piÚ
mpf_degreeÚmpf_eÚmpf_phiÚmpf_ln2Úmpf_ln10Ú	mpf_eulerÚmpf_catalanÚ	mpf_aperyÚmpf_khinchinÚmpf_glaisherÚmpf_twinprimeÚmpf_mertensr
   )Úfunction_docs)Úrationalz\^\(?(?P<re>[\+\-]?\d*(\.\d*)?(e[\+\-]?\d+)?)??(?P<im>[\+\-]?\d*(\.\d*)?(e[\+\-]?\d+)?j)?\)?$Úsage)ÚContext)ÚPythonMPContext)Úctx_mp_python)Ú_mpfÚ_mpcÚ	mpnumericc                   ó’  a € ] tR t^:t o RtR tR tR tR tR t	R t
R tR	 tR8R
 ltR tR tR tR tR tR tR tR tR tR tR tR tR t]R 4       t]R 4       tR9R ltR9R ltR9R lt R9R lt!R:R  lt"R;R! lt#R" t$R# t%R$ t&R%t'R&t(R<R' lt)R( t*R) t+R* t,R+ t-R, t.R- t/R. t0R/ t1R0 t2R1 t3R2 t4R3 t5R4 t6R5 t7 ^ .R3R6 lt8R7t9V t:R# )=Ú	MPContextz@
Context for multiprecision arithmetic with a global precision.
c                óü  € \         P                  ! V 4       R V n        R V n        V P                  V P
                  V P                  .V n        \        P                  V n
        V P                  4        \        P                  ! V 4       \        P                  V n	        V P                  4        / V n        V P                  4         \         P"                  V P"                  P$                  n        \         P(                  V P(                  P$                  n        \         P*                  V P*                  P$                  n        \         P,                  V P,                  P$                  n        \         P2                  V P2                  n        \         P4                  V P4                  n        \         P6                  V P6                  n        R#   \.         d©    \         P"                  T P"                  P0                  n        \         P(                  T P(                  P0                  n        \         P*                  T P*                  P0                  n        \         P,                  T P,                  P0                  n         ELi ; i)FN)ÚBaseMPContextÚ__init__Útrap_complexÚprettyÚmpfÚmpcÚconstantÚtypesr\   ÚmpqÚ_mpqÚdefaultr   Úinit_builtinsÚhyp_summatorsÚ_init_aliasesr[   Ú	bernoulliÚim_funcÚfunc_docÚprimepiÚpsiÚatan2ÚAttributeErrorÚ__func__ÚdigammaÚcospiÚsinpi©Úctxs   &ÚN/home/luca/screen-checking/.venv/lib/python3.14/site-packages/mpmath/ctx_mp.pyrh   ÚMPContext.__init__?   s’  € Ü×Ò˜sÔ#Ø ˆÔØˆŒ
Ø—W‘W˜cŸg™g s§|¡|Ð4ˆŒ	Ü—<‘<ˆŒØ�‰ŒÜ×$Ò$ SÔ)ä—,‘,ˆŒØ×ÑÔàˆÔà×ÑÔð
	>Ü-:×-DÑ-DˆC�M‰M×!Ñ!Ô*Ü+8×+@Ñ+@ˆC�K‰K×ÑÔ(Ü'4×'8Ñ'8ˆC�G‰G�O‰OÔ$Ü)6×)<Ñ)<ˆC�I‰I×ÑÔ&ô  -×4Ñ4ˆ�‰ÔÜ*×0Ñ0ˆ�	‰	ÔÜ*×0Ñ0ˆ�	‰	Öøô ô 	>ä.;×.EÑ.EˆC�M‰M×"Ñ"Ô+Ü,9×,AÑ,AˆC�K‰K× Ñ Ô)Ü(5×(9Ñ(9ˆC�G‰G×ÑÔ%Ü*7×*=Ñ*=ˆC�I‰I×Ñ×'ð	>ús   ÃB$G ÇB/I;É:I;c                óä  € V P                   pV P                  pV P                  \        4      V n        V P                  \
        4      V n        V P                  \
        \        34      V n        V P                  \        4      V n
        V P                  \        4      V n        V P                  \        4      V n        V P                  R  RR4      pW0n        V P                  \"        RR4      V n        V P                  \&        RR4      V n        V P                  \*        RR4      V n        V P                  \.        RR	4      V n        V P                  \2        R
R4      V n        V P                  \6        RR4      V n        V P                  \:        RR4      V n        V P                  \>        RR4      V n         V P                  \B        RR4      V n"        V P                  \F        RR4      V n$        V P                  \J        RR4      V n&        V P                  \N        RR4      V n(        V P                  \R        RR4      V n*        V PW                  \X        PZ                  \X        P\                  4      V n/        V PW                  \X        P`                  \X        Pb                  4      V n2        V PW                  \X        Pf                  \X        Ph                  4      V n5        V PW                  \X        Pl                  \X        Pn                  4      V n8        V PW                  \X        Pr                  \X        Pt                  4      V n;        V PW                  \X        Px                  \X        Pz                  4      V n>        V PW                  \X        P~                  \X        P€                  4      V nA        V PW                  \X        P„                  \X        P†                  4      V nD        V PW                  \X        PŠ                  \X        PŒ                  4      V nG        V PW                  \X        P�                  \X        P’                  4      V nJ        V PW                  \X        P–                  \X        P˜                  4      V nM        V PW                  \X        Pœ                  \X        Pž                  4      V nP        V PW                  \X        P¢                  \X        P¤                  4      V nS        V PW                  \X        P¨                  \X        Pª                  4      V nV        V PW                  \X        P®                  \X        P°                  4      V nY        V PW                  \X        Pl                  \X        Pn                  4      V n8        V PW                  \X        P´                  \X        P¶                  4      V n\        V PW                  \X        Pº                  \X        P¼                  4      V n_        V PW                  \X        PÀ                  \X        PÂ                  4      V nb        V PW                  \X        PÆ                  \X        PÈ                  4      V ne        V PW                  \X        PÌ                  \X        PÎ                  4      V nh        V PW                  \X        PÒ                  \X        PÔ                  4      V nk        V PW                  \X        PØ                  \X        PÚ                  4      V nn        V PW                  \X        PÞ                  \X        Pà                  4      V nq        V PW                  \X        Pä                  \X        Pæ                  4      V nt        V PW                  \X        Pê                  \X        Pì                  4      ;V nw        V nx        V PW                  \X        Pò                  \X        Pô                  4      V n{        V PW                  \X        Pø                  \X        Pú                  4      V n~        V PW                  \X        Pþ                  \X        EP                   4      V n�        V PW                  \X        EP                  \X        EP                  4      ;V n„        V n…        V PW                  \X        EP                  \X        EP                  4      V nˆ        V PW                  \X        EP                  \X        EP                  4      V n‹        V PW                  \X        EP                  \X        EP                  4      V nŽ        V PW                  \X        EP                  \X        EP                   4      V n‘        V PW                  \X        EP$                  \X        EP&                  4      V n”        V PW                  \X        EP*                  \X        EP,                  4      V n—        V PW                  \X        EP0                  \X        EP2                  4      V nš        V PW                  \X        EP6                  \X        EP8                  4      V n�        V PW                  \X        EP<                  \X        EP>                  4      V n         V PW                  \X        EPB                  R4      V n¢        V PW                  \X        EPF                  R4      V n¤        V PW                  \X        EPJ                  \X        EPL                  4      V n§        V PW                  \X        EPP                  \X        EPR                  4      V nª        E\W        V RV P^                  4      V n/        E\W        V RV Pv                  4      V n;        E\W        V RV Pj                  4      V n5        E\W        V R V PŽ                  4      V nG        E\W        V R!V Pˆ                  4      V nD        R# )"c                 ó$   € ^ \         ^V ,
          ^3# )é    )r	   )ÚprecÚrnds   &&r‚   Ú<lambda>Ú)MPContext.init_builtins.<locals>.<lambda>m   s   € ¨a´¸!¸D½&À!Ñ-Dó    zepsilon of working precisionÚepsÚpizln(2)Úln2zln(10)Úln10zGolden ratio phiÚphiz
e = exp(1)ÚezEuler's constantÚeulerzCatalan's constantÚcatalanzKhinchin's constantÚkhinchinzGlaisher's constantÚglaisherzApery's constantÚaperyz1 deg = pi / 180ÚdegreezTwin prime constantÚ	twinprimezMertens' constantÚmertensNÚ
_sage_sqrtÚ	_sage_expÚ_sage_lnÚ	_sage_cosÚ	_sage_sin)¬rk   rl   Úmake_mpfr   Úoner   ÚzeroÚmake_mpcÚjr   Úinfr    Úninfr!   Únanrm   rŒ   rN   r�   rR   rŽ   rS   r�   rQ   r�   rP   r‘   rT   r’   rU   r“   rW   r”   rX   r•   rV   r–   rO   r—   rY   r˜   rZ   r™   Ú_wrap_libmp_functionr   Úmpf_sqrtÚmpc_sqrtÚsqrtÚmpf_cbrtÚmpc_cbrtÚcbrtÚmpf_logÚmpc_logÚlnÚmpf_atanÚmpc_atanÚatanÚmpf_expÚmpc_expÚexpÚmpf_expjÚmpc_expjÚexpjÚ
mpf_expjpiÚ
mpc_expjpiÚexpjpiÚmpf_sinÚmpc_sinÚsinÚmpf_cosÚmpc_cosÚcosÚmpf_tanÚmpc_tanÚtanÚmpf_sinhÚmpc_sinhÚsinhÚmpf_coshÚmpc_coshÚcoshÚmpf_tanhÚmpc_tanhÚtanhÚmpf_asinÚmpc_asinÚasinÚmpf_acosÚmpc_acosÚacosÚ	mpf_asinhÚ	mpc_asinhÚasinhÚ	mpf_acoshÚ	mpc_acoshÚacoshÚ	mpf_atanhÚ	mpc_atanhÚatanhÚ
mpf_sin_piÚ
mpc_sin_pir   Ú
mpf_cos_piÚ
mpc_cos_pir~   Ú	mpf_floorÚ	mpc_floorÚfloorÚmpf_ceilÚmpc_ceilÚceilÚmpf_nintÚmpc_nintÚnintÚmpf_fracÚmpc_fracÚfracÚmpf_fibonacciÚmpc_fibonacciÚfibÚ	fibonacciÚ	mpf_gammaÚ	mpc_gammaÚgammaÚ
mpf_rgammaÚ
mpc_rgammaÚrgammaÚmpf_loggammaÚmpc_loggammaÚloggammaÚmpf_factorialÚmpc_factorialÚfacÚ	factorialÚmpf_psi0Úmpc_psi0r}   Úmpf_harmonicÚmpc_harmonicÚharmonicÚmpf_eiÚmpc_eiÚeiÚmpf_e1Úmpc_e1Úe1Úmpf_ciÚmpc_ciÚ_ciÚmpf_siÚmpc_siÚ_siÚ
mpf_ellipkÚ
mpc_ellipkÚellipkÚ
mpf_ellipeÚ
mpc_ellipeÚ_ellipeÚmpf_agm1Úmpc_agm1Úagm1Úmpf_erfÚ_erfÚmpf_erfcÚ_erfcÚmpf_zetaÚmpc_zetaÚ_zetaÚmpf_altzetaÚmpc_altzetaÚ_altzetaÚgetattr)r�   rk   rl   rŒ   s   &   r‚   rr   ÚMPContext.init_builtins`   sô  € à�g‰gˆØ�g‰gˆð —,‘,œtÓ$ˆŒØ—<‘<¤Ó&ˆŒØ—‘œe¤D˜\Ó*ˆŒØ—,‘,œtÓ$ˆŒØ—<‘<¤Ó&ˆŒØ—,‘,œtÓ$ˆŒà�l‰lÑDØ*¨Eó3ˆàŒð —‘œf d¨DÓ1ˆŒØ—,‘,œw¨°Ó7ˆŒØ—<‘<¤¨(°FÓ;ˆŒØ—,‘,œwÐ(:¸EÓBˆŒØ—‘œU L°#Ó6ˆŒØ—L‘L¤Ð,>ÀÓHˆŒ	Ø—l‘l¤;Ð0DÀiÓPˆŒØ—|‘|¤LÐ2GÈÓTˆŒØ—|‘|¤LÐ2GÈÓTˆŒØ—L‘L¤Ð,>ÀÓHˆŒ	Ø—\‘\¤*Ð.@À(ÓKˆŒ
ØŸ™¤]Ð4IÈ;ÓWˆŒØ—l‘l¤;Ð0CÀYÓOˆŒð ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×)Ñ)¬%¯-©-¼¿¹ÓGˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×*Ñ*¬5¯=©=¼%¿-¹-ÓHˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×-Ñ-¬e×.>Ñ.>Ä×@PÑ@PÓQˆŒ
Ø×*Ñ*¬5¯=©=¼%¿-¹-ÓHˆŒØ×*Ñ*¬5¯=©=¼%¿-¹-ÓHˆŒØ×*Ñ*¬5¯=©=¼%¿-¹-ÓHˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×,Ñ,¬U¯_©_¼e¿o¹oÓNˆŒ	Ø×,Ñ,¬U¯_©_¼e¿o¹oÓNˆŒ	Ø×,Ñ,¬U¯_©_¼e¿o¹oÓNˆŒ	Ø×,Ñ,¬U×-=Ñ-=¼u×?OÑ?OÓPˆŒ	Ø×,Ñ,¬U×-=Ñ-=¼u×?OÑ?OÓPˆŒ	Ø×,Ñ,¬U¯_©_¼e¿o¹oÓNˆŒ	Ø×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ×+Ñ+¬E¯N©N¼E¿N¹NÓKˆŒØ"%×":Ñ":¼5×;NÑ;NÔPU×PcÑPcÓ"dÐdˆŒ�#”-à×,Ñ,¬U¯_©_¼e¿o¹oÓNˆŒ	Ø×-Ñ-¬e×.>Ñ.>Ä×@PÑ@PÓQˆŒ
Ø×/Ñ/´×0BÑ0BÄE×DVÒDVÓWˆŒØ"%×":Ñ":¼5×;NÒ;NÔPU×PcÒPcÓ"dÐdˆŒ�#”-à×.Ñ.¬u¯~ª~¼u¿~º~ÓNˆŒØ×/Ñ/´×0BÒ0BÄE×DVÒDVÓWˆŒØ×)Ñ)¬%¯,ª,¼¿ºÓEˆŒØ×)Ñ)¬%¯,ª,¼¿ºÓEˆŒØ×*Ñ*¬5¯<ª<¼¿ºÓFˆŒØ×*Ñ*¬5¯<ª<¼¿ºÓFˆŒØ×-Ñ-¬e×.>Ò.>Ä×@PÒ@PÓQˆŒ
Ø×.Ñ.¬u×/?Ò/?Ä×AQÒAQÓRˆŒØ×+Ñ+¬E¯NªN¼E¿NºNÓKˆŒØ×+Ñ+¬E¯MªM¸4Ó@ˆŒØ×,Ñ,¬U¯^ª^¸TÓBˆŒ	Ø×,Ñ,¬U¯^ª^¼U¿^º^ÓLˆŒ	Ø×/Ñ/´×0AÒ0AÄ5×CTÒCTÓUˆŒõ ˜3 ¨c¯h©hÓ7ˆŒÝ˜#˜{¨C¯G©GÓ4ˆŒÝ˜˜j¨#¯&©&Ó1ˆŒÝ˜#˜{¨C¯G©GÓ4ˆŒÝ˜#˜{¨C¯G©GÓ4ˆŽr‹   c                ó$   € VP                  V4      # ©N)r7   )r�   Úxr‡   s   &&&r‚   r7   ÚMPContext.to_fixed¶   s   € Ø�z‰z˜$ÓÐr‹   c                óÒ   € V P                  V4      pV P                  V4      pV P                  \        P                  ! VP                  VP                  .V P
                  O5!  4      # )zp
Computes the Euclidean norm of the vector `(x, y)`, equal
to `\sqrt{x^2 + y^2}`. Both `x` and `y` must be real.)ÚconvertrŸ   r   Ú	mpf_hypotÚ_mpf_Ú_prec_rounding)r�   r'  Úys   &&&r‚   ÚhypotÚMPContext.hypot¹   sK   € ð �K‰K˜‹NˆØ�K‰K˜‹NˆØ�|‰|œEŸOšO¨A¯G©G°Q·W±WÐR¸s×?QÑ?QÓRÓSÐSr‹   c                óJ  € \        V P                  V4      4      pV^ 8X  d   V P                  V4      # \        VR4      '       g   \        hV P
                  w  r4\        P                  ! WP                  W4RR7      w  rVVf   V P                  V4      # V P                  WV34      # )r†   r,  T)rô   )ÚintÚ_rer	  ÚhasattrÚNotImplementedErrorr-  r   Ú
mpf_expintr,  rŸ   r¢   ©r�   ÚnÚzr‡   ÚroundingÚrealÚimags   &&&    r‚   Ú_gamma_upper_intÚMPContext._gamma_upper_intÁ   s‡   € Ü�—‘˜“
‹OˆØ�Œ6Ø—6‘6˜!“9ÐÜ�q˜'×"Ò"Ü%Ð%Ø×+Ñ+‰ˆÜ×%Ò% a¯©°$ÈÔM‰
ˆØŠ<Ø—<‘< Ó%Ð%à—<‘<  Ó-Ð-r‹   c                ó(  € \        V4      pV^8X  d   V P                  V4      # \        VR4      '       g   \        hV P                  w  r4\
        P                  ! WP                  W44      w  rVVf   V P                  V4      # V P                  WV34      # )é   r,  )
r2  r	  r4  r5  r-  r   r6  r,  rŸ   r¢   r7  s   &&&    r‚   Ú_expint_intÚMPContext._expint_intÎ   s}   € Ü�‹FˆØ�Œ6Ø—6‘6˜!“9ÐÜ�q˜'×"Ò"Ü%Ð%Ø×+Ñ+‰ˆÜ×%Ò% a¯©°$ÓA‰
ˆØŠ<Ø—<‘< Ó%Ð%à—<‘<  Ó-Ð-r‹   c                óš  € \        VR 4      '       d>    V P                  \        P                  ! VP                  V.V P
                  O5!  4      # VP                  pV P                  \        P                  ! W.V P
                  O5!  4      #   \         d3    T P                  '       d   h TP                  \        P                  3p Lmi ; i©r,  )r4  rŸ   r   Úmpf_nthrootr,  r-  r   ri   r   Ú_mpc_r¢   Úmpc_nthroot©r�   r'  r8  s   &&&r‚   Ú_nthrootÚMPContext._nthrootÛ   s¡   € Ü�1�g×Òð+Ø—|‘|¤E×$5Ò$5°a·g±g¸qÐ$VÀ3×CUÑCUÓ$VÓWÐWð —‘ˆAØ�|‰|œE×-Ò-¨aÐH°S×5GÑ5GÓHÓIÐIøô !ô +Ø×#×#Ð#ØØ—W‘WœeŸk™kÐ*’ð+ús   ”;B ÂC
Â*C
Ã	C
c                ó*  € V P                   w  r4\        VR 4      '       d1   V P                  \        P                  ! WP
                  W44      4      # \        VR4      '       d1   V P                  \        P                  ! WP                  W44      4      # R# )r,  rF  N)	r-  r4  rŸ   r   Úmpf_besseljnr,  r¢   Úmpc_besseljnrF  )r�   r8  r9  r‡   r:  s   &&&  r‚   Ú_besseljÚMPContext._besseljç   sn   € Ø×+Ñ+‰ˆÜ�1�g×ÒØ—<‘<¤× 2Ò 2°1·g±g¸tÓ NÓOÐOÜ�Q˜× Ò Ø—<‘<¤× 2Ò 2°1·g±g¸tÓ NÓOÐOñ !r‹   c                ó<  € V P                   w  r4\        VR 4      '       dQ   \        VR 4      '       d?    \        P                  ! VP                  VP                  W44      pV P                  V4      # \        VR 4      '       d   VP                  \        P                  3pMVP                  p\        VR 4      '       d   VP                  \        P                  3pMVP                  pV P                  \        P                  ! WW44      4      #   \         d     L©i ; irD  )r-  r4  r   Úmpf_agmr,  rŸ   r   r   rF  r¢   Úmpc_agm)r�   ÚaÚbr‡   r:  Úvs   &&&   r‚   Ú_agmÚMPContext._agmî   sÓ   € Ø×+Ñ+‰ˆÜ�1�g×Ò¤7¨1¨g×#6Ò#6ðÜ—M’M !§'¡'¨1¯7©7°DÓC�Ø—|‘| A“Ð&ô �1�g×Ò Q§W¡W¬e¯k©kÐ$:¡Ø—'‘'ˆaÜ�1�g×Ò Q§W¡W¬e¯k©kÐ$:¡Ø—'‘'ˆaØ�|‰|œEŸMšM¨!°Ó?Ó@Ð@øô !ô Ùðús   ´<D ÄDÄDc                óv   € V P                  \        P                  ! \        V4      .V P                  O5!  4      # r&  )rŸ   r   Úmpf_bernoullir2  r-  ©r�   r8  s   &&r‚   ru   ÚMPContext.bernoulliü   s+   € Ø�|‰|œE×/Ò/´°A³ÐL¸×9KÑ9KÓLÓMÐMr‹   c                óv   € V P                  \        P                  ! \        V4      .V P                  O5!  4      # r&  )rŸ   r   Úmpf_zeta_intr2  r-  rZ  s   &&r‚   Ú	_zeta_intÚMPContext._zeta_intÿ   s+   € Ø�|‰|œE×.Ò.¬s°1«vÐK¸×8JÑ8JÓKÓLÐLr‹   c                óÒ   € V P                  V4      pV P                  V4      pV P                  \        P                  ! VP                  VP                  .V P
                  O5!  4      # r&  )r*  rŸ   r   Ú	mpf_atan2r,  r-  )r�   r.  r'  s   &&&r‚   rz   ÚMPContext.atan2  sI   € Ø�K‰K˜‹NˆØ�K‰K˜‹NˆØ�|‰|œEŸOšO¨A¯G©G°Q·W±WÐR¸s×?QÑ?QÓRÓSÐSr‹   c                óT  € V P                  V4      p\        V4      pV P                  V4      '       d<   V P                  \        P
                  ! WP                  .V P                  O5!  4      # V P                  \        P                  ! WP                  .V P                  O5!  4      # r&  )r*  r2  Ú_is_real_typerŸ   r   Úmpf_psir,  r-  r¢   Úmpc_psirF  )r�   Úmr9  s   &&&r‚   ry   ÚMPContext.psi  sw   € Ø�K‰K˜‹NˆÜ�‹FˆØ×Ñ˜Q×ÒØ—<‘<¤§¢¨a·±Ð N¸3×;MÑ;MÓ NÓOÐOà—<‘<¤§¢¨a·±Ð N¸3×;MÑ;MÓ NÓOÐOr‹   c                ó&  € \        V4      V P                  9  d   V P                  V4      pV P                  V4      w  r4\	        VR 4      '       dF   \
        P                  ! VP                  W44      w  rVV P                  V4      V P                  V4      3# \	        VR4      '       dF   \
        P                  ! VP                  W44      w  rVV P                  V4      V P                  V4      3# V P                  ! V3/ VB V P                  ! V3/ VB 3# ©r,  rF  )Útypern   r*  Ú_parse_precr4  r   Úmpf_cos_sinr,  rŸ   Úmpc_cos_sinrF  r¢   rÂ   r¿   ©r�   r'  Úkwargsr‡   r:  ÚcÚss   &&,    r‚   Úcos_sinÚMPContext.cos_sin  sÖ   € Ü�‹7˜#Ÿ)™)Ô#Ø—‘˜A“ˆAØŸ™¨Ó0‰ˆÜ�1�g×ÒÜ×$Ò$ Q§W¡W¨dÓ=‰DˆAØ—<‘< “? C§L¡L°£OÐ3Ð3Ü�Q˜× Ò Ü×$Ò$ Q§W¡W¨dÓ=‰DˆAØ—<‘< “? C§L¡L°£OÐ3Ð3à—7’7˜1Ñ' Ñ'¨¯ª°Ñ)=°fÑ)=Ð=Ð=r‹   c                ó&  € \        V4      V P                  9  d   V P                  V4      pV P                  V4      w  r4\	        VR 4      '       dF   \
        P                  ! VP                  W44      w  rVV P                  V4      V P                  V4      3# \	        VR4      '       dF   \
        P                  ! VP                  W44      w  rVV P                  V4      V P                  V4      3# V P                  ! V3/ VB V P                  ! V3/ VB 3# rj  )rk  rn   r*  rl  r4  r   Úmpf_cos_sin_pir,  rŸ   Úmpc_cos_sin_pirF  r¢   rÂ   r¿   ro  s   &&,    r‚   Úcospi_sinpiÚMPContext.cospi_sinpi  sÖ   € Ü�‹7˜#Ÿ)™)Ô#Ø—‘˜A“ˆAØŸ™¨Ó0‰ˆÜ�1�g×ÒÜ×'Ò'¨¯©°Ó@‰DˆAØ—<‘< “? C§L¡L°£OÐ3Ð3Ü�Q˜× Ò Ü×'Ò'¨¯©°Ó@‰DˆAØ—<‘< “? C§L¡L°£OÐ3Ð3à—7’7˜1Ñ' Ñ'¨¯ª°Ñ)=°fÑ)=Ð=Ð=r‹   c                óH   € V P                  4       pV P                  Vn        V# )z@
Create a copy of the context, with the same working precision.
)Ú	__class__r‡   )r�   rS  s   & r‚   ÚcloneÚMPContext.clone)  s   € ð �M‰M‹OˆØ—‘ˆŒØˆr‹   c                óT   € \        VR 4      '       g   \        V4      \        J d   R# R# )rF  FT©r4  rk  Úcomplex©r�   r'  s   &&r‚   rd  ÚMPContext._is_real_type4  s    € Ü�1�g×Ò¤$ q£'¬WÓ"4ÙÙr‹   c                óT   € \        VR 4      '       g   \        V4      \        J d   R# R# )rF  TFr  r�  s   &&r‚   Ú_is_complex_typeÚMPContext._is_complex_type9  s    € Ü�1�g×Ò¤$ q£'¬WÓ"4ÙÙr‹   c                ó¨  € \        VR4      '       d   VP                  \        8H  # \        VR4      '       d   \        VP                  9   # \	        V\
        4      '       g!   \	        V\        P                  4      '       d   R# V P                  V4      p\        VR4      '       g   \        VR4      '       d   V P                  V4      # \        R4      h)a:  
Return *True* if *x* is a NaN (not-a-number), or for a complex
number, whether either the real or complex part is NaN;
otherwise return *False*::

    >>> from mpmath import *
    >>> isnan(3.14)
    False
    >>> isnan(nan)
    True
    >>> isnan(mpc(3.14,2.72))
    False
    >>> isnan(mpc(3.14,nan))
    True

r,  rF  Fzisnan() needs a number as input)r4  r,  r!   rF  Ú
isinstancer
   r\   ro   r*  ÚisnanÚ	TypeErrorr�  s   &&r‚   rˆ  ÚMPContext.isnan>  sš   € ô" �1�g×ÒØ—7‘7œd‘?Ð"Ü�1�g×ÒÜ˜1Ÿ7™7‘?Ð"Ü�aœ×#Ò#¤z°!´X·\±\×'BÒ'BÙØ�K‰K˜‹NˆÜ�1�g×Ò¤'¨!¨W×"5Ò"5Ø—9‘9˜Q“<ÐÜÐ9Ó:Ð:r‹   c                óf   € V P                  V4      '       g   V P                  V4      '       d   R# R# )aX  
Return *True* if *x* is a finite number, i.e. neither
an infinity or a NaN.

    >>> from mpmath import *
    >>> isfinite(inf)
    False
    >>> isfinite(-inf)
    False
    >>> isfinite(3)
    True
    >>> isfinite(nan)
    False
    >>> isfinite(3+4j)
    True
    >>> isfinite(mpc(3,inf))
    False
    >>> isfinite(mpc(nan,3))
    False

FT)Úisinfrˆ  r�  s   &&r‚   ÚisfiniteÚMPContext.isfiniteZ  s#   € ð, �9‰9�Q�<Š<˜3Ÿ9™9 QŸ<š<ÙÙr‹   c                óþ  € V'       g   R# \        VR4      '       d   VP                  w  r#rET;'       d    V^ 8¬  # \        VR4      '       d5   VP                  '       * ;'       d    V P                  VP                  4      # \        V4      \        9   d   V^ 8*  # \        WP                  4      '       d+   VP                  w  rgV'       g   R# V^8H  ;'       d    V^ 8*  # V P                  V P                  V4      4      # )z,
Determine if *x* is a nonpositive integer.
Tr,  rF  )r4  r,  r<  Úisnpintr;  rk  r
   r‡  ro   Ú_mpq_r*  )r�   r'  ÚsignÚmanr¶   ÚbcÚpÚqs   &&      r‚   r�  ÚMPContext.isnpintt  sÇ   € ÷ ÙÜ�1�g×ÒØ!"§¡ÑˆD�sØ×$Ð$˜C 1™HÐ$Ü�1�g×ÒØ—v‘v”:×5Ð5 #§+¡+¨a¯f©fÓ"5Ð5Ü�‹7”iÔØ˜‘6ˆMÜ�aŸ™×!Ò!Ø—7‘7‰DˆAßÙØ˜‘6×$Ð$˜a 1™fÐ$Ø�{‰{˜3Ÿ;™; q›>Ó*Ð*r‹   c                ó  € R RV P                   ,          P                  ^4      R,           RV P                  ,          P                  ^4      R,           RV P                  ,          P                  ^4      R,           .pRP	                  V4      # )zMpmath settings:z  mp.prec = %sz[default: 53]z  mp.dps = %sz[default: 15]z  mp.trap_complex = %sz[default: False]Ú
)r‡   ÚljustÚdpsri   Újoin)r�   Úliness   & r‚   Ú__str__ÚMPContext.__str__ˆ  st   € Ø#Ø §¡Õ(×/Ñ/°Ó3°oÕEØ˜sŸw™wÕ&×-Ñ-¨bÓ1°OÕCØ%¨×(8Ñ(8Õ8×?Ñ?ÀÓCÐFXÕXð
ˆð
 �y‰y˜ÓÐr‹   c                ó,   € \        V P                  4      # r&  )r   Ú_precr€   s   &r‚   Ú_repr_digitsÚMPContext._repr_digits�  s   € ä˜Ÿ	™	Ó"Ð"r‹   c                ó   € V P                   # r&  )Ú_dpsr€   s   &r‚   Ú_str_digitsÚMPContext._str_digits”  s   € à�x‰xˆr‹   Fc                ó(   a€ \        V V3R lRV4      # )aƒ  
The block

    with extraprec(n):
        <code>

increases the precision n bits, executes <code>, and then
restores the precision.

extraprec(n)(f) returns a decorated version of the function f
that increases the working precision by n bits before execution,
and restores the parent precision afterwards. With
normalize_output=True, it rounds the return value to the parent
precision.
c                 ó   <€ V S,           # r&  © ©r•  r8  s   &€r‚   r‰   Ú%MPContext.extraprec.<locals>.<lambda>¨  s	   ø€ ¨q°1®ur‹   N©ÚPrecisionManager©r�   r8  Únormalize_outputs   &f&r‚   Ú	extraprecÚMPContext.extraprec˜  s   ø€ ô    ¤_°dÐ<LÓMÐMr‹   c                ó(   a€ \        V RV3R lV4      # )z~
This function is analogous to extraprec (see documentation)
but changes the decimal precision instead of the number of bits.
Nc                 ó   <€ V S,           # r&  rª  ©Údr8  s   &€r‚   r‰   Ú$MPContext.extradps.<locals>.<lambda>¯  s	   ø€ °Q¸¶Ur‹   r­  r¯  s   &f&r‚   ÚextradpsÚMPContext.extradpsª  s   ø€ ô
    T¬?Ð<LÓMÐMr‹   c                ó(   a€ \        V V3R lRV4      # )ak  
The block

    with workprec(n):
        <code>

sets the precision to n bits, executes <code>, and then restores
the precision.

workprec(n)(f) returns a decorated version of the function f
that sets the precision to n bits before execution,
and restores the precision afterwards. With normalize_output=True,
it rounds the return value to the parent precision.
c                 ó   <€ S# r&  rª  r«  s   &€r‚   r‰   Ú$MPContext.workprec.<locals>.<lambda>À  s   ø€ ©qr‹   Nr­  r¯  s   &f&r‚   ÚworkprecÚMPContext.workprec±  s   ø€ ô   ¤[°$Ð8HÓIÐIr‹   c                ó(   a€ \        V RV3R lV4      # )z}
This function is analogous to workprec (see documentation)
but changes the decimal precision instead of the number of bits.
Nc                 ó   <€ S# r&  rª  rµ  s   &€r‚   r‰   Ú#MPContext.workdps.<locals>.<lambda>Ç  s   ø€ ±Qr‹   r­  r¯  s   &f&r‚   ÚworkdpsÚMPContext.workdpsÂ  s   ø€ ô
    T¬;Ð8HÓIÐIr‹   Nc                ó$   a aaaa€ VV VVV3R lpV# )aÛ  
Return a wrapped copy of *f* that repeatedly evaluates *f*
with increasing precision until the result converges to the
full precision used at the point of the call.

This heuristically protects against rounding errors, at the cost of
roughly a 2x slowdown compared to manually setting the optimal
precision. This method can, however, easily be fooled if the results
from *f* depend "discontinuously" on the precision, for instance
if catastrophic cancellation can occur. Therefore, :func:`~mpmath.autoprec`
should be used judiciously.

**Examples**

Many functions are sensitive to perturbations of the input arguments.
If the arguments are decimal numbers, they may have to be converted
to binary at a much higher precision. If the amount of required
extra precision is unknown, :func:`~mpmath.autoprec` is convenient::

    >>> from mpmath import *
    >>> mp.dps = 15
    >>> mp.pretty = True
    >>> besselj(5, 125 * 10**28)    # Exact input
    -8.03284785591801e-17
    >>> besselj(5, '1.25e30')   # Bad
    7.12954868316652e-16
    >>> autoprec(besselj)(5, '1.25e30')   # Good
    -8.03284785591801e-17

The following fails to converge because `\sin(\pi) = 0` whereas all
finite-precision approximations of `\pi` give nonzero values::

    >>> autoprec(sin)(pi) # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
      ...
    NoConvergence: autoprec: prec increased to 2910 without convergence

As the following example shows, :func:`~mpmath.autoprec` can protect against
cancellation, but is fooled by too severe cancellation::

    >>> x = 1e-10
    >>> exp(x)-1; expm1(x); autoprec(lambda t: exp(t)-1)(x)
    1.00000008274037e-10
    1.00000000005e-10
    1.00000000005e-10
    >>> x = 1e-50
    >>> exp(x)-1; expm1(x); autoprec(lambda t: exp(t)-1)(x)
    0.0
    1.0e-50
    0.0

With *catch*, an exception or list of exceptions to intercept
may be specified. The raised exception is interpreted
as signaling insufficient precision. This permits, for example,
evaluating a function where a too low precision results in a
division by zero::

    >>> f = lambda x: 1/(exp(x)-1)
    >>> f(1e-30)
    Traceback (most recent call last):
      ...
    ZeroDivisionError
    >>> autoprec(f, catch=ZeroDivisionError)(1e-30)
    1.0e+30


c                  ó„  <€ S	P                   pSf   S	P                  V4      pMSp V^
,           S	n          S
! V / VB pV^,           p VS	n          S
! V / VB pWF8X  d   M›S	P                  Wd,
          4      S	P                  V4      ,
          pWr) 8  d   MfS'       d   \	        RV: RV: RV) : 24       TpWS8¼  d   S	P                  RV,          4      hV\        V^,          4      ,          p\        WS4      pK³  VS	n         V5#   S d    S	P                  p LÛi ; i  S d    S	P                  p LÚi ; i  TS	n         i ; i)Nzautoprec: target=z, prec=z, accuracy=z2autoprec: prec increased to %i without convergence)r‡   Ú_default_hyper_maxprecr¦   ÚmagÚprintÚNoConvergencer2  Úmin)Úargsrp  r‡   Úmaxprec2Úv1Úprec2Úv2ÚerrÚcatchr�   ÚfÚmaxprecÚverboses   *,      €€€€€r‚   Úf_autoprec_wrappedÚ.MPContext.autoprec.<locals>.f_autoprec_wrapped  sN  ø€ Ø—8‘8ˆDØŠØ×5Ñ5°dÓ;‘à"�ð Ø "�9�”ð!Ù˜DÐ+ FÑ+�Bð ˜r�	�ØØ$�C”Hð%Ù Ð/¨Ñ/˜ð ”xØØŸ'™' "¥%›.¨3¯7©7°2«;Õ6�CØ˜e”}ØßÝÛ#£U¨SªDð2ô 3à�BØÔ(Ø!×/Ñ/ØLØõ ó!ð !ð œS  q¥›\Õ)�EÜ Ó0’Eà�”Ø�3ˆJøð5 ô !ØŸ™’Bð!ûð !ô %Ø ŸW™Wšð%ûð$  �•úsY   §D6 ¶D ¾D6 ÁD ÁAD6 ÂAD6 ÄDÄD6 ÄDÄD6 ÄD3Ä0D6 Ä2D3Ä3D6 Ä6	D?rª  )r�   rÒ  rÓ  rÑ  rÔ  rÕ  s   fffff r‚   ÚautoprecÚMPContext.autoprecÉ  s   ü€ ÷H$	ñ $	ðJ "Ð!r‹   c                óf  a aa€ \        V\        4      '       d%   RRP                  V VV3R lV 4       4      ,          # \        V\        4      '       d%   RRP                  V VV3R lV 4       4      ,          # \	        VR4      '       d   \        VP                  S3/ SB # \	        VR4      '       d&   R\        VP                  S3/ SB ,           R	,           # \        V\        4      '       d   \        V4      # \        VS P                  4      '       d   VP                  ! S3/ SB # \        V4      # )
a;  
Convert an ``mpf`` or ``mpc`` to a decimal string literal with *n*
significant digits. The small default value for *n* is chosen to
make this function useful for printing collections of numbers
(lists, matrices, etc).

If *x* is a list or tuple, :func:`~mpmath.nstr` is applied recursively
to each element. For unrecognized classes, :func:`~mpmath.nstr`
simply returns ``str(x)``.

The companion function :func:`~mpmath.nprint` prints the result
instead of returning it.

The keyword arguments *strip_zeros*, *min_fixed*, *max_fixed*
and *show_zero_exponent* are forwarded to :func:`~mpmath.libmp.to_str`.

The number will be printed in fixed-point format if the position
of the leading digit is strictly between min_fixed
(default = min(-dps/3,-5)) and max_fixed (default = dps).

To force fixed-point format always, set min_fixed = -inf,
max_fixed = +inf. To force floating-point format, set
min_fixed >= max_fixed.

    >>> from mpmath import *
    >>> nstr([+pi, ldexp(1,-500)])
    '[3.14159, 3.05494e-151]'
    >>> nprint([+pi, ldexp(1,-500)])
    [3.14159, 3.05494e-151]
    >>> nstr(mpf("5e-10"), 5)
    '5.0e-10'
    >>> nstr(mpf("5e-10"), 5, strip_zeros=False)
    '5.0000e-10'
    >>> nstr(mpf("5e-10"), 5, strip_zeros=False, min_fixed=-11)
    '0.00000000050000'
    >>> nstr(mpf(0), 5, show_zero_exponent=True)
    '0.0e+0'

z[%s]z, c              3   óL   <"  € T F  pSP                   ! VS3/ SB x € K  	  R # 5ir&  ©Únstr©Ú.0rq  r�   rp  r8  s   & €€€r‚   Ú	<genexpr>Ú!MPContext.nstr.<locals>.<genexpr>]  ó!   øé € Ð&KÉÀA s§x¢x°°1Ñ'?¸Ö'?Ëùó   ƒ!$z(%s)c              3   óL   <"  € T F  pSP                   ! VS3/ SB x € K  	  R # 5ir&  rÛ  rÝ  s   & €€€r‚   rß  rà  _  rá  râ  r,  rF  Ú(Ú))r‡  Úlistrœ  Útupler4  r   r,  r8   rF  r   ÚreprÚmatrixÚ__nstr__Ústr)r�   r'  r8  rp  s   f&flr‚   rÜ  ÚMPContext.nstr4  sè   ú€ ôP �aœ×ÒØ˜TŸY™YÖ&KÉÓ&KÓKÕLÐLÜ�aœ×ÒØ˜TŸY™YÖ&KÉÓ&KÓKÕLÐLÜ�1�g×ÒÜ˜!Ÿ'™' 1Ñ/¨Ñ/Ð/Ü�1�g×ÒØœ A§G¡G¨QÑ9°&Ñ9Õ9¸SÕ@Ð@Ü�aœ×$Ò$Ü˜“7ˆNÜ�a˜Ÿ™×$Ò$Ø—:’:˜aÑ* 6Ñ*Ð*Ü�1‹vˆr‹   c                ób  € V'       dÌ   \        V\        4      '       d¶   R VP                  4       9   d¡   VP                  4       P                  RR4      p\        P                  V4      pVP                  R4      pV'       g   ^ pVP                  R4      P                  R 4      pV P                  V P                  V4      V P                  V4      4      # \        VR4      '       d1   VP                  w  rgWg8X  d   V P                  V4      # \        R4      h\        R\        V4      ,           4      h)r£   Ú Ú ÚreÚimÚ_mpi_z,can only create mpf from zero-width intervalzcannot create mpf from )r‡  r   ÚlowerÚreplaceÚget_complexÚmatchÚgroupÚrstriprl   r*  r4  rò  rŸ   Ú
ValueErrorr‰  rè  )r�   r'  Ústringsrö  rð  rñ  rS  rT  s   &&&     r‚   Ú_convert_fallbackÚMPContext._convert_fallbackj  sã   € ß”z !¤Z×0Ò0Ø�a—g‘g“iÔØ—G‘G“I×%Ñ% c¨2Ó.�Ü#×)Ñ)¨!Ó,�Ø—[‘[ Ó&�ßØ�BØ—[‘[ Ó&×-Ñ-¨cÓ2�Ø—w‘w˜sŸ{™{¨2›°·±¸B³Ó@Ð@Ü�1�g×ÒØ—7‘7‰DˆAØŒvØ—|‘| A“Ð&ä Ð!OÓPÐPÜÐ1´D¸³GÕ;Ó<Ð<r‹   c                ó&   € V P                   ! V/ VB # r&  )r*  )r�   rË  rp  s   &*,r‚   Ú	mpmathifyÚMPContext.mpmathify|  s   € Ø�{Š{˜DÐ+ FÑ+Ð+r‹   c                óZ  € V'       d™   VP                  R 4      '       d   R# V P                  w  r#RV9   d
   VR,          pRV9   d+   VR,          pW P                  8X  d   R# \        V4      p W#3# RV9   d'   VR,          pW@P                  8X  d   R# \	        V4      pW#3# V P                  # )Úexactr:  r‡   r›  )r†   rÒ  )Úgetr-  r¤   r2  r   )r�   rp  r‡   r:  r›  s   &&   r‚   rl  ÚMPContext._parse_prec  s¨   € ßØ�z‰z˜'×"Ò"Ø�Ø ×/Ñ/‰NˆDØ˜VÔ#Ø! *Õ-�Ø˜ÔØ˜f•~�ØŸ7™7”?Ø!�Mä˜t›9‘Dð �>Ð!ð ˜&”Ø˜U•m�ØŸ'™'”>Ø!�MÜ" 3Ó'�Ø�>Ð!Ø×!Ñ!Ð!r‹   z'the exact result does not fit in memoryzœhypsum() failed to converge to the requested %i bits of accuracy
using a working precision of %i bits. Try with a higher maxprec,
maxterms, or set zeroprec.c                ót  € \        VR 4      '       d   WVR3pVP                  p	M#\        VR4      '       d   WVR3pVP                  p	XV P                  9  d+   \        P
                  ! V4      ^,          V P                  V&   V P                  V,          p
V P                  pVP                  RV P                  V4      4      p^2p^p/ p^ p\        V4       Fû  w  ppVV,          R8X  db   VV8¼  dY   V^ 8:  dR   Rp\        VRV 4       F*  w  ppVV,          R8X  g   K  V^ 8:  g   K  VV8:  g   K(  RpK,  	  V'       g   \        R	4      hKu  V P                  V4      w  pp\        V4      ) pV) pVV8¼  dK   V^ 8¼  dD   V^8”  d=   VV9   d   VV;;,          V,          uu&   MVVV&   \        VVV,
          ^<,           4      pV\        V4      ,          pKý  	   WÜ8”  d%   \        V P                   W»V,           3,          4      hW½,           pV'       d   \#        R
 V 4       4      pM/ pV
! VX	VVVV3/ VB w  pppV) pRpVV8  d'   VP%                  4        F  pVe
   VV8  g   K  Rp M	  VV^,
          ^,
          8  ;'       g    V'       * pV'       dK   V'       d   M_VP                  R4      p V e-   VV 8”  d&   V'       d   V P'                  ^ 4      # V P(                  # V^,          pV^,          pV^,          pEK&  \+        V4      \,        J d+   V'       d   V P/                  V4      # V P1                  V4      # V# )r,  ÚRrF  ÚCrÓ  ÚZFNTzpole in hypergeometric seriesc              3   ó(   "  € T F  qR 3x € K
  	  R # 5ir&  rª  )rÞ  r8  s   & r‚   rß  Ú#MPContext.hypsum.<locals>.<genexpr>Ç  s   é € ÐB±/¨Q 4¥³/ùs   ‚Úzeroprec)r4  r,  rF  rs   r   Úmake_hyp_summatorr‡   r  rÆ  Ú	enumerateÚZeroDivisionErrorÚnint_distancer2  ÚmaxÚabsrù  Ú_hypsum_msgÚdictÚvaluesrl   r¡   rk  rç  r¢   rŸ   )!r�   r•  r–  ÚflagsÚcoeffsr9  Úaccurate_smallrp  ÚkeyrU  Úsummatorr‡   rÓ  r±  ÚepsshiftÚmagnitude_checkÚmax_total_jumpÚirq  ÚokÚiiÚccr8  r¶  ÚwpÚmag_dictÚzvÚhave_complexÚ	magnitudeÚcancelÚjumps_resolvedÚaccurater
  s!   &&&&&&&,                         r‚   ÚhypsumÚMPContext.hypsumš  s  € Ü�1�g×ÒØ˜˜sÐ"ˆCØ—‘‰AÜ�Q˜× Ò Ø˜˜sÐ"ˆCØ—‘ˆAØ�c×'Ñ'Ô'Ü%*×%<Ò%<¸SÓ%AÀ!Õ%DˆC×Ñ˜cÑ"Ø×$Ñ$ SÕ)ˆØ�x‰xˆØ—*‘*˜Y¨×(BÑ(BÀ4Ó(HÓIˆØˆ	Øˆð ˆØˆÜ˜fÖ%‰DˆAˆqØ�Q�x˜3ŒØ˜”6˜a 1œfØ�BÜ"+¨F°2°A¨JÖ"7™˜˜Bà  �9¨Ö+°°a¶¸AÀ¾GØ!%šBñ #8÷ Ü/Ð0OÓPÐPÙØ×$Ñ$ QÓ'‰DˆAˆqÜ�Q“�ˆAØ�ˆAØ�AŒv˜!˜qœ& Q¨¤UØ˜Ô'Ø# A×&¨!Õ+Ô&à)*�O AÑ&Ü 	¨1¨t­8°b­=Ó9�	Øœc !›fÕ$ŠNñ) &ð* ØÔ"Ü  §¡°D¸y½.Ð3IÕ!IÓJÐJØÕ!ˆBßÜÑB±/ÓBÓB‘à�Ù*2°6¸1¸dÀBØ˜(ñ+.Ø&,ñ+.Ñ'ˆB�˜ià�ZˆFØ!ˆNØ˜>Ô)Ø!Ÿ™Ö*�AØš	 q¨4¦xØ).˜Ùñ +ð  ¨2¥¨a¥Ñ/×EÐE°~Ô3EˆHßßØà!Ÿ:™: jÓ1�ØÒ'Ø Ô(ß'Ø#&§7¡7¨1£:Ð-à#&§8¡8˜Oð ˜�NˆIà˜�MˆHØ˜�N‹Iä�‹8”uÓßØ—|‘| BÓ'Ð'à—|‘| BÓ'Ð'àˆIr‹   c                ó„   € V P                  V4      pV P                  \        P                  ! VP                  V4      4      # )aF  
Computes `x 2^n` efficiently. No rounding is performed.
The argument `x` must be a real floating-point number (or
possible to convert into one) and `n` must be a Python ``int``.

    >>> from mpmath import *
    >>> mp.dps = 15; mp.pretty = False
    >>> ldexp(1, 10)
    mpf('1024.0')
    >>> ldexp(1, -3)
    mpf('0.125')

)r*  rŸ   r   Ú	mpf_shiftr,  rH  s   &&&r‚   ÚldexpÚMPContext.ldexpï  s/   € ð �K‰K˜‹NˆØ�|‰|œEŸOšO¨A¯G©G°QÓ7Ó8Ð8r‹   c                óŽ   € V P                  V4      p\        P                  ! VP                  4      w  r#V P	                  V4      V3# )zý
Given a real number `x`, returns `(y, n)` with `y \in [0.5, 1)`,
`n` a Python integer, and such that `x = y 2^n`. No rounding is
performed.

    >>> from mpmath import *
    >>> mp.dps = 15; mp.pretty = False
    >>> frexp(7.5)
    (mpf('0.9375'), 3)

)r*  r   Ú	mpf_frexpr,  rŸ   )r�   r'  r.  r8  s   &&  r‚   ÚfrexpÚMPContext.frexp   s8   € ð �K‰K˜‹NˆÜ�Š˜qŸw™wÓ'‰ˆØ�|‰|˜A‹ Ð!Ð!r‹   c                ó<  € V P                  V4      w  r4V P                  V4      p\        VR4      '       d&   V P                  \	        VP
                  W44      4      # \        VR4      '       d&   V P                  \        VP                  W44      4      # \        R4      h)a…  
Negates the number *x*, giving a floating-point result, optionally
using a custom precision and rounding mode.

See the documentation of :func:`~mpmath.fadd` for a detailed description
of how to specify precision and rounding.

**Examples**

An mpmath number is returned::

    >>> from mpmath import *
    >>> mp.dps = 15; mp.pretty = False
    >>> fneg(2.5)
    mpf('-2.5')
    >>> fneg(-5+2j)
    mpc(real='5.0', imag='-2.0')

Precise control over rounding is possible::

    >>> x = fadd(2, 1e-100, exact=True)
    >>> fneg(x)
    mpf('-2.0')
    >>> fneg(x, rounding='f')
    mpf('-2.0000000000000004')

Negating with and without roundoff::

    >>> n = 200000000000000000000001
    >>> print(int(-mpf(n)))
    -200000000000000016777216
    >>> print(int(fneg(n)))
    -200000000000000016777216
    >>> print(int(fneg(n, prec=log(n,2)+1)))
    -200000000000000000000001
    >>> print(int(fneg(n, dps=log(n,10)+1)))
    -200000000000000000000001
    >>> print(int(fneg(n, prec=inf)))
    -200000000000000000000001
    >>> print(int(fneg(n, dps=inf)))
    -200000000000000000000001
    >>> print(int(fneg(n, exact=True)))
    -200000000000000000000001

r,  rF  ú2Arguments need to be mpf or mpc compatible numbers)
rl  r*  r4  rŸ   r$   r,  r¢   r=   rF  rù  )r�   r'  rp  r‡   r:  s   &&,  r‚   ÚfnegÚMPContext.fneg  s|   € ð\ Ÿ™¨Ó0‰ˆØ�K‰K˜‹NˆÜ�1�g×ÒØ—<‘<¤¨¯©°Ó @ÓAÐAÜ�1�g×ÒØ—<‘<¤¨¯©°Ó @ÓAÐAÜÐMÓNÐNr‹   c                ó0  € V P                  V4      w  rEV P                  V4      pV P                  V4      p \        VR4      '       d…   \        VR4      '       d1   V P                  \	        VP
                  VP
                  WE4      4      # \        VR4      '       d1   V P                  \        VP                  VP
                  WE4      4      # \        VR4      '       d…   \        VR4      '       d1   V P                  \        VP                  VP
                  WE4      4      # \        VR4      '       d1   V P                  \        VP                  VP                  WE4      4      # \        R4      h  \        \        3 d    \        T P                  4      hi ; i)a3  
Adds the numbers *x* and *y*, giving a floating-point result,
optionally using a custom precision and rounding mode.

The default precision is the working precision of the context.
You can specify a custom precision in bits by passing the *prec* keyword
argument, or by providing an equivalent decimal precision with the *dps*
keyword argument. If the precision is set to ``+inf``, or if the flag
*exact=True* is passed, an exact addition with no rounding is performed.

When the precision is finite, the optional *rounding* keyword argument
specifies the direction of rounding. Valid options are ``'n'`` for
nearest (default), ``'f'`` for floor, ``'c'`` for ceiling, ``'d'``
for down, ``'u'`` for up.

**Examples**

Using :func:`~mpmath.fadd` with precision and rounding control::

    >>> from mpmath import *
    >>> mp.dps = 15; mp.pretty = False
    >>> fadd(2, 1e-20)
    mpf('2.0')
    >>> fadd(2, 1e-20, rounding='u')
    mpf('2.0000000000000004')
    >>> nprint(fadd(2, 1e-20, prec=100), 25)
    2.00000000000000000001
    >>> nprint(fadd(2, 1e-20, dps=15), 25)
    2.0
    >>> nprint(fadd(2, 1e-20, dps=25), 25)
    2.00000000000000000001
    >>> nprint(fadd(2, 1e-20, exact=True), 25)
    2.00000000000000000001

Exact addition avoids cancellation errors, enforcing familiar laws
of numbers such as `x+y-x = y`, which don't hold in floating-point
arithmetic with finite precision::

    >>> x, y = mpf(2), mpf('1e-1000')
    >>> print(x + y - x)
    0.0
    >>> print(fadd(x, y, prec=inf) - x)
    1.0e-1000
    >>> print(fadd(x, y, exact=True) - x)
    1.0e-1000

Exact addition can be inefficient and may be impossible to perform
with large magnitude differences::

    >>> fadd(1, '1e-100000000000000000000', prec=inf)
    Traceback (most recent call last):
      ...
    OverflowError: the exact result does not fit in memory

r,  rF  r3  )rl  r*  r4  rŸ   r%   r,  r¢   rA   rF  r@   rù  ÚOverflowErrorÚ_exact_overflow_msg©r�   r'  r.  rp  r‡   r:  s   &&&,  r‚   ÚfaddÚMPContext.faddF  s7  € ðp Ÿ™¨Ó0‰ˆØ�K‰K˜‹NˆØ�K‰K˜‹Nˆð	9Ü�q˜'×"Ò"Ü˜1˜g×&Ò&ØŸ<™<¬°·±¸¿¹À$Ó(QÓRÐRÜ˜1˜g×&Ò&ØŸ<™<¬°A·G±G¸Q¿W¹WÀdÓ(UÓVÐVÜ�q˜'×"Ò"Ü˜1˜g×&Ò&ØŸ<™<¬°A·G±G¸Q¿W¹WÀdÓ(UÓVÐVÜ˜1˜g×&Ò&ØŸ<™<¬°·±¸¿¹À$Ó(QÓRÐRô ÐMÓNÐNøô œMÐ*ô 	9Ü × 7Ñ 7Ó8Ð8ð	9úó!   ·AE. ÂAE. ÃAE. Ä!AE. Å.'Fc                ó<  € V P                  V4      w  rEV P                  V4      pV P                  V4      p \        VR4      '       d‹   \        VR4      '       d1   V P                  \	        VP
                  VP
                  WE4      4      # \        VR4      '       d7   V P                  \        VP
                  \        3VP                  WE4      4      # \        VR4      '       d…   \        VR4      '       d1   V P                  \        VP                  VP
                  WE4      4      # \        VR4      '       d1   V P                  \        VP                  VP                  WE4      4      # \        R4      h  \        \        3 d    \        T P                  4      hi ; i)aY  
Subtracts the numbers *x* and *y*, giving a floating-point result,
optionally using a custom precision and rounding mode.

See the documentation of :func:`~mpmath.fadd` for a detailed description
of how to specify precision and rounding.

**Examples**

Using :func:`~mpmath.fsub` with precision and rounding control::

    >>> from mpmath import *
    >>> mp.dps = 15; mp.pretty = False
    >>> fsub(2, 1e-20)
    mpf('2.0')
    >>> fsub(2, 1e-20, rounding='d')
    mpf('1.9999999999999998')
    >>> nprint(fsub(2, 1e-20, prec=100), 25)
    1.99999999999999999999
    >>> nprint(fsub(2, 1e-20, dps=15), 25)
    2.0
    >>> nprint(fsub(2, 1e-20, dps=25), 25)
    1.99999999999999999999
    >>> nprint(fsub(2, 1e-20, exact=True), 25)
    1.99999999999999999999

Exact subtraction avoids cancellation errors, enforcing familiar laws
of numbers such as `x-y+y = x`, which don't hold in floating-point
arithmetic with finite precision::

    >>> x, y = mpf(2), mpf('1e1000')
    >>> print(x - y + y)
    0.0
    >>> print(fsub(x, y, prec=inf) + y)
    2.0
    >>> print(fsub(x, y, exact=True) + y)
    2.0

Exact addition can be inefficient and may be impossible to perform
with large magnitude differences::

    >>> fsub(1, '1e-100000000000000000000', prec=inf)
    Traceback (most recent call last):
      ...
    OverflowError: the exact result does not fit in memory

r,  rF  r3  )rl  r*  r4  rŸ   r&   r,  r¢   rB   r   rF  rC   rù  r7  r8  r9  s   &&&,  r‚   ÚfsubÚMPContext.fsub�  s<  € ð` Ÿ™¨Ó0‰ˆØ�K‰K˜‹NˆØ�K‰K˜‹Nˆð	9Ü�q˜'×"Ò"Ü˜1˜g×&Ò&ØŸ<™<¬°·±¸¿¹À$Ó(QÓRÐRÜ˜1˜g×&Ò&ØŸ<™<¬°·±¼%Ð0@À!Ç'Á'È4Ó(ZÓ[Ð[Ü�q˜'×"Ò"Ü˜1˜g×&Ò&ØŸ<™<¬°A·G±G¸Q¿W¹WÀdÓ(UÓVÐVÜ˜1˜g×&Ò&ØŸ<™<¬°·±¸¿¹À$Ó(QÓRÐRô ÐMÓNÐNøô œMÐ*ô 	9Ü × 7Ñ 7Ó8Ð8ð	9ús!   ·AE4 ÂAE4 ÃAE4 Ä'AE4 Å4'Fc                ó0  € V P                  V4      w  rEV P                  V4      pV P                  V4      p \        VR4      '       d…   \        VR4      '       d1   V P                  \	        VP
                  VP
                  WE4      4      # \        VR4      '       d1   V P                  \        VP                  VP
                  WE4      4      # \        VR4      '       d…   \        VR4      '       d1   V P                  \        VP                  VP
                  WE4      4      # \        VR4      '       d1   V P                  \        VP                  VP                  WE4      4      # \        R4      h  \        \        3 d    \        T P                  4      hi ; i)ae  
Multiplies the numbers *x* and *y*, giving a floating-point result,
optionally using a custom precision and rounding mode.

See the documentation of :func:`~mpmath.fadd` for a detailed description
of how to specify precision and rounding.

**Examples**

The result is an mpmath number::

    >>> from mpmath import *
    >>> mp.dps = 15; mp.pretty = False
    >>> fmul(2, 5.0)
    mpf('10.0')
    >>> fmul(0.5j, 0.5)
    mpc(real='0.0', imag='0.25')

Avoiding roundoff::

    >>> x, y = 10**10+1, 10**15+1
    >>> print(x*y)
    10000000001000010000000001
    >>> print(mpf(x) * mpf(y))
    1.0000000001e+25
    >>> print(int(mpf(x) * mpf(y)))
    10000000001000011026399232
    >>> print(int(fmul(x, y)))
    10000000001000011026399232
    >>> print(int(fmul(x, y, dps=25)))
    10000000001000010000000001
    >>> print(int(fmul(x, y, exact=True)))
    10000000001000010000000001

Exact multiplication with complex numbers can be inefficient and may
be impossible to perform with large magnitude differences between
real and imaginary parts::

    >>> x = 1+2j
    >>> y = mpc(2, '1e-100000000000000000000')
    >>> fmul(x, y)
    mpc(real='2.0', imag='4.0')
    >>> fmul(x, y, rounding='u')
    mpc(real='2.0', imag='4.0000000000000009')
    >>> fmul(x, y, exact=True)
    Traceback (most recent call last):
      ...
    OverflowError: the exact result does not fit in memory

r,  rF  r3  )rl  r*  r4  rŸ   r'   r,  r¢   rE   rF  rD   rù  r7  r8  r9  s   &&&,  r‚   ÚfmulÚMPContext.fmulÒ  s7  € ðf Ÿ™¨Ó0‰ˆØ�K‰K˜‹NˆØ�K‰K˜‹Nˆð	9Ü�q˜'×"Ò"Ü˜1˜g×&Ò&ØŸ<™<¬°·±¸¿¹À$Ó(QÓRÐRÜ˜1˜g×&Ò&ØŸ<™<¬°A·G±G¸Q¿W¹WÀdÓ(UÓVÐVÜ�q˜'×"Ò"Ü˜1˜g×&Ò&ØŸ<™<¬°A·G±G¸Q¿W¹WÀdÓ(UÓVÐVÜ˜1˜g×&Ò&ØŸ<™<¬°·±¸¿¹À$Ó(QÓRÐRô ÐMÓNÐNøô œMÐ*ô 	9Ü × 7Ñ 7Ó8Ð8ð	9úr<  c                ó  € V P                  V4      w  rEV'       g   \        R4      hV P                  V4      pV P                  V4      p\        VR4      '       d‹   \        VR4      '       d1   V P	                  \        VP                  VP                  WE4      4      # \        VR4      '       d7   V P                  \        VP                  \        3VP                  WE4      4      # \        VR4      '       d…   \        VR4      '       d1   V P                  \        VP                  VP                  WE4      4      # \        VR4      '       d1   V P                  \        VP                  VP                  WE4      4      # \        R4      h)a‰  
Divides the numbers *x* and *y*, giving a floating-point result,
optionally using a custom precision and rounding mode.

See the documentation of :func:`~mpmath.fadd` for a detailed description
of how to specify precision and rounding.

**Examples**

The result is an mpmath number::

    >>> from mpmath import *
    >>> mp.dps = 15; mp.pretty = False
    >>> fdiv(3, 2)
    mpf('1.5')
    >>> fdiv(2, 3)
    mpf('0.66666666666666663')
    >>> fdiv(2+4j, 0.5)
    mpc(real='4.0', imag='8.0')

The rounding direction and precision can be controlled::

    >>> fdiv(2, 3, dps=3)    # Should be accurate to at least 3 digits
    mpf('0.6666259765625')
    >>> fdiv(2, 3, rounding='d')
    mpf('0.66666666666666663')
    >>> fdiv(2, 3, prec=60)
    mpf('0.66666666666666667')
    >>> fdiv(2, 3, rounding='u')
    mpf('0.66666666666666674')

Checking the error of a division by performing it at higher precision::

    >>> fdiv(2, 3) - fdiv(2, 3, prec=100)
    mpf('-3.7007434154172148e-17')

Unlike :func:`~mpmath.fadd`, :func:`~mpmath.fmul`, etc., exact division is not
allowed since the quotient of two floating-point numbers generally
does not have an exact floating-point representation. (In the
future this might be changed to allow the case where the division
is actually exact.)

    >>> fdiv(2, 3, exact=True)
    Traceback (most recent call last):
      ...
    ValueError: division is not an exact operation

z"division is not an exact operationr,  rF  r3  )rl  rù  r*  r4  rŸ   r)   r,  r¢   rG   r   rF  rH   r9  s   &&&,  r‚   ÚfdivÚMPContext.fdiv  s  € ðb Ÿ™¨Ó0‰ˆßÜÐAÓBÐBØ�K‰K˜‹NˆØ�K‰K˜‹NˆÜ�1�g×ÒÜ�q˜'×"Ò"Ø—|‘|¤G¨A¯G©G°Q·W±W¸dÓ$MÓNÐNÜ�q˜'×"Ò"Ø—|‘|¤G¨Q¯W©W´eÐ,<¸a¿g¹gÀtÓ$VÓWÐWÜ�1�g×ÒÜ�q˜'×"Ò"Ø—|‘|¤K°·±¸¿¹À$Ó$QÓRÐRÜ�q˜'×"Ò"Ø—|‘|¤G¨A¯G©G°Q·W±W¸dÓ$MÓNÐNÜÐMÓNÐNr‹   c                ó(  € \        V4      pV\        9   d   \        V4      V P                  3# V\        P
                  J d}   VP                  w  r4\        W44      w  rV^V,          V8¼  d   V^,          pMV'       g   WPP                  3# \        \        W5V,          ,
          4      4      \        V4      ,
          pWW3# \        VR4      '       d   VP                  pV P                  p	Mª\        VR4      '       dH   VP                  w  rŠV
w  r¼rÞV'       d
   WÞ,           p	MtV
\        8X  d   V P                  p	M\\        R4      hV P                  V4      p\        VR4      '       g   \        VR4      '       d   V P!                  V4      # \#        R4      hVw  ppppVV,           pV^ 8  d   ^ pTpM×V'       d«   V^ 8¼  d   VV,          pV P                  pM�VR8X  d   V^,	          ^,           p^ pMgV) ^,
          pVV,	          pV^,          '       d   V^,          pVV,          V,
          pMVVV,          ,          pV^,	          pV\        V4      ,           pV'       d   V) pM%V\        8X  d   V P                  p^ pM\        R4      hV\%        VV	4      3# )aÒ  
Return `(n,d)` where `n` is the nearest integer to `x` and `d` is
an estimate of `\log_2(|x-n|)`. If `d < 0`, `-d` gives the precision
(measured in bits) lost to cancellation when computing `x-n`.

    >>> from mpmath import *
    >>> n, d = nint_distance(5)
    >>> print(n); print(d)
    5
    -inf
    >>> n, d = nint_distance(mpf(5))
    >>> print(n); print(d)
    5
    -inf
    >>> n, d = nint_distance(mpf(5.00000001))
    >>> print(n); print(d)
    5
    -26
    >>> n, d = nint_distance(mpf(4.99999999))
    >>> print(n); print(d)
    5
    -26
    >>> n, d = nint_distance(mpc(5,10))
    >>> print(n); print(d)
    5
    4
    >>> n, d = nint_distance(mpc(5,0.000001))
    >>> print(n); print(d)
    5
    -19

r,  rF  zrequires a finite numberzrequires an mpf/mpcéÿÿÿÿ)rk  r
   r2  r¥   r\   ro   r‘  Údivmodr6   r  r4  r,  rF  r   rù  r*  r  r‰  r  )r�   r'  Útypxr•  r–  r8  Úrr¶  rð  Úim_distrñ  ÚisignÚimanÚiexpÚibcr’  r“  r¶   r”  rÇ  Úre_distÚts   &&                    r‚   r  ÚMPContext.nint_distanceY  s.  € ôB �A‹wˆØ”9ÔÜ�q“6˜3Ÿ8™8Ð#Ð#Ø”X—\‘\Ó!Ø—7‘7‰DˆAÜ˜!“<‰DˆAØ��s�aŒxØ�Q•‘ßØŸ(™(�{Ð"äœ˜Q �s�U›Ó$¤x°£{Õ2ˆAØ�4ˆKÜ�1�g×ÒØ—‘ˆBØ—h‘h‰GÜ�Q˜× Ò Ø—W‘W‰FˆBØ%'Ñ"ˆE˜ßØ�*‘Ø”u”ØŸ(™(‘ä Ð!;Ó<Ð<à—‘˜A“ˆAÜ�q˜'×"Ò"¤g¨a°×&9Ò&9Ø×(Ñ(¨Ó+Ð+äÐ 5Ó6Ð6ØÑˆˆc�3˜Ø�"�fˆà�Œ7ØˆAØ‰Gßà�aŒxØ˜3•J�ØŸ(™(‘à˜”Ø˜!•V˜Q•J�Ø‘à�T˜!•V�Ø˜1•H�Ø�q—5”5Ø˜•F�AØ˜a�4 3�,‘Cà˜A˜q�D•M�CØ�q•D�Øœh s›mÕ+�ßØ�B�øØ”5Œ[Ø—h‘hˆGØ‰AäÐ7Ó8Ð8Ø”#�g˜wÓ'Ð'Ð'r‹   c                ó~   € V P                   p V P                  pV F  pW4,          pK  	  W n         V5#   Y n         i ; i)a  
Calculates a product containing a finite number of factors (for
infinite products, see :func:`~mpmath.nprod`). The factors will be
converted to mpmath numbers.

    >>> from mpmath import *
    >>> mp.dps = 15; mp.pretty = False
    >>> fprod([1, 2, 0.5, 7])
    mpf('7.0')

)r‡   r    )r�   ÚfactorsÚorigrU  r•  s   &&   r‚   ÚfprodÚMPContext.fprod»  sC   € ð �x‰xˆð	Ø—‘ˆAÛ�Ø•’ñ ð ŒHØˆrˆ	øð �Hús   Ž4 ´<c                óJ   € V P                  \        V P                  4      4      # )z—
Returns an ``mpf`` with value chosen randomly from `[0, 1)`.
The number of randomly generated bits in the mantissa is equal
to the working precision.
)rŸ   r4   r¡  r€   s   &r‚   ÚrandÚMPContext.randÐ  s   € ð �|‰|œH S§Y¡YÓ/Ó0Ð0r‹   c                óB   aa€ V P                  VV3R lS: RS: 24      # )a   
Given Python integers `(p, q)`, returns a lazy ``mpf`` representing
the fraction `p/q`. The value is updated with the precision.

    >>> from mpmath import *
    >>> mp.dps = 15
    >>> a = fraction(1,100)
    >>> b = mpf(1)/100
    >>> print(a); print(b)
    0.01
    0.01
    >>> mp.dps = 30
    >>> print(a); print(b)      # a will be accurate
    0.01
    0.0100000000000000002081668171172
    >>> mp.dps = 15
c                 ó   <€ \        SSW4      # r&  )r   )r‡   rˆ   r•  r–  s   &&€€r‚   r‰   Ú$MPContext.fraction.<locals>.<lambda>ê  s   ø€ ¬m¸A¸qÀ$Ô.Lr‹   Ú/)rm   )r�   r•  r–  s   &ffr‚   ÚfractionÚMPContext.fractionØ  s!   ù€ ð$ �|‰|ÕLÛš!Ðóð 	r‹   c                ó6   € \        V P                  V4      4      # r&  ©r  r*  r�  s   &&r‚   ÚabsminÚMPContext.absminí  ó   € Ü�3—;‘;˜q“>Ó"Ð"r‹   c                ó6   € \        V P                  V4      4      # r&  rb  r�  s   &&r‚   ÚabsmaxÚMPContext.absmaxð  re  r‹   c                óŠ   € \        VR 4      '       d1   VP                  w  r#V P                  V4      V P                  V4      .# V# )rò  )r4  rò  rŸ   )r�   r'  rS  rT  s   &&  r‚   Ú
_as_pointsÚMPContext._as_pointsó  s:   € ä�1�g×ÒØ—7‘7‰DˆAØ—L‘L “O S§\¡\°!£_Ð5Ð5Øˆr‹   c                ón  € V P                  V4      '       d   \        VR 4      '       g   \        h\        V4      pV P                  p\
        P                  ! VP                  W#WEV4      w  rxV U	u. uF  q�P                  V	4      NK  	  pp	V U
u. uF  q P                  V
4      NK  	  pp
Wx3# u up	i u up
i )rF  )	Úisintr4  r5  r2  r¡  r   Úmpc_zetasumrF  r¢   )r�   rr  rS  r8  ÚderivativesÚreflectr‡   ÚxsÚysr'  r.  s   &&&&&&     r‚   Ú_zetasum_fastÚMPContext._zetasum_fast  s’   € Ø—	‘	˜!—’¤¨¨G×!4Ò!4Ü%Ð%Ü�‹FˆØ�y‰yˆÜ×"Ò" 1§7¡7¨A°+ÈÓM‰ˆÙ')Ó*¡r !�l‰l˜1Žo¡rˆÐ*Ù')Ó*¡r !�l‰l˜1Žo¡rˆÐ*Øˆvˆùò +ùÚ*s   Á0B-ÂB2rª  )r@  ©F)Nrª  F)é   )T);Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rh   rr   r7   r/  r=  rA  rI  rN  rV  ru   r^  rz   ry   rs  rx  r|  rd  r„  rˆ  r�  r�  rž  Úpropertyr¢  r¦  r±  r¸  r½  rÂ  r×  rÜ  rû  rþ  rl  r8  r  r(  r,  r0  r4  r:  r>  rA  rD  r  rV  rY  r_  rc  rg  rj  rs  Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r‚   re   re   :   sd  ø‡ € ñò1òBT5òl òTò.ò.ò
JòPôAòNòMòTò
Pò>ò>òòò
ò
;ò8ò4+ò( ð ñ#ó ð#ð ñó ðôNô$NôJô"Jôi"ôV4òl=ò$,ò"ð* DÐð€KôSòj9ò""ò 4OòlHOòT@OòDCOòJ@OòD`(òDò*1òò*#ò#òðð" 23°¸U÷ ò r‹   re   c                   ó<   a € ] tR tRt o RR ltR tR tR tRtV t	R# )	r®  i  c                ó6   € Wn         W n        W0n        W@n        R # r&  )r�   ÚprecfunÚdpsfunr°  )Úselfr�   rƒ  r„  r°  s   &&&&&r‚   rh   ÚPrecisionManager.__init__  s   € ØŒØŒØŒØ 0Ör‹   c                óJ   a a€ \         P                  ! S4      VV 3R  l4       pV# )c                  ój  <€ SP                   P                  p SP                  '       d6   SP                  SP                   P                  4      SP                   n        M4SP                  SP                   P                  4      SP                   n        SP
                  '       d\   S! V / VB p\        V4      \        J d-   \        V Uu. uF  qD5NK  	  up4      VSP                   n        # V5VSP                   n        # S! V / VB VSP                   n        # u upi   TSP                   n        i ; ir&  )r�   r‡   rƒ  r„  r›  r°  rk  rç  )rË  rp  rU  rU  rS  rÒ  r…  s   *,   €€r‚   ÚgÚ$PrecisionManager.__call__.<locals>.g  sá   ø€ à—8‘8—=‘=ˆDð%Ø—<—<�<Ø$(§L¡L°·±·±Ó$?�D—H‘H•Mà#'§;¡;¨t¯x©x¯|©|Ó#<�D—H‘H”LØ×(×(Ð(Ù˜4Ð* 6Ñ*�AÜ˜A“w¤%Ó'Ü$±!£_±!¨Q£b±!¡_Ó5ð
 !%�—‘•ð	 ˜2ð !%�—‘•ñ ˜dÐ- fÑ-à $�—‘•ùò &5øð
 !%�—‘•ús5   ™D «A:D Â&$D Ã
DÃD Ã-D ÄD ÄD ÄD2)Ú	functoolsÚwraps)r…  rÒ  r‰  s   ff r‚   Ú__call__ÚPrecisionManager.__call__  s%   ù€ Ü	�Š˜Ó	õ	%ó 
ð	%ð  ˆr‹   c                ó4  € V P                   P                  V n        V P                  '       d7   V P                  V P                   P                  4      V P                   n        R # V P	                  V P                   P
                  4      V P                   n        R # r&  )r�   r‡   Úorigprƒ  r„  r›  )r…  s   &r‚   Ú	__enter__ÚPrecisionManager.__enter__.  sR   € Ø—X‘X—]‘]ˆŒ
Ø�<�<ˆ<Ø ŸL™L¨¯©¯©Ó7ˆD�H‰HŽMàŸ;™; t§x¡x§|¡|Ó4ˆD�H‰HŽLr‹   c                ó<   € V P                   V P                  n        R # ru  )r�  r�   r‡   )r…  Úexc_typeÚexc_valÚexc_tbs   &&&&r‚   Ú__exit__ÚPrecisionManager.__exit__4  s   € ØŸ
™
ˆ�‰ŒÙr‹   )r�   r„  r°  r�  rƒ  Nru  )
rw  rx  ry  rz  rh   r�  r‘  r—  r}  r~  r  s   @r‚   r®  r®    s   ø‡ € ô1ò
ò&5÷ð r‹   r®  Ú__main__)wr{  Ú__docformat__r‹  rð  Úctx_baser   Úlibmp.backendr   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*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   ÚobjectÚ__new__ÚnewÚcompilerõ  Úsage.libs.mpmath.ext_mainr^   rg   ÚlibsÚmpmathÚext_mainÚ_mpf_moduler`   r_   ra   rb   rc   re   r®  rw  ÚdoctestÚtestmodrª  r‹   r‚   Ú<module>r¨     s  ðñð €ã ã 	å )ç .å ÷÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ õ õ. Ý à‡n�n€à�jŠjð Kó L€ð ˆfÔÝBç3Ô3å?Ý.ç 0Ñ 0ôY�Ð2ô Y÷v&!ñ !ðH ˆzÔÛØ‡O‚OÖñ r‹   