+
    ‰°³jU«  ã                   óp  € R t ^ RIt^ RIHt ^RIHt ^RIHtHtHtHtH	t	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/H0t0H1t1H2t2H3t3H4t4H5t5H6t6H7t7H8t8 ^RI9H:t: ]
R8X  d   Rt;MR	t;R
t<]
R8X  d   R	t=M^Èt=^t>/ t?Rt@/ tARtB^	tC/ tD^tERtF^tG/ tH^^.tI]! ^]! ]B4      ^,           4       F7  tJ]I]K! ^]J,          ]B4      ^,           .^]J^,
          ,          ,          ,          tIK9  	  R tLR tMR tNR tORNR ltP]LR 4       tQ]LR 4       tR ]! R4      tS]! R4      tT]! R4      tU]! ^4      tVR tW]LROR l4       tXR tYR tZ]LR 4       t[]LR 4       t\]M! ]\4      t]]M! ]X4      t^]M! ][4      t_]M! ]Y4      t`]M! ]Q4      ta]M! ]R4      tb]LR 4       tc]LR  4       td]M! ]d4      te]M! ]c4      tf]3R! ltgR" thR# ti]3R$ ltj]3R% ltkRPR& ltlR' tmR( tnRQR) ltoR* tp]3R+ ltqR, trR- tsR. ttR/ tuR0 tv]3R1 ltw]3R2 ltx]3R3 lty]3R4 ltz]3R5 lt{]3R6 lt|]3R7 lt}]3R8 lt~RQR9 ltR: t€R; t�R< t‚]3R= ltƒ]^ 3R> lt„R? t…]^ R3R@ lt†]3RA lt‡]3RB ltˆ]3RC lt‰]3RD ltŠ]3RE lt‹]3RF ltŒ]3RG lt�]3RH ltŽ]3RI lt�RPRJ lt�RPRK lt‘]
RL8X  d�    ^ RI’H“u H”u H•t– ]–Ph                  t4]–EP                  tƒ]–Pâ                  tq]–EP                  t‡]–EP                  tˆ]–PÎ                  tg]–EP"                  t‘]–EP                   t�]–PØ                  tlR# R#   ]—]˜3 d    ]™! RM4        R# i ; i)Ra(  
This module implements computation of elementary transcendental
functions (powers, logarithms, trigonometric and hyperbolic
functions, inverse trigonometric and hyperbolic) for real
floating-point numbers.

For complex and interval implementations of the same functions,
see libmpc and libmpi.

N)Úbisect)Úxrange)ÚMPZÚMPZ_ZEROÚMPZ_ONEÚMPZ_TWOÚMPZ_FIVEÚBACKEND)-Úround_floorÚround_ceilingÚ
round_downÚround_upÚround_nearestÚ
round_fastÚComplexResultÚbitcountÚbctableÚlshiftÚrshiftÚgiant_stepsÚ
sqrt_fixedÚfrom_intÚto_intÚfrom_man_expÚto_fixedÚto_floatÚ
from_floatÚfrom_rationalÚ	normalizeÚfzeroÚfoneÚfnoneÚfhalfÚfinfÚfninfÚfnanÚmpf_cmpÚmpf_signÚmpf_absÚmpf_posÚmpf_negÚmpf_addÚmpf_subÚmpf_mulÚmpf_divÚ	mpf_shiftÚmpf_rdiv_intÚmpf_pow_intÚmpf_sqrtÚreciprocal_rndÚnegative_rndÚmpf_perturbÚ
isqrt_fast)ÚifibÚpythonéX  i�  iÜ  iÐ  iÄ	  i¸  c                ót   a € RS n         RS n        V 3R lpS P                  Vn        S P                  Vn        V# )zÔ
Decorator for caching computed values of mathematical
constants. This decorator should be applied to a
function taking a single argument prec as input and
returning a fixed-point value with the given precision.
Nc                 óè   <€ SP                   pW8:  d   SP                  W ,
          ,	          # \        V R ,          ^
,           4      pS! V3/ VB Sn        VSn         SP                  W0,
          ,	          # )gÍÌÌÌÌÌð?)Ú	memo_precÚmemo_valÚint)ÚprecÚkwargsr<   ÚnewprecÚfs   &,  €ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/mpmath/libmp/libelefun.pyÚgÚconstant_memo.<locals>.g^   s^   ø€ Ø—K‘Kˆ	ØÔØ—:‘: )¥.Õ1Ð1Ü�d˜4•i •lÓ#ˆÙ�wÑ) &Ñ)ˆŒ
ØˆŒØ�z‰z˜g�lÕ+Ð+ó    éÿÿÿÿ)r<   r=   Ú__name__Ú__doc__)rB   rD   s   f rC   Úconstant_memorJ   U   s5   ø€ ð €A„KØ€A„Jõ,ð —‘€A„JØ—	‘	€A„IØ€HrF   c                óD   a € \         3V 3R llpS P                  Vn        V# )zë
Create a function that computes the mpf value for a mathematical
constant, given a function that computes the fixed-point value.

Assumptions: the constant is positive and has magnitude ~= 1;
the fixed-point function rounds to floor.
c                 óŠ   <€ V ^,           pS! V4      pV\         \        39   d
   V^,          p\        ^ W2) \        V4      W4      # )é   )r   r   r   r   )r?   ÚrndÚwpÚvÚfixeds   &&  €rC   rB   Údef_mpf_constant.<locals>.fr   sB   ø€ Ø�B�YˆÙ�"‹IˆØ”8œ]Ð+Ô+Ø��FˆAÜ˜˜A˜s¤H¨Q£K°Ó;Ð;rF   )r   rI   )rQ   rB   s   f rC   Údef_mpf_constantrS   j   s   ø€ ô ÷ <ð —‘€A„IØ€HrF   c                 óx  € W!,
          ^8X  d^   \        ^V,          ^,           4      pV'       g   V^,          '       d   \        W@^,          ,          V3# \        ) W@^,          ,          V3# W,           ^,          p\        WWS4      w  rgp\        WW#4      w  ršpW¦,          W‰,          ,           Wz,          W‹,          3# ©é   )r   r   Úbsp_acot)ÚqÚaÚbÚ
hyperbolicÚa1ÚmÚp1Úq1Úr1Úp2Úq2Úr2s   &&&&        rC   rW   rW   {   s“   € Ø…u�„zÜ��1•�q•‹\ˆß˜˜1ŸœÜ˜B A¥�I rÐ)Ð)ä�8˜R Q¥$�Y¨Ð*Ð*Ø	
�ˆq�€AÜ˜! Ó.�J€BˆBÜ˜! Ó.�J€BˆBØ�5�2•5�=˜"�% ¥Ð&Ð&rF   c                óÂ   € \        RV,          \        P                  ! V 4      ,          ^,           4      p\        V ^ W24      w  rEpWE,           V,          WP,          ,          # )z�
Compute acot(a) or acoth(a) for an integer a with binary splitting; see
http://numbers.computation.free.fr/Constants/Algorithms/splitting.html
çffffffÖ?)r>   ÚmathÚlogrW   )rY   r?   r[   ÚNÚprX   Úrs   &&&    rC   Ú
acot_fixedrk   ‰   sI   € ô
 	ˆD�4�KœŸš ›Õ# bÕ(Ó)€AÜ�q˜!˜AÓ*�G€Aˆ!Ø�S�4�K˜1�3ÕÐrF   Fc                óž   € ^
p\         pV  F8  w  rVV\        V4      \        \        V4      W,           V4      ,          ,          pK:  	  WC,	          # )zØ
Evaluate a Machin-like formula, i.e., a linear combination of
acot(n) or acoth(n) for specific integer values of n, using fixed-
point arithmetic. The input should be a list [(c, n), ...], giving
c*acot[h](n) + ...
)r   r   rk   )Úcoefsr?   r[   Ú	extraprecÚsrY   rZ   s   &&&    rC   Úmachinrp   ’   sD   € ð €IÜ€AÛ‰ˆØ	ŒS�‹V”j¤ Q£¨­¸ÓDÕDÕDŠñ à�NÐrF   c                ó    € \        . ROV R4      # )zn
Computes ln(2). This is done with a hyperbolic Machin-type formula,
with binary splitting at high precision.
T))é   é   )éþÿÿÿiÁ  )é   i-"  ©rp   ©r?   s   &rC   Ú	ln2_fixedrx   ¢   s   € ô Ò3°T¸4Ó@Ð@rF   c                ó    € \        . ROV R4      # )zF
Computes ln(10). This is done with a hyperbolic Machin-type formula.
T))é.   é   )é"   é1   )rM   é¡   rv   rw   s   &rC   Ú
ln10_fixedr   ª   s   € ô
 Ò1°4¸Ó>Ð>rF   iqcÏ i¦-~ i@Å	 c                óD  € W,
          ^8X  d”   \        ^V,          ^,
          ^V,          ^,
          ,          ^V,          ^,
          ,          4      pV^,          \        ^,          ,          ^,          pRV,          V,          \        \        V,          ,           ,          pM}V'       d   V^8  d   \	        RW4       W,           ^,          p\        WV^,           V4      w  r‰p
\        WqV^,           V4      w  r¼pWœ,          pW‹,          pW¬,          WØ,          ,           pWEV3# )zÃ
Computes the sum from a to b of the series in the Chudnovsky
formula. Returns g, p, q where p/q is the sum as an exact
fraction and g is a temporary value used to save work
for recursive calls.
z  binary splittingrG   )r   ÚCHUD_CÚCHUD_AÚCHUD_BÚprintÚbs_chudnovsky)rY   rZ   ÚlevelÚverboserD   ri   rX   ÚmidÚg1r^   r_   Úg2ra   rb   s   &&&&          rC   r…   r…   Ó   sØ   € ð 	…sˆa„xÜ��1•�Q•˜˜1�˜Q�•  1¥ Q¥Õ'Ó(ˆØˆq�D”6˜1•9Õ Õ"ˆØ�!�G�a�Kœ6¤&¨¥(�?Õ+‰ç�u˜q”yÜÐ&¨Ô-Ø�s�Q�hˆÜ" 1¨5°­7°GÓ<‰
ˆ�Ü" 3¨5°­7°GÓ<‰
ˆ�Ø�EˆØ�EˆØ�E�B•E�MˆØ�ˆ7€NrF   c                ó:  € \        V R,          R,          ^,           4      pV'       d   \        RV4       \        ^ V^ V4      w  rEp\        \        ^V ,          ,          4      pV\        ,          V,          V\
        V,          ,           \        ,          ,          pV# )zƒ
Compute floor(pi * 2**prec) as a big integer.

This is done using Chudnovsky's series (see comments in
libelefun.py for details).
gÿ¢v	O“
@g biå ],@zbinary splitting with N =)r>   r„   r…   r6   r�   r‚   ÚCHUD_D)	r?   r‡   Úverbose_baserh   rD   ri   rX   ÚsqrtCrP   s	   &&&      rC   Úpi_fixedr�   é   sv   € ô 	ˆD�Õ˜lÕ*¨QÕ.Ó/€AßÜÐ)¨1Ô-Ü˜A˜q ! WÓ-�G€Aˆ!Ü”v  $¥Õ'Ó(€EØ	Œ&���˜!œF 1�H�*¤fÕ,Õ-€AØ€HrF   c                 ó&   € \        V 4      ^´,          # )é´   )r�   rw   s   &rC   Údegree_fixedr’   ú   s   € Ü�D‹>˜3ÕÐrF   c                ó¾   € W,
          ^8X  d   \         \        V4      3# W,           ^,          p\        W4      w  r4\        W!4      w  rVW6,          V,           WF,          3# )zY
Sum series for exp(1)-1 between a, b, returning the result
as an exact fraction (p, q).
)r   r   Úbspe)rY   rZ   r]   r^   r_   ra   rb   s   &&     rC   r”   r”   ý   sN   € ð
 	…sˆa„xÜœ˜A›ˆÐØ	
�ˆq�€AÜ�!‹Z�F€BÜ�!‹Z�F€BØ�5��8�R•Uˆ?ÐrF   c                ó²   € \        RV ,          \        P                  ! V 4      ,          ^,           4      p\        ^ V4      w  r#W#,           V ,          V,          # )zÞ
Computes exp(1). This is done using the ordinary Taylor series for
exp, with binary splitting. For a description of the algorithm,
see:

    http://numbers.computation.free.fr/Constants/
        Algorithms/splitting.html
gš™™™™™ñ?)r>   rf   rg   r”   )r?   rh   ri   rX   s   &   rC   Úe_fixedr–   	  sB   € ô 	ˆC��H”T—X’X˜d“^Õ# bÕ(Ó)€AÜ��!‹9�D€AØ�S�4�K˜!ÕÐrF   c                ó„   € V ^
,          p \        \        ^V ,          ,          4      \        V ,          ,           pV^,	          # )z*
Computes the golden ratio, (1+sqrt(5))/2
)r6   r   r   )r?   rY   s   & rC   Ú	phi_fixedr˜     s2   € ð
 	ˆB…J€DÜ”8˜a �fÕ%Ó&¬'°T­/Õ:€AØ��7€NrF   c           	      ót   € V ^
,           p\        \        \        \        V4      ^4      V4      V ^,
          4      # )é
   )r   Úmpf_logr/   Úmpf_pi)r?   rO   s   & rC   Úln_sqrt2pi_fixedr�   *  s.   € à	��€Bä”GœI¤f¨R£j°!Ó4°bÓ9¸4À½6ÓBÐBrF   c                 ó,   € \        \        V 4      V 4      # ©N)r   r�   rw   s   &rC   Úsqrtpi_fixedr    0  s   € ä”h˜t“n dÓ+Ð+rF   c           	     ó(  € V w  rErgVw  r‰r«V'       d   V
^ 8  d   \        R4      hV
^ 8¼  d"   \        V RV,          Wš,          ,          W#4      # V
R8X  d™   V	^8X  dB   V'       d.   \        \        \	        W^
,           \
        V,          4      W#4      # \	        WV4      # V'       d+   \        \	        W^
,           \
        V,          4      V	) W#4      # \        \	        W^
,           V4      W’V4      # \        W^
,           V4      p\        \        W4      W#4      # )zJ
Compute s**t. Raises ComplexResult if s is negative and t is
fractional.
z,negative number raised to a fractional powerrG   )	r   r1   r.   r    r2   r3   r›   Úmpf_expr-   )ro   Útr?   rN   ÚssignÚsmanÚsexpÚsbcÚtsignÚtmanÚtexpÚtbcÚcs   &&&&         rC   Úmpf_powr­   >  sü   € ð
 Ñ€E�ØÑ€E�ß�˜”ÜÐJÓKÐKØˆq„yÜ˜1˜r E�k¨T­ZÕ8¸$ÓDÐDàˆr„zØ�1Œ9ßÜœt¤X¨a°bµÜ" 3Õ'ó&)Ø*.ó5ð 5ä˜A SÓ)Ð)çÜ"¤8¨A°B­wÜ" 3Õ'ó$)Ø+/¨%°ó<ð <äœx¨°­7°CÓ8¸$ÀcÓJÐJô 	�˜•7˜CÓ €AÜ”7˜1“= $Ó,Ð,rF   c                ó   € V^8X  d   W ,          ^ 3# \        V 4      p^ p^V^\        V4      ,          ,           ^,           ,          p\        w  rgr‰ V^,          '       d~   Wp,          pW„,           pW“^,
          ,          p	V	\        \        Wy,	          4      ,          ,           p	W•8”  d!   WyV,
          ,	          pW‰V,
          ,          pTp	V^,          pV'       g    Wx3# W ,          p WD,           pW3,           ^,
          pV\        \        W,	          4      ,          ,           pW58”  d!   WV,
          ,	          p WCV,
          ,          pTpV^,          pEK  )zun-th power of a fixed point number with precision prec

Returns the power in the form man, exp,
man * 2**exp ~= y**n
)r   r    r   r>   )
ÚyÚnr?   ÚbcÚexpÚworkprecÚ_ÚpmÚpeÚpbcs
   &&&       rC   Úint_pow_fixedr¸   Z  s  € ð 	ˆA„vØ•�aˆxˆÜ	�!‹€BØ
€CØ�D˜1œX a›[�=Õ(¨1Õ,Õ-€HÜ�N€Aˆ2Ø
Øˆq�5Œ5Ø•ˆBØ•ˆBØ˜•6�MˆCØœ¤ B¥I£Õ/Õ/ˆCØŒ~Ø �LÕ)�Ø˜H•nÕ$�Ø�Ø��FˆAßØð ˆ6€Mð �CˆØ�gˆØ�W�q�[ˆØ”'œ#˜a�g›,Õ'Õ'ˆØŒ=Ø˜•kÕ"ˆAØ˜•=Õ ˆCØˆBØ��F‹rF   c                 óŠ  € ^2p \        WW,          ,
          4      p\        \        VRV,          ,          4      4      p^
pTp	Tp
\        WBV,           4       F�  p\        Wa^,
          V
4      w  rÍ\        WÁ^,
          V
,          V,
          V,
          V	,
          4      p\        V ^V,          V,
          V	,           4      V,          pWñ^,
          \        WkV
,
          4      ,          ,           V,          pTp
KŸ  	  V#   \         d?    \	        XT4      p\	        T4      p\        ^Yt4      p\        YWT4      p\        T4      p ELi ; i)é2   g      ð?)r   r   r>   ÚOverflowErrorr   r0   r­   r   r   r¸   r   )r¯   r°   r?   Úexp1ÚstartÚy1rj   ÚfnÚextraÚextra1Úprevpri   rµ   r¶   rc   ÚBs   &&&&            rC   Únthroot_fixedrÄ   �  s  € Ø€EðÜ�A˜a�g•~Ó&ˆÜ”�B˜˜Q�•KÓ Ó!ˆð €EØ€FØ€EÜ˜ U¥
Ö+ˆÜ˜q A¥# uÓ-‰ˆÜ�B˜1�˜e� a�¨"Õ,¨vÕ5Ó6ˆÜ�1�a˜•c˜$•h˜v•oÓ&¨Õ*ˆØ�A•#œ  U¥7Ó+Õ+Õ+¨aÕ/ˆØŠñ ,ð €Høô ô Ü�b˜%Ó ˆÜ�a‹[ˆÜ˜!˜RÓ'ˆÜ�B˜EÓ"ˆÜ�1‹I‹ðús   „:C9 Ã9AEÅEc                ól  € V w  rErgV'       d   \        R4      hV'       g^   V \        8X  d   \        # V \        8X  d!   V^ 8”  d   \        # V^ 8X  d   \        # \        # V'       g   \        # V^ 8  d   \        # \        # RpV^8  dU   V^ 8X  d   \        # V^8X  d   \        WV4      # VR8X  d   \        \        WV4      # \        V,          pRp^p	W),          pV) pV^8”  d¦   VR8¼  g&   V\        ^éRVR,          ,          ,           4      8  dz   V^
,           p
\        V4      p\        ^Wº4      p\        WW£4      p\        V^ ,          V^,          V^,          V^,          W#4      p V'       d   \        \        WX	,
          V4      # V # V^V,          ,           W!,          ,
          p
V^
8”  d   Wª^
,          ,          p
WªV,          ,
          p
Wz,
          p^ pWn,           pV^ 8  d   ^pV) pV'       d   VVV,          ,          pMVVV,          ,          p\        W^4      p^
pWn,           V^,
          V
,          ,
          V,          V,
          p^ pV'       d   VR8X  g   VR8X  d   ^pMVR	8X  g   VR
8X  d   ^p\        VV,           WV4      p\        VVW#4      p V'       d   \        \        WX	,
          V4      # V # )zYnth-root of a positive number

Use the Newton method when faster, otherwise use x**(1/n)
znth root of a negative numberFTi N  gÍÌÌÌÌL<@g×£p=
×ã?Úur¬   ÚdrB   rG   )r   r%   r   r    r#   r)   r.   r3   r>   r   r0   r­   r   r   rÄ   r   )ro   r°   r?   rN   ÚsignÚmanr²   r±   Úflag_inverseÚextra_inverseÚprec2r¿   Únthrj   ÚshiftÚsign1ÚesrÀ   r¼   Ú	rnd_shifts   &&&&                rC   Úmpf_nthrootrÒ   ¦  si  € ð
 Ñ€DˆsßÜÐ;Ó<Ð<ßØ”Œ9ÜˆKØ”Œ:Ø�1ŒuÜ�Ø�AŒvÜ�ÜˆKçÜˆKØˆqŒ5ÜˆLÜˆØ€LØˆ1„uØ�Œ6ÜˆKØ�Œ6Ü˜1 CÓ(Ð(Ø�Œ7Üœ4 ¨#Ó.Ð.ä˜SÕ!ˆØˆØˆØÕˆØˆBˆØˆ2„v�1˜”: ¬¨C°$¸¸D½µ.Õ,@Ó(AÔ!AØ�r•	ˆÜ�a‹[ˆÜ˜1˜bÓ(ˆÜ�A˜EÓ'ˆÜ�a˜•d˜A˜a�D ! A¥$¨¨!­¨dÓ8ˆßÜœ4 ¨Õ$6¸Ó<Ð<àˆHà�1�Q•3�J˜$�&Õ!€Eð 	ˆ2„vØ˜•ÕˆØ˜a�•ˆà�J€Eà€EØ	�€BØ	ˆA„vØˆØˆSˆßØ��A•�‰à��A•�ˆÜ
�Ó
€CØ€EØ�Y˜˜!�˜U•{Õ" QÕ&¨%Õ/€DØ€IßØ�#Œ:˜ œØˆIøà�#Œ:˜ œØˆIÜ
˜˜I� q°Ó
6€CÜ�S˜$ Ó*€AßÜ”t˜Q ]Õ 2°CÓ8Ð8àˆrF   c                ó   € \        V ^W4      # )zcubic root of a positive number)rÒ   )ro   r?   rN   s   &&&rC   Úmpf_cbrtrÔ   ù  s   € ä�q˜!˜TÓ'Ð'rF   c                ó   € V \         9   d%   \         V ,          w  r4WA8¼  d   W4V,
          ,	          # V^
,           pV\        8:  dC   Vf   \        V4      p\        V 4      pWV,
          ,          p\	        Wu4      Wb,          ,           pM&\        \        \        V 4      V^,           4      V4      pV \        8  d   W…3\         V &   W…V,
          ,	          # )zT
Fast computation of log(n), caching the value for small n,
intended for zeta sums.
)	Úlog_int_cacheÚLOG_TAYLOR_SHIFTrx   r   Úlog_taylor_cachedr   r›   r   ÚMAX_LOG_INT_CACHE)	r°   r?   Úln2ÚvalueÚvprecrO   rj   ÚxrP   s	   &&&      rC   Úlog_int_fixedrÞ     s«   € ð
 	ŒMÔÜ$ QÕ'‰ˆØŒ=Ø T�\Õ*Ð*Ø	��€BØ	ÔÔØŠ;Ü˜B“-ˆCÜ�Q‹KˆØ�Q•$�KˆÜ˜aÓ$ q¥uÕ,‰ä”WœX a›[¨"¨Q­$Ó/°Ó4ˆØÔÔØ˜7Œ�aÑØ�D•�>ÐrF   c                ó    € ^ p W,           ^,	          pV^8”  d   \        W,
          4      ^8  d   V # \        W,          4      pTp V^,          pKM  )zR
Fixed-point computation of agm(a,b), assuming
a, b both close to unit magnitude.
)Úabsr6   )rY   rZ   r?   ÚiÚanews   &&&  rC   Ú	agm_fixedrã     sH   € ð
 	
€AØ
Ø•�a�xˆØˆqŒ5”S˜�“[ 1”_ØˆHÜ�q•s‹OˆØˆØ	ˆQ�ŠrF   c                ó$  € W ,          V,	          pT;p;rEV'       d)   WR,          V,	          pWE,          V,	          pW4,          pK0  V\         V,          ,          pW3,          V^,
          ,	          pV\        W,          4      ,          V,	          pT ;p;rEV'       d)   WR,          V,	          pWE,          V,	          pWd,          pK0  \         V,          V^,          ,           pWf,          V,	          p\        W6V4      p\        V4      V,          V,          # )aê  
Fixed-point computation of -log(x) = log(1/x), suitable
for large precision. It is required that 0 < x < 1. The
algorithm used is the Sasaki-Kanada formula

    -log(x) = pi/agm(theta2(x)^2,theta3(x)^2). [1]

For faster convergence in the theta functions, x should
be chosen closer to 0.

Guard bits must be added by the caller.

HYPOTHESIS: if x = 2^(-n), n bits need to be added to
account for the truncation to a fixed-point number,
and this is the only significant cancellation error.

The number of bits lost to roundoff is small and can be
considered constant.

[1] Richard P. Brent, "Fast Algorithms for High-Precision
    Computation of Elementary Functions (extended abstract)",
    http://wwwmaths.anu.edu.au/~brent/pd/RNC7-Brent.pdf

)r   r6   rã   r�   )rÝ   r?   Úx2ro   rY   rZ   r£   ri   s   &&      rC   Úlog_agmræ   )  sÕ   € ð2 �#�$�€Bà€N€A€Nˆß
Ø�T�d�NˆØ�S�T�MˆØ	�ŠØŒ'�4�-Õ€AØ	
���Q•�€AØ	
Œ:�a•gÓÕ	 Õ%€Aà€M€A€Mˆß
Ø�T�d�NˆØ�S�T�MˆØ	�ŠÜ	�$�˜1˜a�4Õ €AØ	
�ˆt�€Aä�!˜Ó€AÜ�T‹N˜dÕ" qÕ(Ð(rF   c                ó$  € \        V4       F  p\        W,          4      p K  	  \        V,          pW,
          V,          W,           ,          pV^ 8  pV'       d   V) pWU,          V,	          pWw,          V,	          pTp	V^,          p
WX,          V,	          p^pV'       dB   W•V,          ,          p	V^,          pW¥V,          ,          p
WX,          V,	          pV^,          pKI  W§,          V,	          p
Wš,           ^V,           ,          pV'       d   V) # V# )a"  
Fixed-point calculation of log(x). It is assumed that x is close
enough to 1 for the Taylor series to converge quickly. Convergence
can be improved by specifying r > 0 to compute
log(x^(1/2^r))*2^r, at the cost of performing r square roots.

The caller must provide sufficient guard bits.
)r   r6   r   )rÝ   r?   rj   rá   ÚonerP   rÈ   Úv2Úv4Ús0Ús1Úkro   s   &&&          rC   Ú
log_taylorrî   X  sà   € ô �AŽYˆÜ�q•wÓŠñ ä
�T�/€CØ
�%�$�˜!�%Õ €AØˆq‰5€DßØˆBˆØ
�#�$�€BØ
�%�D�€BØ	
€BØ	
ˆA�€BØ	
��$�€AØ	€Aß
Ø
�1�f�ˆØ	ˆQ�ˆØ
�1�f�ˆØ�T�d�NˆØ	ˆQ�ŠØ
�%�D�€BØ	��A�a•CÕ€AßØˆrˆ	Ø€HrF   c                óÀ  € W\         ,
          ,	          p\        V,          pW1,
          pW#3\        9   d   \        W#3,          w  rVM*W#\         ,
          ,          p\        WS^4      pWV3\        W#3&   WT,          pWd,          pW,
          V,          V,          pWq,          \        V,          V,           ,          pWˆ,          V,	          p	W™,          V,	          p
TpV^,          pWŠ,          V,	          p^pV'       dB   W¸V,          ,          pV^,          pWÈV,          ,          pWŠ,          V,	          pV^,          pKI  WÉ,          V,	          pW¼,           ^,          pWn,           # )zX
Fixed-point computation of log(x), assuming x in (0.5, 2)
and prec <= LOG_TAYLOR_PREC.
)r×   Úcache_prec_stepsÚlog_taylor_cacherî   r   )rÝ   r?   r°   Úcached_precÚdprecrY   Úlog_arÆ   rP   ré   rê   rë   rì   rí   ro   s   &&             rC   rØ   rØ   z  s$  € ð
 	
Ô#Õ#Õ$€AÜ" 4Õ(€KØÕ€EØ	ÐÔ+Ô+Ü# A NÕ3‰ˆˆ5àÔ 0Õ0Õ1ˆÜ˜1¨1Ó-ˆØ,-¨:Ô˜˜Ñ(Ø…K€AØ	…O€EØ
�%�D�˜QÕ€AØ	
�œ D�¨AÕ-Õ.€AØ
�#�$�€BØ
�%�D�€BØ	
€BØ	
ˆA�€BØ	
��$�€AØ	€Aß
Ø
��d�
ˆØ	ˆQ�ˆØ
��d�
ˆØ�T�d�NˆØ	ˆQ�ŠØ
�%�D�€BØ	��1�€AØ�9ÐrF   c                ó$  € V w  r4rVV'       g4   V \         8X  d   \        # V \        8X  d   \        # V \        8X  d   \        # V'       d   \	        R4      hV^,           pV^8X  d-   V'       g   \         # \        V\        V4      ,          V) W4      # WV,           p\        V4      p	V	^8:  dƒ   ^V	,
          p
V
'       d   \        V,          V,
          pMV\        V^,
          ,          ,
          p\        V4      pWl,
          pW×8”  d!   \        W«W–,
          WÌR4      p\        WêW4      # W},          pV	R8”  d/   \        V	4      V8”  d   \        V\        V4      ,          V) W4      # V\        8:  d>   \        \        WGV,
          4      V4      pV'       d   Wø\        V4      ,          ,          pM\V) \        ,          pVV,
          p\!        V V4      p VV) ,          p\#        \%        W4      V4      ) pVV\        V4      ,          ,          p\        W÷) W4      # )z^
Compute the natural logarithm of the mpf value x. If x is negative,
ComplexResult is raised.
zlogarithm of a negative numberr°   i'  )r   r$   r#   r%   r   r   rx   rà   r   r   r   r5   ÚLOG_TAYLOR_PRECrØ   r   ÚLOG_AGM_MAG_PREC_RATIOr/   ræ   r   )rÝ   r?   rN   rÈ   rÉ   r²   r±   rO   ÚmagÚabs_magr¨   r©   r«   Úcancellationr£   r]   Úoptimal_magr°   s   &&&               rC   r›   r›   œ  s¿  € ð
 Ñ€Dˆs÷ Ø”Œ:œe�|Ø”Œ9œT�kØ”Œ9œT�kßÜÐ<Ó=Ð=Ø	��€Bð ˆa„xßÜˆLÜ˜C¤	¨"£Õ-°¨s°DÓ>Ð>Ø
�&€CÜ�#‹h€Gð �!„|à�'•	ˆßÜ˜R•K 3Õ&‰Dàœ' B q¥D�/Õ*ˆDÜ�t‹nˆØ•xˆØÔÜ˜% w¥z°3¸SÓAˆAÜ˜q¨Ó3Ð3àÕˆBð �„Ü�GÓ˜rÔ!Ü ¤I¨b£MÕ 1°B°3¸ÓBÐBð 
Œ_ÔÜœf S¨R­%Ó0°"Ó5ˆßØ”Y˜r“]Õ"Õ"ˆAøà�cÔ1Õ1ˆØ˜#ÕˆÜ�a˜‹OˆØ
�ˆ|ÕˆÜ”X˜a“_ bÓ)Ð)ˆØ	ˆQŒy˜‹}�_ÕˆÜ˜˜3 Ó*Ð*rF   c           
     ó–  € V^,          '       g   YrV ^,          '       gy   V^,          '       g3   Yu;8X  d   \         8X  d	    \        #  \        W39   d   \        # \        # V \         8X  d   \	        \        V4      W#4      # V \        8X  d   \        # \        # \        W 4      p\        W4      p^p\        WEW&,           4      p\        V\        ^
4      pV^,          V^,          ,           p	V\         8X  g   W–) ^,          8  d2   \        WEW&,           \        V^,          V^,          4      ,
          4      p\        \	        WrV4      R4      # )z)
Computes log(sqrt(a^2+b^2)) accurately.
rG   )r   r$   r%   r#   r›   r(   r-   r+   r!   Úminr/   )
rY   rZ   r?   rN   Úa2Úb2rÀ   Úh2Ú	cancelledÚmag_cancelleds
   &&&&      rC   Úmpf_log_hypotr  ä  s  € ð
 ˆQ�4Œ4Øˆ1àˆQ�4Œ4à��tŒtØŽœ�Ü�ð ä˜�vŒ~Ü�äˆKà”Œ:äœ7 1›: tÓ1Ð1Ø”Œ9ÜˆKÜˆä	�‹€BÜ	�‹€BØ€Eä	�˜�Ó	$€BÜ˜œE 2Ó&€IØ˜a•L ¨1¥Õ-€Mð ”EÔ˜]¨V°Q­YÔ6Ü�R˜T�Z¬¨B¨q­E°"°Qµ%Ó(8Õ8Ó9ˆÜ”W˜R sÓ+¨RÓ0Ð0rF   c                 ó|  € V^d8¼  d5   \         P                  ! \        W^5,
          ,	          4      R,          4      pM-\         P                  ! \        V 4      RV,          ,          4      p^2p\        \        VR,          4      ^5V,
          ,	          4      p^2p\	        W14       F‡  pWT,          pW%V,
          ,          p\        W%4      w  rgWu,          V,          pV\        WV,
          4      ,
          V,          \        V,          V^,          V,	          ,           ,          p	W),
          pTpK‰  	  \        W#V,
          4      # )éd   g       @g      @C)rf   Úatanr>   r   r   Úcos_sin_fixedr   r   )
rÝ   r?   rj   rÂ   Úextra_prO   ÚcosÚsinÚtanrY   s
   &&        rC   Úatan_newtonr    sì   € Øˆs„{Ü�IŠI”c˜1 B�w�<Ó)¨'Õ1Ó2‰ä�IŠI”c˜!“f˜S $�YÕ&Ó'ˆØ€EÜŒC��G•Ó  E¥Õ*Ó+€AØ€GÜ˜%Ö&ˆØ
�ˆØ�U•(�OˆÜ  Ó'‰ˆØ�y˜SÕ ˆØ”&˜ �GÓ$Õ$¨Õ+´'¸2µ+À3ÈÅ6ÈBÅ,Õ1OÕPˆØ�EˆØŠñ 'ô �!˜4•ZÓ Ð rF   c                 óþ   € ^\        V^,
          4      ,          ^,           pW!,
          pW3\        9   d   \        W3,          w  rEM)W\        ,
          ,          p\        WB4      pWE3\        W3&   WC,	          WS,	          3# rU   )r   Úatan_taylor_cacheÚATAN_TAYLOR_SHIFTr  )r°   r?   rÌ   ró   rY   Úatan_as   &&    rC   Úatan_taylor_get_cachedr  "  st   € ð
 ”˜$˜q�&Ó!Õ" bÕ(€EØ�L€EØ	€zÔ&Ô&Ü% a hÕ/‰	ˆˆ6àÔ+Õ+Õ,ˆÜ˜QÓ&ˆØ'( kÔ˜!˜(Ñ#Ø�J˜&�/Ð*Ð*rF   c                 ó  € W\         ,
          ,	          p\        W!4      w  r4W,
          pWQ,          V^,          V,	          W5,          V,	          ,           \        V,          ,           ,          ;rgV^,          V,	          pWˆ,          V,	          p	V^,          p
Wy,          V,	          p^pV'       dB   WgV,          ,          pV^,          pW§V,          ,          p
Wy,          V,	          pV^,          pKI  W¨,          V,	          p
Wj,
          pWL,           # ©é   )r  r  r   )rÝ   r?   r°   rY   r  rÇ   rë   rP   ré   rê   rì   rí   ro   s   &&           rC   Úatan_taylorr  1  sÓ   € Ø	
Ô%Õ%Õ	&€AÜ& qÓ/�I€AØ	�€AØ�i˜a �d d�l¨q­s°d­{Õ;¼wÈ$½ÕOÕPÐP€BØ
ˆQ�$�$�,€BØ
�'�dÕ	€BØ	
ˆA�€BØ	
��DÕ€AØ	€Aß
Ø
�1�f�ˆØ	ˆQ�ˆØ
�1�f�ˆØ�V˜ÕˆØ	ˆQ�ŠØ
�'�dÕ	€BØ
�€AØ�:ÐrF   c           	      ó�   € V '       g   \        \        W4      R4      # \        \        \        V\        V,          4      R4      4      # )rV   rG   )r/   rœ   r*   r4   )rÈ   r?   rN   s   &&&rC   Úatan_infr  E  s5   € ßÜœ Ó*¨BÓ/Ð/Ü”9œV D¬,°sÕ*;Ó<¸bÓAÓBÐBrF   c                 ó€  € V w  r4rVV'       gF   V \         8X  d   \         # V \        8X  d   \        ^ W4      # V \        8X  d   \        ^W4      # \        # WV,           pWq^,           8”  d   \        W1V4      # V) V^,           8”  d   \        V ^V,
          W4      # V^,           \        V4      ,           pV^8¼  d   \        ^W4      p Rp	MRp	\        W4      p
V'       d   V
) p
V\        8  d   \        W¨4      pM\        W¨4      pV	'       d!   \        V4      ^,	          ^,           V,
          pV'       d   V) p\        W¸) W4      # )é    TF)r   r#   r  r$   r%   r5   rà   r0   r   ÚATAN_TAYLOR_PRECr  r  r�   r   )rÝ   r?   rN   rÈ   rÉ   r²   r±   rø   rO   Ú
reciprocalr£   rY   s   &&&         rC   Úmpf_atanr  J  s  € ØÑ€DˆsßØ”Œ:œe�|Ø”Œ9œX a¨Ó3Ð3Ø”Œ:œh q¨$Ó4Ð4ÜˆØ
�(€Cà
�"�W„}Ü˜ CÓ(Ð(à€tˆd�2�g„~Ü˜1˜a �f dÓ0Ð0Ø	��”S˜“XÕ	€Bà
ˆa„xÜ˜˜AÓ"ˆØ‰
àˆ
Ü�‹€AßØˆBˆØ	ÔÔÜ˜Ó‰ä˜ÓˆßÜ�r‹l˜A�o˜qÕ  AÕ%ˆßØˆBˆÜ˜˜3 Ó*Ð*rF   c           	      ó^  € Vw  rErgV w  r‰r«V	'       g°   V \         8X  d-   V\        8w  d"   \        V4      ^ 8¼  d   \         # \        W#4      # V \        \
        39   db   V\        \
        39   d   \        # V \        8X  d   \        \        W#4      R4      # \        \        \        V\        V,          4      R4      4      # \        # V'       d+   \        \        \        V 4      W\        V,          4      4      # V'       g_   V\        8X  d   \        # V\        8X  d   \         # V\
        8X  d   \        W#4      # V \         8X  d   \         # \        \        W#4      R4      # \        \        WV^,           4      V^,           4      pV'       d   \        \        V^,           4      WÂV4      # \        WÂV4      # )r  rG   )r   r%   r'   rœ   r#   r$   r/   r*   r4   Ú	mpf_atan2r  r.   r+   r)   )r¯   rÝ   r?   rN   ÚxsignÚxmanÚxexpÚxbcÚysignÚymanÚyexpÚybcÚtquos   &&&&         rC   r  r  m  sH  € ØÑ€E�ØÑ€E�ßØ”Œ:˜!œtœ)Ü˜‹{˜aÔÜ�Ü˜$Ó$Ð$Ø””u�ÔØ”Tœ5�MÔ!Ü�à”DŒyÜ ¤¨Ó!2°BÓ7Ð7äœ9¤V¨D´,¸sÕ2CÓ%DÀbÓIÓJÐJÜˆßÜ”y¤¨£¨Q´lÀ3Õ6GÓHÓIÐIßØ”Œ9ÜˆKØ”Œ9ÜˆLØ”Œ:Ü˜$Ó$Ð$Ø”Œ:ÜˆLÜœ Ó*¨BÓ/Ð/Ü”G˜A $ q¥&Ó)¨4°­6Ó2€DßÜ”v˜d 1�f“~ t°3Ó7Ð7ä�t 3Ó'Ð'rF   c           
      ó  € V w  r4rVWe,           ^ 8”  d   V \         \        39  d   \        R4      hV^,           p\        W 4      p\	        \         \        \        \         W‡4      V4      V4      p	\        W	V4      p
\        \        W¡V4      ^4      # )r  z%asin(x) is real only for -1 <= x <= 1)
r    r!   r   r-   r+   r2   r,   r.   r/   r  ©rÝ   r?   rN   rÈ   rÉ   r²   r±   rO   rY   rZ   r¬   s   &&&        rC   Úmpf_asinr*  �  sz   € ØÑ€DˆsØ	…v�„z�a¤¤e˜}Ô,ÜÐCÓDÐDà	��€BÜ�‹€AÜ””hœw¤t¨QÓ3°RÓ8¸"Ó=€AÜ��bÓ€AÜ”X˜a sÓ+¨QÓ/Ð/rF   c                 óH  € V w  r4rVWe,           ^ 8”  d3   V \         \        39  d   \        R4      hV \        8X  d   \        W4      # V^,           p\	        W 4      p\        \        \         W‡4      V4      p	\        V	\        \         W4      V4      p
\        \        W¡V4      ^4      # )r  z%acos(x) is real only for -1 <= x <= 1)r    r!   r   rœ   r-   r2   r,   r.   r+   r/   r  r)  s   &&&        rC   Úmpf_acosr,  ›  s�   € àÑ€DˆsØ	…x�!„|Ø”Tœ5�MÔ!ÜÐ GÓHÐHØ”Œ:Ü˜$Ó$Ð$Ø	��€BÜ�‹€AÜ”œ˜qÓ% rÓ*€AÜ�”7œ4 Ó'¨Ó,€AÜ”X˜a sÓ+¨QÓ/Ð/rF   c                 ó^  € V^,           pV w  rErgWg,           pVR8  d%   Wƒ) 8  d   \        V ^V,
          W4      # W8) ,          p\        \        \        W 4      \        V4      V4      p	\        \        V 4      W“4      p	V'       d!   \        \        W‘\        V,          4      4      # \        W‘V4      # )rM   éøÿÿÿ)	r5   r2   r+   r-   r    r(   r*   r›   r4   )
rÝ   r?   rN   rO   rÈ   rÉ   r²   r±   rø   rX   s
   &&&       rC   Ú	mpf_asinhr/  ©  s˜   € Ø	��€BØÑ€DˆsØ
�&€CØ
ˆR„xØ�Œ9Ü˜q ! D¥&¨$Ó4Ð4Ø
ˆt�ˆô 	”œ ›¬¨bÓ1°2Ó6€AÜ”˜“
˜AÓ"€AßÜ”w˜q¬°SÕ(9Ó:Ó;Ð;ä�q Ó$Ð$rF   c                 óÈ   € V^,           p\        V \        4      R8X  d   \        R4      h\        \	        \        W 4      \        V4      V4      p\        \	        WV4      W4      # )é   z acosh(x) is real only for x >= 1rG   )r&   r    r   r2   r+   r-   r!   r›   )rÝ   r?   rN   rO   rX   s   &&&  rC   Ú	mpf_acoshr2  º  sS   € à	��€BÜˆq”$Ó˜2ÔÜÐ>Ó?Ð?Ü”œ ›¤u¨bÓ1°2Ó6€AÜ”7˜1 Ó$ dÓ0Ð0rF   c           	      ó¸  € V w  r4rVV'       g'   V'       d   V \         \        39   d   V # \        R 4      hWe,           pV^ 8”  d-   V^8X  d   V^8X  d   \        \        .V,          # \        R 4      hV^,           pVR8  d   Wx) 8  d   \        WW4      # W‡) ,          p\        V \        V4      p	\        \        W4      p
\        \        \        WšV4      W4      R4      # )z&atanh(x) is real only for -1 <= x <= 1r.  rG   )r   r%   r   r#   r$   r5   r+   r    r,   r/   r›   r.   )rÝ   r?   rN   rÈ   rÉ   r²   r±   rø   rO   rY   rZ   s   &&&        rC   Ú	mpf_atanhr4  Â  sÆ   € àÑ€Dˆsß—SØ”œ�ÔØˆHÜÐDÓEÐEØ
�(€CØ
ˆQ„wØ�!Œ8˜˜qœÜœ%�= Õ&Ð&ÜÐDÓEÐEØ	��€BØ
ˆR„xØ�Œ9Ü˜q¨Ó2Ð2Ø
ˆt�ˆÜ�”4˜Ó€AÜ”�aÓ€AÜ”WœW Q¨2Ó.°Ó:¸BÓ?Ð?rF   c                 óÀ  € V w  r4rVV'       g   V \         8X  d   \        # V # \        WV,           4      pV^ 8¼  d6   V^
8  g   V\        V4      8:  d   \	        \        \        V 4      4      W4      # W,           ^,           p\        V4      p	\        \        V	^4      \        V4      p
\        W�V4      p\        W4      p\        WËV4      p\        W¼V4      p\        WºW4      pV# ©r  )r$   r%   rà   r   r   r7   r   Úmpf_phir+   r/   r!   r­   Ú
mpf_cos_pir.   r,   )rÝ   r?   rN   rÈ   rÉ   r²   r±   ÚsizerO   rY   rZ   rÆ   rP   s   &&&          rC   Úmpf_fibonaccir:  ×  sÁ   € ØÑ€DˆsßØ”Œ:ÜˆKØˆäˆs�v‹;€DØ
ˆa„xà�"Œ9˜¤¨£Ô.ÜœD¤¨£›O¨TÓ7Ð7à	��rÕ	€BÜ�‹€AÜ”	˜!˜Q“¤¨Ó+€AÜ��bÓ€AÜ�1Ó€AÜ��bÓ€AÜ��bÓ€AÜ��dÓ €AØ€HrF   c                ó&  € V ^ 8  d   V ) p ^pM^ p\        RVR,          ,          4      p\        V 4      V,
          p\        ^ WT,           4      p^
^\        WE) 4      ,          ,           pW,           pWV,
          ,          p \        V,          pV^8H  p	V\        8  dÇ   W ,          V,	          ;r«Wª,          V,	          p\
        ;rÞ^pV'       d^   W¿^,
          V,          ,          q½V,          qß^,          pW¿^,
          V,          ,          q¾V,          qï^,          pW¼,          V,	          pKe  W®,          V,	          pV	'       d   Wí,
          V,           pEM`Wí,           V,           pEMO\        RVR,          ,          4      pW ,          V,	          ;r«WŠ.p\        ^V4       F)  pVP                  VR,          V
,          V,	          4       K+  	  \
        .V,          p^pV'       d�   \        V4       Fd  pW¿^,
          V,          ,          pV	'       d&   V^,          '       d   VV;;,          V,          uu&   MVV;;,          V,          uu&   V^,          pKf  	  VVR,          ,          V,	          pK”  \        ^V4       F$  pVV,          VV,          ,          V,	          VV&   K&  	  \        V4      V,           pV^ 8X  df   \        VV,          W‡,          ,
          4      pV'       d   VV,
          pM	VV,           p\        V4       F  pVV,          V,	          pK  	  VV,	          # V^,
          p\        V4       F  pVV,          V,	          V,
          pK  	  \        \        W‡,          VV,          ,
          4      4      pV'       d   V) pVV,	          VV,	          3# )z³
Taylor series for cosh/sinh or cos/sin.

type = 0 -- returns exp(x)  (slightly faster than cosh+sinh)
type = 1 -- returns (cosh(x), sinh(x))
type = 2 -- returns (cos(x), sin(x))
ç      à?g333333Ó?re   rG   )r>   r   Úmaxr   ÚEXP_SERIES_U_CUTOFFr   r   ÚappendÚsumr6   rà   )rÝ   r?   ÚtyperÈ   rj   ÚxmagrÀ   rO   rè   Úaltrå   rY   Úx4rë   rì   rí   r¬   rÆ   Úxpowersrá   Úsumsro   rP   Úpshifts   &&&                     rC   Úexponential_seriesrH  ó  sË  € ð 	ˆ1„uØˆBˆØ‰àˆÜˆC��c•	�MÓ€AÜ�A‹;˜Õ€DÜˆAˆt�xÓ€AØ�”3�q˜“<•Õ€EØ	�€BØ�1�9Õ€AÜ
�R�-€CØ�1‰9€CØÔ!Ô!Ø•#˜"•ÐˆØ�e˜�]ˆÜÐˆØˆßØ�Q•3˜•'�MˆA �7˜2¨¥F AØ�Q•3˜•'�MˆA �7˜2¨¥F AØ•˜"•ŠAØ�e˜�]ˆßØ•˜#•ŠAà•˜#•ŠAä��D˜$•J•ÓˆØ•#˜"•ÐˆØ�)ˆÜ˜˜1–ˆAØ�N‰N˜G B�K¨�N¨RÕ/Ö0ñ äˆz˜A�~ˆØˆßÜ˜A–Y�Ø˜•s˜A•g•�ß˜1˜qŸ5œ5 $ q§'¨Q¥,¤'Ø"& q§'¨Q¥,£'Ø�Q•’ñ	 ð
 �7˜2•;• 2Õ%ŠAÜ˜˜1–ˆAØ˜A•w˜w q�zÕ)¨bÕ0ˆD�‹Gñ ä�‹I˜�OˆØˆq„yÜ�q˜•s˜c�g•Ó'ˆßØ�A•‰Aà�A•ˆAÜ˜–ˆAØ�1•˜•ŠAñ à�E�zÐð
 �A•ˆÜ˜–ˆAØ�A•#˜&• CÕ'ŠAñ ô ”s˜C�G q¨¥s�?Ó+Ó,ˆßØ�ˆAØ�5•˜A˜u�HÐ%Ð%rF   c                ó¼  € V\         8”  d   \        W^ 4      # \        VR,          4      pW,          p\        V,          ;r4^pW ,          V,	          ;rgV'       dB   We,          qcV,          q5^,          pWe,          qdV,          qE^,          pWg,          V,	          pKI  W@,          V,	          pW4,           pTp	V'       d   Wˆ,          V,	          pV^,          pK"  W‰,	          # )z´
Compute exp(x) as a fixed-point number. Works for any x,
but for speed should have |x| < 1. For an arbitrary number,
use exp(x) = exp(x-m*log(2)) * 2^m where m = floor(x/log(2)).
r<  )ÚEXP_COSH_CUTOFFrH  r>   r   )
rÝ   r?   rj   rë   rì   rí   rY   rå   ro   rÆ   s
   &&        rC   Úexp_basecaserK  >  sµ   € ð ŒoÔÜ! !¨1Ó-Ð-ÜˆD�#�I‹€AØ…I€DÜ˜$�Ð€BØ	€AØ�c�d�]Ð€Aß
Ø	�ˆ�q•�˜q�&˜!Ø	�ˆ�q•�˜q�&˜!Ø�T�d�NŠØ
�$�4�€BØ
�€AØ	€Aß
Ø�S�T�MˆØ	ˆQ�ŠØ�6€MrF   c                ó¤   € V\         8”  d   \        W^4      w  r#W#,           W#,
          3# \        W4      p\        W,           ,          V,          pWE3# )z 
Computation of exp(x), exp(-x)
)rJ  rH  rK  r   )rÝ   r?   ÚcoshÚsinhrY   rZ   s   &&    rC   Úexp_expneg_basecaserO  W  sK   € ð ŒoÔÜ'¨°Ó3‰
ˆØ�y˜$�)Ð#Ð#Ü�QÓ€AÜ	�T•YÕ	 AÕ%€AØˆ4€KrF   c                ó  € V\         8”  d   \        W^4      # V\        ,
          pW,	          p\        V4      pV\        9  dS   V^
\         ,           \        ,
          ,          p\        V^
\         ,           ^4      w  rgV^
,	          V^
,	          3\        V&   \        V,          w  rg\         V,
          pWh,          pWx,          pWV,          ,          p \
        V,          p	T p
^pW ,          V,	          ) pV'       dR   WË,          qÉV,          q›^,          q¼V ,          V,	          pWË,          qÊV,          q«^,          q¼V ,          V,	          ) pKY  W–,          W§,          ,
          V,	          W¦,          W—,          ,           V,	          3# )z¸
Compute cos(x), sin(x) as fixed-point numbers, assuming x
in [0, pi/2). For an arbitrary number, use x' = x - m*(pi/2)
where m = floor(x/(pi/2)) along with quarter-period symmetries.
)ÚCOS_SIN_CACHE_PRECrH  ÚCOS_SIN_CACHE_STEPr>   Úcos_sin_cacher   )rÝ   r?   Úprecsr£   r°   ÚwÚcos_tÚsin_tÚoffsetr	  r
  rí   rY   s   &&           rC   Úcos_sin_basecaserY  b  s9  € ð Ô Ô Ü! !¨1Ó-Ð-ØÔ%Õ%€EØ	�
€AÜˆA‹€AØ”ÔØ�Ô%Õ%Ô&8Õ8Õ9ˆÜ)¨!¨RÔ0BÕ-BÀAÓF‰ˆØ! 2�I¨°­Ð3Œ�aÑÜ  Õ#�L€EÜ $Õ&€FØ	Õ€EØ	Õ€EØˆe�…O€AÜ
�T�/€CØ
€CØ	€AØ�3�4�-Ð€Aß
Ø	�ˆ˜•� �6˜1¨!­°¥} 1Ø	�ˆ˜•� �6˜1¨A­#°$­Ð'7¢1Ø�Y�s•yÕ  TÕ)¨c­i¸½	Õ.AÀdÕ-JÐKÐKrF   c                 óˆ  € V w  r4rVV'       Ed   We,           pV^,           pV'       d   V) pVR8”  d=   V^ 8¼  d6   \        V\        RV,          4      ,           4      p	\        W”V,          W4      # Wx) 8  d   \        \        W1V4      # V^8”  dV   W‡,           p
WZ,           pV^ 8¼  d
   WK,          pM	WK) ,	          p\        V
4      p\        WÍ4      w  rì\        V4      pWÇ,          pM#WX,           pV^ 8¼  d
   WK,          pM	WK) ,	          p^ p\        WÈ4      p\        WNV,
          W4      # V'       g   \        # V \        8X  d   \        # V # )é   r9   g333333÷?)Úmpf_er>   r1   r5   r    rx   ÚdivmodrK  r   r$   r   )rÝ   r?   rN   rÈ   rÉ   r²   r±   rø   rO   ÚeÚwpmodrX  r£   Úlg2r°   s   &&&            rC   r¢   r¢     s"  € ØÑ€Dˆsß
€sØ�hˆØ�B�YˆßØ�$ˆCà�#Œ:˜# œ(ä�bœ˜T #�X›Õ&Ó'ˆAÜ˜q s¥(¨DÓ6Ð6Ø�Œ9Üœt T°Ó5Ð5à�Œ7ð •HˆEØ•[ˆFØ˜Œ{Ø•M‘à˜GÕ$�Ü˜EÓ"ˆCÜ˜!“>‰DˆAÜ�A“ˆAØ�I‰Aà•XˆFØ˜Œ{Ø•M‘à˜GÕ$�ØˆAÜ˜1Ó!ˆÜ˜C 2¥ tÓ1Ð1ßÜˆØŒE„zÜˆØ€HrF   c                ó"  € V w  rErgV'       gs   V'       dk   V'       d)   V \         8X  d   \        # V \        8X  d   \        # \        # V \         8X  d   \         \         3# V \        8X  d   \         \        3# \        \        3# Wg,           pV^,           p	VR8  dM   W‰) 8  d=   V'       d   \        V ^V,
          W4      # \        \        ^ W4      p
\        WW4      pW«3# W˜) ,          p	V^
8”  d€   ^^V^,
          ,          ,          V	8”  dd   V'       d&   \        \        \        .V,          ^V,
          W4      # \        \        \        V 4      W4      R4      ;rÍV'       d   \        V4      pWÍ3# V^8”  dY   W˜,           pWn,           pV^ 8¼  d
   W_,          pM	W_) ,	          p\        V4      p\        VV4      w  pp\        V4      pVV,          pM#Wi,           pV^ 8¼  d
   W_,          pM	W_) ,	          p^ p\        VV	4      w  ppVV^V,          ,	          ,           p
VV^V,          ,	          ,
          pV'       d   V) pV'       d   W¹,          V
,          p\        WY) W4      # \        V
VV	,
          ^,
          W4      p
\        VVV	,
          ^,
          W4      pW«3# )z4Simultaneously compute (cosh(x), sinh(x)) for real xéüÿÿÿrG   )r#   r    r$   r!   r%   r5   r/   r¢   r(   r*   rx   r]  r>   rO  r   )rÝ   r?   rN   ÚtanhrÈ   rÉ   r²   r±   rø   rO   rM  rN  r¬   ro   r_  rX  r£   r`  r°   rY   rZ   s   &&&&                 rC   Úmpf_cosh_sinhrd  ¬  s)  € àÑ€Dˆsß—SßØ”DŒy¤˜+Ø”EŒz¤%˜<ÜˆKØ”Œ9œd¤D˜\Ð)Ø”Œ:œt¤U˜mÐ+Ü”TˆzÐØ
�&€CØ	ˆb�€BØ
ˆR„xà�Œ9ßÜ" 1 a¨¥f¨dÓ8Ð8Üœt Q¨Ó2ˆDÜ˜q¨Ó2ˆDØ�:Ðà
ˆt�ˆà
ˆR„xØˆa�#�a•%�j�>˜BÔçÜ"¤D¬ <°Õ#5°q¸µv¸tÓIÐIÜœg¤g¨a£j°$Ó<¸bÓAÐAˆAßÜ˜A“J�Ø�4ˆKà
ˆQ„wØ•ˆØ•ˆØ�QŒ;Ø•‰Aà˜Õ ˆAÜ˜ÓˆÜ�a˜‹~‰ˆˆ1Ü�‹FˆØ	ˆc�	‰à•ˆØ�QŒ;Ø•‰Aà˜Õ ˆAØˆÜ˜q "Ó%�D€A€qà��A�a•C•�>€DØ��A�a•C•�>€DßØˆuˆßØ�z˜dÕ"ˆÜ˜C  dÓ0Ð0ä˜D ! B¥$ q¥&¨$Ó4ˆÜ˜D ! B¥$ q¥&¨$Ó4ˆØˆzÐrF   c                 óà  € V^ 8”  d¹   ^ p ^V,          pW2,           V,           p\        V^,
          4      pV^,	          pWa,           p	V	^ 8¼  d
   W	,          p
M	W	) ,	          p
\        W§4      w  r¼WÈ8”  d
   W|,
          pMTpWÓV,           ^
,
          ,	          '       d   \        V4      pWÂ,	          p
Wb,
          pM7V^,          pK¶  W2) ,          pW,           p	V	^ 8¼  d
   W	,          p
M	W	) ,	          p
^ pW«V3# r6  )r�   r]  r>   )rÉ   r²   rø   rO   rá   Úcancellation_precr_  Úpi2Úpi4rX  r£   r°   r¯   Úsmalls   &&&&          rC   Úmod_pi2rj  ï  sä   € à
ˆQ„wØˆØØ " a¥ÐØ•HÐ0Õ0ˆEÜ˜5 �7Ó#ˆCØ˜•(ˆCØ•[ˆFØ˜Œ{Ø•M‘à˜GÕ$�Ü˜!“>‰DˆAØŒwØ�‘à�Ø˜C� �×#Ô#Ü˜“F�Ø•H�Ø•[�ØØ��FŠAà
ˆt�ˆØ•ˆØ�QŒ;Ø•‰Aà˜Õ ˆAØˆØ�ˆ8€OrF   c                ó|  € V w  rVrxV'       gE   V'       d   \         \         r©M\        \        r©V^ 8X  d   Wš3# V^8X  d   V	# V^8X  d   V
# V^8X  d   V
# W‡,           pV^
,           pV^ 8  dy   W¼) 8  dr   V'       d   \        V \	        V4      4      p \        \        ^W4      p	\        V ^V,
          W4      p
V^ 8X  d   Wš3# V^8X  d   V	# V^8X  d   V
# V^8X  d   \        WW4      # V'       Ed   VR8¼  d†   VR8X  d2   \        p	\        \        3\        V^,          4      V,          ,          p
MV^ 8X  d   \        \        r©M\        \        r©V^ 8X  d   Wš3# V^8X  d   V	# V^8X  d   V
# V^8X  d   \        W©W4      # Wg) ^,
          ,	          ^,           ^,	          pWmV) ^,
          ,          ,
          p\        V4      V,           pV^
,           V,
          pW|,           pV^ 8¼  d
   Wo,          pM	Wo) ,	          pV\        V4      ,          V,	          pM\        WgW¼4      w  prÜ\        VV4      w  ršV^,          pV^8X  d   V
) T	r©MV^8X  d   V	) V
) r©M
V^8X  d   Y©) r©V'       d   V
) p
V^ 8X  d   \        Wœ) W4      p	\        W¬) W4      p
Wš3# V^8X  d   \        Wœ) W4      # V^8X  d   \        W¬) W4      # V^8X  d   \        W©W4      # R# )zz
which:
0 -- return cos(x), sin(x)
1 -- return cos(x)
2 -- return sin(x)
3 -- return tan(x)

if pi=True, compute for pi*x
NrG   )r%   r    r   r-   rœ   r5   r!   Úboolr.   r   r�   rj  rY  r   r   )rÝ   r?   rN   ÚwhichÚpirÈ   rÉ   r²   r±   r¬   ro   rø   rO   r°   Úmag2rX  r£   r]   s   &&&&&             rC   Úmpf_cos_sinrp    sš  € ð Ñ€DˆsßßÜœ‰qäœˆqØ�AŒ:˜a˜d�{Ø�AŒ:˜a�xØ�AŒ:˜a�xØ�AŒ:˜a�xà
�(€CØ	��€Bð ˆQ„wØ�Œ9ßÜ˜Aœv b›zÓ*�ÜœD ! TÓ/ˆAÜ˜A˜q �v tÓ1ˆAØ˜Œz ! $˜;Ø˜Œz !˜8Ø˜Œz !˜8Ø˜Œz¤+¨a°tÓ"AÐAß	€rØ�"Œ9Ø�bŒyÜ�Üœ5�M¤$ s¨Q¥w£-°$Õ"6Õ7‘Ø˜”Üœu‘1äœe�1Ø˜Œz ! $˜;Ø˜Œz !˜8Ø˜Œz !˜8Ø˜Œz¤'¨!°Ó":Ð:à�d˜1•f�o Õ" qÕ(ˆØ˜C˜4 �6•]Õ#ˆÜ˜‹}˜sÕ"ˆØ�B�Y˜ÕˆØ•ˆØ�QŒ;Ø•‰Aà˜Õ ˆAØŒx˜‹|�^ Õ"‰ä˜3 SÓ-‰ˆˆ1Ü˜A˜rÓ"�D€AØ	ˆA�€AØ	
ˆaŒ˜˜˜A‘AØ	
ˆaŒ˜˜˜Q˜B‘AØ	
ˆaŒ˜˜2�AßØˆBˆØ�„zÜ˜˜C Ó+ˆÜ˜˜C Ó+ˆØˆtˆØ�„zÜ˜A˜s DÓ.Ð.Ø�„zÜ˜A˜s DÓ.Ð.Ø�„zÜ˜Q 4Ó-Ð-ñ rF   c                 ó   € \        WV^4      # rU   ©rp  ©rÝ   r?   rN   s   &&&rC   Úmpf_cosrt  b  ó   € ¬[¸À#ÀqÓ-IÐ&IrF   c                 ó   € \        WV^4      # r  rr  rs  s   &&&rC   Úmpf_sinrw  c  ru  rF   c                 ó   € \        WV^4      # )é   rr  rs  s   &&&rC   Úmpf_tanrz  d  ru  rF   c                 ó   € \        WV^ ^4      # r6  rr  rs  s   &&&rC   Úmpf_cos_sin_pir|  e  s   € ´KÀÈÈaÐQRÓ4SÐ-SrF   c                 ó   € \        WV^^4      # rU   rr  rs  s   &&&rC   r8  r8  f  ó   € ´¸AÀSÈ!ÈQÓ0OÐ)OrF   c                 ó   € \        WV^^4      # r  rr  rs  s   &&&rC   Ú
mpf_sin_pir€  g  r~  rF   c                 ó(   € \        WV4      ^ ,          # r6  ©rd  rs  s   &&&rC   Úmpf_coshrƒ  h  ó   € ¬m¸AÀSÓ.IÈ!Õ.LÐ'LrF   c                 ó(   € \        WV4      ^,          # rU   r‚  rs  s   &&&rC   Úmpf_sinhr†  i  r„  rF   c                 ó   € \        WV^R7      # )rV   )rc  r‚  rs  s   &&&rC   Úmpf_tanhrˆ  j  s   € ¬m¸AÀSÈqÔ.QÐ'QrF   c                 óê   € Vf   \        V^,
          4      p\        W4      w  r4\        V4      p\        WA4      w  rVV^,          pV^ 8X  d   WV3# V^8X  d   V) V3# V^8X  d   V) V) 3# V^8X  d   We) 3# R # rŸ   )r�   r]  r>   rY  )rÝ   r?   rg  r°   r£   r¬   ro   r]   s   &&&     rC   r  r  o  s€   € Ø
‚{Ü�t˜A•vÓˆÜ�!‹>�D€AÜˆA‹€AÜ˜AÓ$�D€AØ	ˆA�€AØˆA„v�a�dˆ{ØˆA„v�q�b˜!�eˆ|ØˆA„v�q�b˜1˜"�fˆ}ØˆA„v�a˜�eˆ|�vrF   c                 ó–   € Vf   \        V4      p\        W4      w  r4\        V4      p\        WA4      pV^ 8¼  d	   WS,          # WS) ,	          # rŸ   )rx   r]  r>   rK  )rÝ   r?   rÚ   r°   r£   rP   s   &&&   rC   Ú	exp_fixedr‹  {  sF   € Ø
‚{Ü˜‹oˆÜ�!‹>�D€AÜˆA‹€AÜ�QÓ€AØˆA„vØ�vˆà�R�yÐrF   Úsagez)Warning: Sage imports in libelefun failed)F)FNrŸ   r6  )šrI   rf   r   Úbackendr   r   r   r   r   r   r	   Úlibmpfr
   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   Ú
libintmathr7   rJ  r>  rQ  rR  rS  rÙ   rÖ   rö   r×   rñ   r÷   r  r  r  rð   rí   rý   rJ   rS   rW   rk   rp   rx   r   r‚   rƒ   r�   rŒ   r…   r�   r’   r”   r–   r˜   r7  rœ   r\  Ú
mpf_degreeÚmpf_ln2Úmpf_ln10r�   r    Ú
mpf_sqrtpiÚmpf_ln_sqrt2pir­   r¸   rÄ   rÒ   rÔ   rÞ   rã   ræ   rî   rØ   r›   r  r  r  r  r  r  r  r*  r,  r/  r2  r4  r:  rH  rK  rO  rY  r¢   rd  rj  rp  rt  rw  rz  r|  r8  r€  rƒ  r†  rˆ  r  r‹  Úsage.libs.mpmath.ext_libmpÚlibsÚmpmathÚ	ext_libmpÚ_lbmpÚImportErrorÚAttributeErrorr„   © rF   rC   Ú<module>r�     s.  ðñ	ó Ý å ß G× G÷÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ õ õ ð ˆhÔØ�Oà€OàÐ ð ˆhÔØÑàÐØÐ Ø€ð Ð Ø€à€ØÐ ØÐ àÐ àÐ ØÐ ØÐ ð �r�7Ð Ù	�‘8˜OÓ,¨QÕ.Ö	/€AØ™˜Q �T /Ó2°2Õ5Ð6¸¸Q¸q½S½ÕAÕAÒñ 
0òò*ò"
'ò ôð  ñAó ðAð ñ?ó ð?ðñ8 
ˆX‹€Ù	ˆY‹€Ù	ˆV‹€Ù	ˆR‹€òð, óó ðò ò
ð ñó ðð ñó ðñ ˜iÓ(€Ù˜hÓ'€Ù˜gÓ&€Ù˜lÓ+€
Ù˜iÓ(€Ù˜jÓ)€ð ñCó ðCð
 ñ,ó ð,ñ   Ó-€
Ù#Ð$4Ó5€ð 'ô -ò8"òlð, !+ô Qðf %ô (ôò,ò-)ô^ òD ðD $ô F+òP%1òX!ò$+òò(Cð
 %ô  +ðF )ô !(ðF %ô 	0ð %ô 0ð &ô %ð" &ô 1ð &ô @ð*  *ô ô8I&òVò2	òLð: $ô *ðZ  *°ô @òF!ðH (¨q°Uô M.ð^ $Ô IØ#Ô IØ#Ô IØ *Ô SØ&Ô OØ&Ô OØ$Ô LØ$Ô LØ$Ô Qô

ô	ð ˆfÔð;ß2Ó2Ø—>‘>ˆØ—-’-ˆØ—-‘-ˆØ—-’-ˆØ—-’-ˆØ—-‘-ˆØ—O’Oˆ	Ø×+Ò+ˆØ×+Ñ+Šñ øð ˜Ð(ô ;ÙÐ9×:ð;ús   ÊA=L  Ì L5Ì4L5