ó
    ‰*£hÝ¯  ã            
       ó  • S r SrSSKrSSKJr  SSKrSqSSKJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJ r J!r!  \S:X  a  S	 r"OS
 r"S r# " S S\$5      r% \&  \&" S5      r(\&" S5      r)\&" S5      r*\&" S5      r+\&" S5      r,\,r-S r.S r/S r0S\	SS4r1S\	SS4r2S\
SS4r3S\
SS4r4S\
SS4r5S\SS4r6S\
SS4r7S\	SS4r8S\	SS4r9S\	SS4r:Sr;S r< " S  S!5      r=S/\>" SS"5       V s/ s H  n \
U S-
  -  S-
  PM     sn -   r?\=" 5       \?/r@\)S#\*S$\,S%\+S&0rAS' rBS( rC \D\E4rFS) rGS* rH\S+:X  a$  S,\I" \5      ;   a  \R”                  rB\R”                  rC\S:X  a  \R–                  =rBrC\(       a  \GrK\HrLO\BrK\CrLS\-4S- jrM\N" S. \>" S/S05       5       5      rO\S+:X  a  S1\I" \5      ;   a  \R                   rM\S:X  a  \Rš                  rMS\-4S2 jrQS3 rRShS4 jrSS5 rTS\-4S6 jrUS\-4S7 jrVS\-4S8 jrWS\-4S9 jrXS:\-4S; jrYS<\-4S= jrZS\-4S> jr[S?\-4S@ jr\\-4SA jr]SB r^SC r_SD r`SE raSF rbSG rcSH rdSI reSJ rfSK rgSL rhS\-4SM jriS\-4SN jrjS\-4SO jrkSP rlS\-S4SQ jrmS\-4SR jrnS\-S?4SS jroS\-4ST jrp\-4SU jrqS\-4SV jrr\-4SW jrs\S+:X  a  \prt\qruO\rrt\sruSX rvSY rw\-4SZ jrx\-4S[ jry\-4S\ jrz\,\+\+\,\)\*\*\)\(\(0r{\,\,\+\+\)\*\*\)\(\(0r|\-4S] jr}S^ r~S_ r  SiS` jr€SjSa jr�\9\9\:\8Sb.r‚\-4Sc jrƒSd r„Se r…\-4Sf jr†\-4Sg jr‡\S:X  aK   SSKˆJ‰s  JŠs  J‹rŒ  \ŒRÚ                  rm\ŒRÜ                  rn\ŒRè                  rt\ŒRð                  rx\ŒGR                  r†gg! \' a    S r& GNòf = fs  sn f ! \' a    \D4rF GNDf = f! \� a     gf = f)kzH
Low-level functions for arbitrary-precision floating-point arithmetic.
Ú	plaintexté    N)Úbisecté   )ÚMPZÚMPZ_TYPEÚMPZ_ZEROÚMPZ_ONEÚMPZ_TWOÚMPZ_FIVEÚBACKENDÚSTRICTÚHASH_MODULUSÚ	HASH_BITSÚgmpyÚsageÚ
sage_utils)Úgiant_stepsÚ
trailtableÚbctableÚlshiftÚrshiftÚbitcountÚtrailingÚ
sqrt_fixedÚnumeralÚisqrtÚ
isqrt_fastÚsqrtremÚbin_to_radixr   c                 ó(   • U u  pp4U[        U5      X44$ ©N©Úhex©ÚxÚsignÚmanÚexpÚbcs        ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/mpmath/libmp/libmpf.pyÚto_pickabler+      s   € ØÑˆ�3Ø”S˜“X˜sÐ&Ð&ó    c                 ó.   • U u  pp4U[        U5      SS  X44$ )Né   r"   r$   s        r*   r+   r+   #   s#   € ØÑˆ�3Ø”S˜“X˜a˜b�\ 3Ð*Ð*r,   c                 ó*   • U u  pp4U[        US5      X44$ )Né   )r   r$   s        r*   Úfrom_pickabler1   '   s   € ØÑ€DˆsØ”#�c˜2“, Ð(Ð(r,   c                   ó   • \ rS rSrSrg)ÚComplexResulté+   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r5   r,   r*   r3   r3   +   s   † Úr,   r3   c                 ó   • U $ r!   r5   )r%   s    r*   Ú<lambda>r<   1   s   € ‘qr,   ÚnÚfÚcÚuÚdc           
      ó\   • [        S[        [        [        U 5      S-  5      S-
  5      5      $ )zVReturn number of accurate decimals that can be represented
with a precision of n bits.r   çr£y	O“
@©ÚmaxÚintÚround©r=   s    r*   Úprec_to_dpsrI   ;   s*   € ô ˆq”#”eœC ›FÐ#5Ñ5Ó6°qÑ8Ó9Ó:Ð:r,   c           
      ó\   • [        S[        [        [        U 5      S-   S-  5      5      5      $ )zFReturn the number of bits required to represent n decimals
accurately.r   rC   rD   rH   s    r*   Údps_to_precrK   @   s)   € ô ˆq”#”eœS ›V A™XÐ'9Ñ9Ó:Ó;Ó<Ð<r,   c                 ó0   • [        U 5      nUS:X  a  gUS-   $ )z™Return the number of decimal digits required to represent
a number with n-bit precision so that it can be uniquely
reconstructed from the representation.é   é   é   )rI   )r=   Údpss     r*   Úrepr_dpsrQ   E   s    € ô �a‹.€CØ
ˆbƒyØØ�‰7€Nr,   rO   éÿÿÿÿi…ÿÿÿi8þÿÿéþÿÿÿiëüÿÿéýÿÿÿg      ðc                 óh  • U[         :X  aS  U S:¼  a?  XS-
  -	  nUS-  (       a)  US-  (       d  U [        US:     U   -  (       a  US-	  S-   $ US-	  $ [        U * X5      * $ U[        :X  a  X-	  $ U[        :X  a  U * U-	  * $ U[
        :X  a  U S:¼  a  X-	  $ U * U-	  * $ U[        :X  a  U S:¼  a  U * U-	  * $ X-	  $ g )Nr   r   r.   é,  )Úround_nearestÚh_maskÚ	round_intÚround_floorÚround_ceilingÚ
round_downÚround_up)r%   r=   ÚrndÚts       r*   rY   rY   k   sÖ   € Ø
ŒmÓØ�‹6Ø˜‘c‘
ˆAØ�1�u˜1˜qŸ5 a¬&°°3±©-¸Ñ*:×&:Ø˜1™˜a‘x�à˜!‘t�ä˜q˜b !Ó)Ð)Ð)Ø
ŒkÓØ‰vˆØ
ŒmÓØ�"˜‘ˆ|ÐØ
ŒjÓØ�‹6Ø‘6ˆMØ�"˜‘ˆ|ÐØ
ŒhƒØ�‹6Ø�b˜Q‘Y�<ÐØ‰vˆð r,   c                   ó   • \ rS rSrS rSrg)Ú
h_mask_bigé„   c                 ó    • [         US-
  -  S-
  $ )Nr   )r	   )Úselfr=   s     r*   Ú__getitem__Úh_mask_big.__getitem__…   s   € Ü˜!˜A™#‘ Ñ!Ð!r,   r5   N)r6   r7   r8   r9   re   r:   r5   r,   r*   ra   ra   „   s   † õ"r,   ra   rV   )r   r   )r   r   )r   r   )r   r   c                 óü  • U(       d  [         $ X4-
  nUS:”  an  U[        :X  aA  XS-
  -	  nUS-  (       a*  US-  (       d  U[        US:     U   -  (       a	  US-	  S-   nO#US-	  nO[        U   U    (       a  X-  nOU* U-	  * nX&-  nUnUS-  (       db  [        [        US-  5         nU(       d:  US-  (       d  US-  nUS-  nUS-  nUS-  (       d  M  [        [        US-  5         nX-  nX'-  nX7-  nUS:X  a  SnXX#4$ )ad  
Create a raw mpf tuple with value (-1)**sign * man * 2**exp and
normalized mantissa. The mantissa is rounded in the specified
direction if its size exceeds the precision. Trailing zero bits
are also stripped from the mantissa to ensure that the
representation is canonical.

Conditions on the input:
* The input must represent a regular (finite) number
* The sign bit must be 0 or 1
* The mantissa must be positive
* The exponent must be an integer
* The bitcount must be exact

If these conditions are not met, use from_man_exp, mpf_pos, or any
of the conversion functions to create normalized raw mpf tuples.
r   r   r.   rV   éÿ   é   ©ÚfzerorW   rX   Úshifts_downr   rF   ©r&   r'   r(   r)   Úprecr^   r=   r_   s           r*   Ú
_normalizero   ™   s  € ö$ Üˆà
‰	€AØˆ1ƒuØ”-ÓØ˜!™‘ˆAØ�1�u˜1˜qŸ5 c¬F°1°S±5©M¸!Ñ,<×&<Ø˜!‘t˜Q‘h‘à˜‘d‘Ü˜Ñ˜d×#Ø‰I‰Cà�T˜A‘I�,ˆCØ‰ˆØˆà��7Ü”s˜3 ™9“~Ñ&ˆÞØ˜C—iØ˜‘	�Ø�q‘�Ø�a‘�ð ˜C—i‘iô œ3˜s S™y›>Ñ*ˆAØ‰	ˆØ‰ˆØ
‰ˆð
 ˆaƒxØˆØ�cÐÐr,   c                 ó  • U(       d  [         $ X4::  a  XX#4$ X4-
  nU[        :X  aA  XS-
  -	  nUS-  (       a*  US-  (       d  U[        US:     U   -  (       a	  US-	  S-   nO#US-	  nO[        U   U    (       a  X-  nOU* U-	  * nX&-  nUnUS-  (       db  [        [        US-  5         nU(       d:  US-  (       d  US-  nUS-  nUS-  nUS-  (       d  M  [        [        US-  5         nX-  nX'-  nX7-  nUS:X  a  SnXX#4$ )zHsame as normalize, but with the added condition that
man is odd or zero
r   r.   rV   rh   ri   rj   rm   s           r*   Ú_normalize1rq   Ð   s%  € ö ÜˆØ	ƒzØ˜#Ð!Ð!Ø
‰	€AØ
ŒmÓØ�a‘C‰LˆØˆq�5�q˜1—u #¬¨q°©u©°aÑ(8×"8Ø�a‘4˜‘(‰Cà�Q‘$‰CÜ	�SÑ	˜$×	Ø‰	‰à�˜‘	ˆlˆØ�H€CØ	€Bà��7Ü”s˜3 ™9“~Ñ&ˆÞØ˜C—iØ˜‘	�Ø�q‘�Ø�a‘�ð ˜C—i‘iô œ3˜s S™y›>Ñ*ˆAØ‰	ˆØ‰ˆØ
‰ˆð
 ˆaƒxØˆØ�cÐÐr,   c                 ó¼   • [        U5      [        :X  d   e[        U5      [        ;   d   e[        U5      [        ;   d   eU[        U5      :X  d   e[	        XX#XE5      $ )úsAdditional checks on the components of an mpf. Enable tests by setting
the environment variable MPMATH_STRICT to Y.)Útyper   Ú
_exp_typesr   ro   ©r&   r'   r(   r)   rn   r^   s         r*   Ústrict_normalizerw   þ   s[   € ô �‹9œÓ Ð Ð Ü�‹8”zÓ!Ð!Ð!Ü�‹9œ
Ó"Ð"Ð"Ø”˜#“ÓÐÐÜ�d ¨$Ó4Ð4r,   c                 óâ   • [        U5      [        :X  d   e[        U5      [        ;   d   e[        U5      [        ;   d   eU[        U5      :X  d   eU(       a  US-  (       d   e[	        XX#XE5      $ )rs   r   )rt   r   ru   r   rq   rv   s         r*   Ústrict_normalize1ry     sj   € ô �‹9œÓ Ð Ð Ü�‹8”zÓ!Ð!Ð!Ü�‹9œ
Ó"Ð"Ð"Ø”˜#“ÓÐÐÞ˜˜qŸÐ!Ð!Ü�t #¨4Ó5Ð5r,   r   Ú_mpmath_normalizec                 óÌ  • [        U 5      n SnU S:  a  SnU * n U S:  a  [        [        U 5         nO[        U 5      nU(       d•  U (       d  [        $ U S-  (       dz  U S-  (       a  X@S-	  US-   US-
  4$ [
        [        U S-  5         nU(       d:  U S-  (       d  U S-  n US-  nUS-  nU S-  (       d  M  [
        [        U S-  5         nX-  n X-  nXV-  nX@X4$ [        X@XX#5      $ )z~Create raw mpf from (man, exp) pair. The mantissa may be signed.
If no precision is specified, the mantissa is stored exactly.r   r   é   r.   rh   ri   )r   r   rF   r   rk   r   Ú	normalize)r'   r(   rn   r^   r&   r)   r_   s          r*   Úfrom_man_expr~   #  sú   € ô ˆc‹(€CØ€DØ
ˆQƒwØˆØˆdˆØ
ˆTƒzÜ”S˜“XÑ‰ä�c‹]ˆÞÞÜˆLØ�Q�wØ�Q�wØ Q™h¨¨a©°°a±Ð8Ð8Üœ3˜s S™y›>Ñ*ˆAÞØ Ÿ)Ø˜A‘I�CØ˜1‘H�CØ˜!‘G�Bð  Ÿ)™)ô œs 3¨¡9›~Ñ.�Ø‰IˆCØ‰HˆCØ‰GˆBØ˜3Ð#Ð#Ü�T ¨Ó3Ð3r,   c              #   ó<   #   • U  H  o[        US 5      4v •  M     g7f)r   N)r~   )Ú.0r=   s     r*   Ú	<genexpr>r�   B  s   é € ÐB²/¨Q”\ ! QÓ'Õ(²/ùs   ‚iöÿÿÿi  Ú_mpmath_createc                 óP   • U(       d  U [         ;   a	  [         U    $ [        U SX5      $ )z_Create a raw mpf from an integer. If no precision is specified,
the mantissa is stored exactly.r   )Ú	int_cacher~   )r=   rn   r^   s      r*   Úfrom_intr…   J  s'   € ö Ø”	‹>Ü˜Q‘<ÐÜ˜˜1˜dÓ(Ð(r,   c                 óJ   • U u  pp4U(       d  U(       a  [        SU-  5      eX#4$ )z:Return (man, exp) of a raw mpf. Raise an error if inf/nan.z*mantissa and exponent are undefined for %s©Ú
ValueError©Úsr&   r'   r(   r)   s        r*   Ú
to_man_expr‹   R  s)   € àÑ€DˆsÞ–SÜÐEÈÑKÓLÐLØˆ8€Or,   c                 óä   • U u  p#pEU(       d  U(       a  [        S5      eUS:¼  a  U(       a  U* U-  $ X4-  $ U(       d  U(       a  X4* -	  * $ X4* -	  $ U(       a  [        U* U* U5      $ [        X4* U5      $ )z«Convert a raw mpf to the nearest int. Rounding is done down by
default (same as int(float) in Python), but can be changed. If the
input is inf/nan, an exception is raised.z cannot convert inf or nan to intr   )rˆ   rY   )rŠ   r^   r&   r'   r(   r)   s         r*   Úto_intr�   Y  s   € ð Ñ€DˆsÞ–SÜÐ;Ó<Ð<Ø
ˆaƒxÞØ�D˜S‘=Ð Ø‰zÐæÞØ˜T‘]Ð#Ð#à˜4‘=Ð ÞÜ˜#˜ ˜t SÓ)Ð)ä˜˜d CÓ(Ð(r,   c                 ób  • U u  p#pEU(       d	  U(       a  U $ US:¼  a  U $ XE-   nUS:  as  U[         :X  a  U(       a  [        $ [        $ U[        :X  a  U(       a  [        $ [        $ U[
        :X  a)  US:  d
  U[        :X  a  [        $ U(       a  [        $ [        $ [        e[        U [        XV5      U5      $ ©Nr   r   )
r[   rk   ÚfonerZ   ÚfnonerW   r	   ÚNotImplementedErrorÚmpf_posÚmin)rŠ   r^   r&   r'   r(   r)   Úmags          r*   Úmpf_round_intr–   o  s–   € ØÑ€DˆsÞ–SØˆØ
ˆaƒxØˆØ
‰&€CØ
ˆQƒwØ”-ÓÞœE�\Ü �[Ø”KÓÞœE�\Ü!�\Ø”MÓ!Ø�Q‹w˜#¤›.´¨,Þœe�|Ü"�{ä%Ð%Ü�1”c˜"“l CÓ(Ð(r,   c                 óL   • [        U [        5      nU(       a  [        X1U5      nU$ r!   )r–   rZ   r“   ©rŠ   rn   r^   Úvs       r*   Ú	mpf_floorrš   …  s"   € Ü�aœÓ%€AÞÜ�A˜SÓ!ˆØ€Hr,   c                 óL   • [        U [        5      nU(       a  [        X1U5      nU$ r!   )r–   r[   r“   r˜   s       r*   Úmpf_ceilrœ   ‹  ó"   € Ü�aœÓ'€AÞÜ�A˜SÓ!ˆØ€Hr,   c                 óL   • [        U [        5      nU(       a  [        X1U5      nU$ r!   )r–   rW   r“   r˜   s       r*   Úmpf_nintrŸ   ‘  r�   r,   c                 ó.   • [        U [        U 5      X5      $ r!   )Úmpf_subrš   )rŠ   rn   r^   s      r*   Úmpf_fracr¢   —  s   € Ü�1”i “l DÓ.Ð.r,   é5   c                 ó(  • X :w  a  [         $  [        R                  " U 5      u  p4U [        :X  a  [        $ U [        * :X  a  [
        $ [        [        US-  5      US-
  X5      $ !   U [        :X  a  [        s $ U [        * :X  a  [
        s $ [         s $ = f)z¾Create a raw mpf from a Python float, rounding if necessary.
If prec >= 53, the result is guaranteed to represent exactly the
same number as the input. If prec is not specified, use prec=53.l          r£   )ÚfnanÚmathÚfrexpÚmath_float_infÚfinfÚfninfr~   rF   )r%   rn   r^   ÚmÚes        r*   Ú
from_floatr­   š  s   € ð
 	ƒvÜˆðÜ�zŠz˜!‹}‰ˆð
 	ŒNÓ¤4˜KØŒ^ˆOÓ¤E˜\Üœ˜A˜u™I›¨¨"©¨dÓ8Ð8øðØ”Ó¤t¢Ø”�Ó¬¢ÜŠús   �A" Á"BÁ6BÂ	Béq   c                 ót  • [        U 5      nX:X  a  [        X1U5      $ SSKnUR                  U 5      (       aE  UR	                  U 5      u  pV[        [        UR                  US5      5      [        US-
  5      X5      $ UR                  U 5      (       a  [        $ UR                  U 5      (       a  [        $ [        $ )z¿Create a raw mpf from a numpy float, rounding if necessary.
If prec >= 113, the result is guaranteed to represent exactly the
same number as the input. If prec is not specified, use prec=113.r   Nr®   )Úfloatr­   ÚnumpyÚisfiniter§   r~   rF   ÚldexpÚisposinfr©   Úisneginfrª   r¥   )r%   rn   r^   ÚyÚnpr«   r¬   s          r*   Úfrom_npfloatr¸   ­  sŒ   € ô 	ˆa‹€AØƒvÜ˜! 3Ó'Ð'ÛØ	‡{�{�1‡~�~Ø�x‰x˜‹{‰ˆÜœC §¡¨¨CÓ 0Ó1´3°q¸±u³:¸tÓIÐIØ	‡{�{�1‡~�~œd�{Ø	‡{�{�1‡~�~œe�|Ü€Kr,   c                 ó$  • U R                  5       (       a  [        $ U R                  5       (       a!  U R                  5       (       a  [        $ [
        $ Uc(  [        [        U R                  5       S   5      S-  5      n[        [        U 5      X5      $ )zœCreate a raw mpf from a Decimal, rounding if necessary.
If prec is not specified, use the equivalent bit precision
of the number of significant digits in x.r   rC   )Úis_nanr¥   Úis_infiniteÚ	is_signedrª   r©   rF   ÚlenÚas_tupleÚfrom_strÚstr)r%   rn   r^   s      r*   Úfrom_DecimalrÁ   ¼  sg   € ð 	‡x�x‡z�zœ$�;Ø‡}�}‡�¨¯©¯©œuÐ?¼4Ð?Ø�|Ü”3�q—z‘z“| A‘Ó'Ð(:Ñ:Ó;ˆÜ”C˜“F˜DÓ&Ð&r,   Fc                 ól  • U u  p4pVU(       d9  U [         :X  a  gU [        :X  a  [        $ U [        :X  a  [        * $ [        [        -  $ US:”  a  [	        X4XVSU5      u  p4pVU(       a  U* n [
        R                  " XE5      $ ! [         a+    U(       a  e XV-   S:”  a  U(       a	  [        * s $ [        s $  gf = f)aè  
Convert a raw mpf to a Python float. The result is exact if the
bitcount of s is <= 53 and no underflow/overflow occurs.

If the number is too large or too small to represent as a regular
float, it will be converted to inf or 0.0. Setting strict=True
forces an OverflowError to be raised instead.

Warning: with a directed rounding mode, the correct nearest representable
floating-point number in the specified direction might not be computed
in case of overflow or (gradual) underflow.
g        r£   r   )rk   r©   r¨   rª   Ú
normalize1r¦   r³   ÚOverflowError)rŠ   Ústrictr^   r&   r'   r(   r)   s          r*   Úto_floatrÆ   Æ  s«   € ð Ñ€DˆsÞØ”‹:˜cØ”‹9œ^Ð+Ø”‹:œ~˜oÐ-ÜœnÑ,Ð,Ø	ˆBƒwÜ'¨°3¸BÀÓDÑˆ�3ÞØˆdˆðÜ�zŠz˜#Ó#Ð#øÜó 
ÞØà‰8�a‹<ÞÜ&�Ò&ä%Ò%áð
ús   Á(A> Á>(B3Â(B3Â2B3c                 ó@   • [        [        U 5      [        U5      X#5      $ )z@Create a raw mpf from a rational number p/q, round if
necessary.)Úmpf_divr…   )ÚpÚqrn   r^   s       r*   Úfrom_rationalrË   ë  s   € ô ”8˜A“;¤¨£¨TÓ7Ð7r,   c                 óx   • U u  pp4U(       a  U* nUS:X  a  [        SU-  5      eUS:¼  a
  USU-  -  S4$ USU* -  4$ )zYConvert a raw mpf to a rational number. Return integers (p, q)
such that s = p/q exactly.rR   z&cannot convert %s to a rational numberr   r   r‡   r‰   s        r*   Úto_rationalrÍ   ð  sZ   € ð Ñ€DˆsÞØˆdˆØ	ˆRƒxÜÐAÀCÑGÓHÐHØ
ˆaƒxØ�a˜‘f‰~˜qÐ Ð à�A˜˜‘Iˆ~Ðr,   c                 óf   • U u  p#pEXA-   nU(       a  US:¼  a  U* U-  $ U* U* -	  $ US:¼  a  X6-  $ X6* -	  $ )z.Convert a raw mpf to a fixed-point big integerr   r5   )rŠ   rn   r&   r'   r(   r)   Úoffsets          r*   Úto_fixedrÐ   ý  sQ   € àÑ€DˆsØ‰Z€FÞØ�Q‹;  ¨Ñ/Ð/Ø!$ ¨6¨'Ñ2Ð2à�Q‹;˜s™}Ð,Ø" wÑ/Ð/r,   c                 óp   • [         (       d  SSKnUR                   q [        [        U 5      U * U [        5      $ )zMReturn a raw mpf chosen randomly from [0, 1), with prec bits
in the mantissa.r   N)ÚgetrandbitsÚrandomr~   rZ   )rn   rÓ   s     r*   Úmpf_randrÔ     s/   € ÷ Š;ÛØ×(Ñ(ˆÜœ DÓ)¨D¨5°$¼ÓDÐDr,   c                 ó\   • U S   (       a
  US   (       d  U [         :X  d
  U[         :X  a  gX:H  $ )z~Test equality of two raw mpfs. This is simply tuple comparison
unless either number is nan, in which case the result is False.r   F)r¥   ©rŠ   r_   s     r*   Úmpf_eqr×     s(   € ð ˆQ�4�q˜—tØ”‹9˜œT›	ØØ‰6€Mr,   c                 ó(  • [         R                  S:¼  aÐ  U u  pp4U(       dm  U [        :X  a  [         R                  R                  $ U [
        :X  a  [         R                  R                  $ U [        :X  a  [         R                  R                  * $ U[        -  nUS:¼  a
  U[        -  nO[        S-
  SU-
  [        -  -
  nXS-  [        -  nU(       a  U* nUS:X  a  Sn[        U5      $  [        [        U SS95      $ ! [         a    [        U 5      s $ f = f)N)rO   r.   r   r   rR   rS   )rÅ   )ÚsysÚversion_infor¥   Ú	hash_infoÚnanr©   Úinfrª   r   r   rF   ÚhashrÆ   rÄ   )rŠ   ÚssignÚsmanÚsexpÚsbcÚhs         r*   Úmpf_hashrä   !  sð   € ä
×Ñ˜6Ó!Ø!"Ñˆ�Tö Ø”D‹y¤§¡×!2Ñ!2Ð2Ø”D‹y¤§¡×!2Ñ!2Ð2Ø”E‹z¤3§=¡=×#4Ñ#4Ð"4Ð4Ø”<ÑˆØ�1‹9Øœ)Ñ#‰Dä˜q‘= R¨$¡Y´)Ñ$;Ñ<ˆDØ‰Yœ,Ñ&ˆÞ�q�b�!Ø�‹7˜�AÜ�1‹vˆð	äœ ¨1Ñ-Ó.Ð.øÜó 	ô ˜“7ŠNð		ús   Ã&C9 Ã9DÄDc                 óÂ  • U u  p#pEUu  pgp‰U(       a  U(       dS  U [         :X  a  [        U5      * $ U[         :X  a  [        U 5      $ X:X  a  gU[        :X  a  gU [        :X  a  gU[        :X  a  ggX&:w  a	  U(       d  ggXH:X  a  X7:X  a  gX7:”  a	  U(       a  ggU(       a  ggXT-   n
X˜-   nU(       a  X«:  a  gX«:”  a  gOX«:  a  gX«:”  a  g[        XS[        5      nUS   (       a  gg)z|Compare the raw mpfs s and t. Return -1 if s < t, 0 if s == t,
and 1 if s > t. (Same convention as Python's cmp() function.)r   r   rR   é   )rk   Úmpf_signr¥   r©   rª   r¡   rZ   )rŠ   r_   rß   rà   rá   râ   ÚtsignÚtmanÚtexpÚtbcÚaÚbÚdeltas                r*   Úmpf_cmprï   >  sã   € ð Ñ€E�ØÑ€E�ö –tØ”‹:œx¨›{˜lÐ*Ø”‹:œh q›kÐ)Ø‹6˜!à”‹9˜QØ”‹9˜QØ”‹:˜aØàƒ~Þ˜QØàƒ|Ø‹<ØØ‹;Þ˜RØæ˜QØð 	‰
€AØ‰
€AÞØ‹5˜Ø‹5˜ˆ5à‹5˜Ø‹5˜ô �A˜!œ[Ó)€EØˆQ‡xØØr,   c                 óH   • U [         :X  d
  U[         :X  a  g[        X5      S:  $ ©NFr   ©r¥   rï   rÖ   s     r*   Úmpf_ltró   r  ó!   € ØŒDƒy�Aœ“IØÜ�1‹=˜1ÑÐr,   c                 óH   • U [         :X  d
  U[         :X  a  g[        X5      S:*  $ rñ   rò   rÖ   s     r*   Úmpf_lerö   w  ó!   € ØŒDƒy�Aœ“IØÜ�1‹=˜AÑÐr,   c                 óH   • U [         :X  d
  U[         :X  a  g[        X5      S:„  $ rñ   rò   rÖ   s     r*   Úmpf_gtrù   |  rô   r,   c                 óH   • U [         :X  d
  U[         :X  a  g[        X5      S:¬  $ rñ   rò   rÖ   s     r*   Úmpf_gerû   �  r÷   r,   c                 óx   • U S   =pU SS   H)  n[        X15      (       a  Un[        X25      (       d  M'  UnM+     X4$ r�   )ró   rù   )Úseqr”   rE   r%   s       r*   Úmpf_min_maxrþ   †  sA   € Ø�A‘Ð€CØ��‹WˆÜ�!�>‰> ˜3Ü�!�>‹> š3ñ ð ˆ8€Or,   c                 óX   • U(       a"  U u  p4pVU(       d	  U(       a  U $ [        X4XVX5      $ U $ )zLCalculate 0+s for a raw mpf (i.e., just round s to the specified
precision).)rÃ   ©rŠ   rn   r^   r&   r'   r(   r)   s          r*   r“   r“   �  s/   € ö ØÑˆ�3ÞžØˆHÜ˜$ S¨dÓ8Ð8Ø€Hr,   c                 ó¬   • U u  p4pVU(       d)  U(       a   U [         :X  a  [        $ U [        :X  a  [         $ U $ U(       d  SU-
  XEU4$ [        SU-
  XEXaU5      $ )z‹Negate a raw mpf (return -s), rounding the result to the
specified precision. The prec argument can be omitted to do the
operation exactly.r   )r©   rª   rÃ   r   s          r*   Úmpf_negr  —  sX   € ð Ñ€DˆsÞÞØ”D‹y¤˜,Ø”E‹z¤$˜;ØˆÞØ�$‘˜ "Ð%Ð%Ü�a˜‘f˜c¨°#Ó6Ð6r,   c                 ó’   • U u  p4pVU(       d  U(       a  U [         :X  a  [        $ U $ U(       d  U(       a  SXEU4$ U $ [        SXEXaU5      $ )z�Return abs(s) of the raw mpf s, rounded to the specified
precision. The prec argument can be omitted to generate an
exact result.r   )rª   r©   rÃ   r   s          r*   Úmpf_absr  ¥  sM   € ð Ñ€DˆsÞ–SØ”‹:ÜˆKØˆÞÞØ�s Ð$Ð$ØˆÜ�a˜ 2¨SÓ1Ð1r,   c                 óR   • U u  pp4U(       d  U [         :X  a  gU [        :X  a  ggSU-  $ )z„Return -1, 0, or 1 (as a Python int, not a raw mpf) depending on
whether s is negative, zero, or positive. (Nan is taken to give 0.)r   rR   r   )r©   rª   r‰   s        r*   rç   rç   ´  s0   € ð Ñ€DˆsÞØ”‹9˜QØ”‹:˜bØØ�4‰<Ðr,   c                 ó¦  • U u  pVpxUu  pšp¼X”-  n	U(       Ga¸  U
(       Ga°  X{-
  nU(       GaY  US:”  a¥  US:”  aK  U(       aD  X‡-   U-
  U-
  nXâS-   :”  a2  US-   nXm-  nX•:X  a  US-  nOUS-  n[        XVX}-
  [        U5      X#5      $ XY:X  a  X¦U-  -   nO$U(       a  X¦U-  -
  nOXm-  U
-
  nUS:¼  a  SnOU* nSn[        U5      n[        X_UUU=(       d    UU5      $ US:  a¨  US:  aK  U(       aD  XË-   U-
  U-
  nXâS-   :”  a2  US-   nX­-  n
XY:X  a  U
S-  n
OU
S-  n
[        XšX½-
  [        U
5      X#5      $ XY:X  a	  XjU* -  -   nO&U	(       a	  XjU* -  -
  nOX­* -  U-
  nUS:¼  a  SnOU* nSn[        U5      n[        X_UUU=(       d    UU5      $ XY:X  a  X¦-   nOU(       a  X¦-
  nOXj-
  nUS:¼  a  SnOU* nSn[        U5      n[        X_UUU=(       d    UU5      $ U(       a  [        U5      nU(       dB  U(       a  X:X  d  U
(       d  U(       d  U $ [        $ U
(       a  [        XšX¼U=(       d    UU5      $ U$ U(       a  U$ U(       a  [        XVXxU=(       d    UU5      $ U $ )zÃ
Add the two raw mpf values s and t.

With prec=0, no rounding is performed. Note that this can
produce a very large mantissa (potentially too large to fit
in memory) if exponents are far apart.
r   éd   é   r   iœÿÿÿ)rÃ   r   r}   r  r¥   )rŠ   r_   rn   r^   Ú_subrß   rà   rá   râ   rè   ré   rê   rë   rÏ   rî   r'   r)   s                    r*   Úmpf_addr
  ¾  s—  € ð Ñ€E�ØÑ€E�Ø	�M€Eç—Ø‘ˆßØ˜‹zà˜C“<¦DØ™J¨Ñ,¨tÑ3�EØ a™xÓ'Ø!%¨¡˜Ø™˜Ø ›>¨4°1©9©4Ø+/°1©9¨4Ü)¨%°t±{Ü$ T›N¨Dó 7ð 7ð “>Ø¨&¡.Ñ1‘Cö  D°F©NÑ$;™cØ%)¡^°tÑ$;˜cØ˜a“xØ !™à"˜d˜Ø !˜Ü˜c“]�Ü! %¨d°B¸¿
ÀÀCÓHÐHØ˜!“à˜D“=¦TØ™J¨Ñ,¨tÑ3�EØ a™xÓ'Ø!%¨¡˜Ø™˜Ø ›>¨4°1©9©4Ø+/°1©9¨4Ü)¨%°t±{Ü$ T›N¨Dó 7ð 7ð “>Ø¨6¨'¡/Ñ2‘Cö  D°V°G©OÑ$<™cØ%)¨W¡_¸Ñ$<˜cØ˜a“xØ !™à"˜d˜Ø !˜Ü˜c“]�Ü! %¨d°B¸¿
ÀÀCÓHÐHà‹>Ø‘+‰Cæ˜D™K‘cØ ™K�cØ�a‹xØ‘à�d�Ø�Ü�c‹]ˆÜ˜ T¨2¨t¯z°r¸3Ó?Ð?æÜ�A‹JˆÞÞØ‹vž¦TØ�ÜˆKÞÜ˜e¨4°d·k¸cÀ3ÓGÐGØˆÞØˆÞÜ˜% t°$·+¸#¸sÓCÐCØ€Hr,   c                 ó   • [        XX#S5      $ )ztReturn the difference of two raw mpfs, s-t. This function is
simply a wrapper of mpf_add that changes the sign of t.r   )r
  )rŠ   r_   rn   r^   s       r*   r¡   r¡     s   € ô �1˜ AÓ&Ð&r,   c                 óÎ  • SnSnUS-  =(       d    SnSnU  H·  nUu  pšp¼U
(       as  U	(       a
  U(       d  U
* n
Xµ-
  nXµ:¼  a6  XÖ:”  a(  U(       a  U[        [        U5      5      -
  U:”  a  U
nUnMV  XJU-  -  nM_  U* nXÜ-
  U:”  a  U(       d  X«pTMu  Mw  XM-  U
-   nUnM‚  U(       d  M‹  U(       a  [        U5      n[        U=(       d    [        US5      nM¹     U(       a  U$ [        XEX5      $ )a"  
Sum a list of mpf values efficiently and accurately
(typically no temporary roundoff occurs). If prec=0,
the final result will not be rounded either.

There may be roundoff error or cancellation if extremely
large exponent differences occur.

With absolute=True, sums the absolute values.
r   r.   i@B Nr   )r   Úabsr  r
  rk   r~   )Úxsrn   r^   Úabsoluter'   r(   Úmax_extra_precÚspecialr%   ÚxsignÚxmanÚxexpÚxbcrî   s                 r*   Úmpf_sumr  "  sò   € ð €CØ
€CØ˜!‘V×&˜w€NØ€GÛˆØ!"Ñˆ�TÞÞžXØ�u�Ø‘JˆEØ‹{ð Ó*Þ %¬´°S³Ó(:Ñ":¸^Ó"KØ�CØ’Cà E™MÑ*’Cà˜�à‘9˜~Ó-ÞØ#'šSñ ð ™<¨4Ñ/�CØ’CßˆTÞÜ˜A“J�Ü˜g×.¬°°1Ó5ŠGñ7 ö: ØˆÜ˜ $Ó,Ð,r,   c                 óš  • U u  pEpgUu  p‰p«XH-  nXY-  nU(       a)  [        U5      nU(       a  [        XÍXj-   XâU5      $ XÍXj-   U4$ U(       + =(       a    UnU	(       + =(       a    U
nU(       d  U(       d  [        $ [        X4;   a  [        $ U	(       d	  U
(       a  XpU[        :X  a  [        $ [        [
        S.[        U 5      [        U5      -     $ )úMultiply two raw mpfs©r   rR   )r   rÃ   rk   r¥   r©   rª   rç   ©rŠ   r_   rn   r^   rß   rà   rá   râ   rè   ré   rê   rë   r&   r'   r)   Ú	s_specialÚ	t_specials                    r*   Úgmpy_mpf_mulr  R  sµ   € àÑ€E�ØÑ€E�Ø‰=€DØ
‰)€CÞ
Ü�c‹]ˆÞÜ˜d¨©°B¸cÓBÐBà˜t™y¨"Ð-Ð-Ø”×#˜t€IØ”×#˜t€IÞžYÜˆÜ�ˆvƒ~œd�{Þ–d 1˜qØŒEƒzœ$�;Ü”uÑœh q›k¬H°Q«KÑ7Ñ8Ð8r,   c                 ó²   • U u  pEpgU(       d  [        U [        U5      X#5      $ U(       d  [        $ US:  a  US-  nU* nXQ-  n[        XEU[	        U5      X#5      $ )úMultiply by a Python integer.r   r   )Úmpf_mulr…   rk   r}   r   ©rŠ   r=   rn   r^   r&   r'   r(   r)   s           r*   Úgmpy_mpf_mul_intr"  g  s]   € àÑ€DˆsÞÜ�qœ( 1›+ tÓ1Ð1ÞÜˆØˆ1ƒuØ�‰	ˆØˆBˆØ�H€CÜ�T ¤X¨c£]°DÓ>Ð>r,   c                 ó²  • U u  pEpgUu  p‰p«XH-  nXY-  nU(       a5  X{-   S-
  nU[        XÞ-	  5      -  nU(       a  [        XÍXj-   XâU5      $ XÍXj-   U4$ U(       + =(       a    UnU	(       + =(       a    U
nU(       d  U(       d  [        $ [        X4;   a  [        $ U	(       d	  U
(       a  XpU[        :X  a  [        $ [        [
        S.[        U 5      [        U5      -     $ )r  r   r  )rF   rÃ   rk   r¥   r©   rª   rç   r  s                    r*   Úpython_mpf_mulr$  t  sÇ   € àÑ€E�ØÑ€E�Ø‰=€DØ
‰)€CÞ
Ø‰Y˜‰]ˆØ
Œc�#‘'‹lÑˆÞÜ˜d¨©°B¸cÓBÐBà˜t™y¨"Ð-Ð-Ø”×#˜t€IØ”×#˜t€IÞžYÜˆÜ�ˆvƒ~œd�{Þ–d 1˜qØŒEƒzœ$�;Ü”uÑœh q›k¬H°Q«KÑ7Ñ8Ð8r,   c                 ó  • U u  pEpgU(       d  [        U [        U5      X#5      $ U(       d  [        $ US:  a  US-  nU* nXQ-  nUS:  a  U[        [	        U5         S-
  -  nOU[        U5      S-
  -  nU[	        XW-	  5      -  n[        XEXgX#5      $ )r  r   r   r|   )r   r…   rk   r   rF   r   r}   r!  s           r*   Úpython_mpf_mul_intr&  Š  s—   € àÑ€DˆsÞÜ�qœ( 1›+ tÓ1Ð1ÞÜˆØˆ1ƒuØ�‰	ˆØˆBˆØ�H€Càˆ4ƒxØ
Œg”c˜!“f‰o Ñ!Ñ!‰à
Œh�q‹k˜A‰oÑˆØŒ#ˆc‰g‹,Ñ€BÜ�T ¨Ó3Ð3r,   c                 ó,   • U u  p#pEU(       d  U $ X#XA-   U4$ )z8Quickly multiply the raw mpf s by 2**n without rounding.r5   )rŠ   r=   r&   r'   r(   r)   s         r*   Ú	mpf_shiftr(  ¥  s#   € àÑ€DˆsÞØˆØ�c‘e˜RÐÐr,   c                 óp   • U u  pp4U(       d  U [         :X  a  [         S4$ [        e[        X* U-
  5      XC-   4$ )z?Convert x = y*2**n to (y, n) with abs(y) in [0.5, 1) if nonzeror   )rk   rˆ   r(  r$   s        r*   Ú	mpf_frexpr*  ¬  s>   € àÑ€DˆsÞØ”‹:Ü˜1�:ÐäÐÜ�Q˜˜C™Ó  "¡&Ð(Ð(r,   c                 óè  • U u  pEpgUu  p‰p«U(       a  U	(       dÐ  U [         :X  a&  U[         :X  a  [        eU[        :X  a  [        $ [         $ U[         :X  a  [        eU(       + =(       a    UnU	(       + =(       a    U
nU(       a  U(       a  [        $ U [        :X  d
  U[        :X  a  [        $ U(       d5  U[         :X  a  [        $ [        [        S.[        U 5      [        U5      -     $ [         $ XH-  nU	S:X  a  [        XåXj-
  XrU5      $ X'-
  U-   S-   nUS:  a  Sn[        X_-  U	5      u  nnU(       a*  US-  S-   nUS-  n[        UUXj-
  U-
  [        U5      X#5      $ [        UUXj-
  U-
  [        U5      X#5      $ )zFloating-point divisionr  r   ræ   )
rk   ÚZeroDivisionErrorr¥   r©   rª   rç   rÃ   Údivmodr   r}   )rŠ   r_   rn   r^   rß   rà   rá   râ   rè   ré   rê   rë   r  r  r&   ÚextraÚquotÚrems                     r*   rÈ   rÈ   ¶  sV  € àÑ€E�ØÑ€E�Þ–tØ”‹:Ø”E‹zÔ!2Ð2Ø”D‹y¤˜+ÜˆLØ”‹:Ü#Ð#Ø”X×' 4ˆ	Ø”X×' 4ˆ	ÞžÜˆKØ”‹9˜œT›	ÜˆKÞØ”E‹zÜ�ÜœuÑ%¤h¨q£k´H¸Q³KÑ&?Ñ@Ð@ÜˆØ‰=€DØˆqƒyÜ˜$ d¡i°¸CÓ@Ð@ð ‰J˜Ñ˜qÑ €EØˆqƒyØˆÜ�t‘{ DÓ)�I€Dˆ#Þ
Ø�a‘˜1‰}ˆØ�‰
ˆÜ˜$  d¡i°¡o´xÀ³~ÀtÓQÐQÜ�T˜4 ¡¨5¡´(¸4³.À$ÓLÐLr,   c                 ó2  • Uu  pEpgU (       a  U(       d  [        [        U 5      XU5      $ U S:  a  US-  nU * n X'-   S-   n[        X-  U5      u  pšU
(       a(  U	S-  S-   n	US-  n[        XIU* U-
  [	        U	5      X#5      $ [        XIU* U-
  [	        U	5      X#5      $ )z>Floating-point division n/t with a Python integer as numeratorr   r   ræ   )rÈ   r…   r-  rÃ   r   r}   )r=   r_   rn   r^   r&   r'   r(   r)   r.  r/  r0  s              r*   Úmpf_rdiv_intr2  Û  s¥   € àÑ€DˆsÞ–CÜ”x “{ A¨SÓ1Ð1Øˆ1ƒuØ�‰	ˆØˆBˆØ‰I˜‰M€EÜ�q‘x Ó%�I€DÞ
Ø�a‘˜1‰}ˆØ�‰
ˆÜ˜$ s d¨5¡j´(¸4³.À$ÓLÐLÜ�T #  e¡¬X°d«^¸TÓGÐGr,   c                 ó>  • U u  pEpgUu  p‰p«U(       d  U(       d  U	(       d  U
(       a  [         $ XH:X  a
  X¦U-   :”  a  U $ U	S:X  a  XjU-   :”  a  [        $ [        Xj5      nSU-  U-  nSU-  U	-  n	XVU-
  -  XšU-
  -  -  nUS:¼  a  SnOU* nSn[        XíU[	        U5      X#5      $ )Nr   rR   r   )r¥   rk   r”   r}   r   )rŠ   r_   rn   r^   rß   rà   rá   râ   rè   ré   rê   rë   Úbaser'   r&   s                  r*   Úmpf_modr5  ë  s¶   € ØÑ€E�ØÑ€E�Þ–t¦d¶Üˆàƒ~˜$ c¡›/Øˆð ˆqƒy�T ™H“_ÜˆÜˆt‹?€DØ�‰;˜Ñ€DØ�‰;˜Ñ€DØ˜‘IÑ 4°©IÑ#6Ñ
7€CØ
ˆaƒxØ‰àˆdˆØˆÜ�T ¤h¨s£m°TÓ?Ð?r,   c                 óì  • U u  pEpgU(       de  U(       a^  U [         :X  a  US:”  a  U $ US:X  a  [        $ [        $ U [        :X  a*  US:”  a  [         [        /US-     $ US:X  a  [        $ [        $ [        $ [	        U5      nUS:X  a  [
        $ US:X  a  [        XU5      $ US:X  aW  U u  p…pgU(       d  [        $ XU-  nUS:X  a  S[        Xf-   S4$ Xw-   S-
  nU[        [	        XW-	  5         -  n[        SXVU-   XrU5      $ US:X  a  [        [
        XU5      $ US:  a)  [        X* US-   [        U   5      n	[        [
        X’U5      $ XA-  n
US:X  a  U
[        Xa-  S4$ Xq-  S:  a  XQ-  n[        X¥Xa-  [        U5      X#5      $ U[        :H  =(       d    [        U   U
   nUS[        U5      -  -   S-   n[
        u  p�pï US-  (       aY  XÕ-  nXæ-   nX÷S-
  -  nU[        [	        Xß-	  5         -   nXü:”  a!  U(       a  XßU-
  -	  nO	U* Xü-
  -	  * nXïU-
  -  nUnUS-  nU(       d  OSXU-  nXf-   nXw-   S-
  nU[        [	        XW-	  5         -   nX|:”  a!  U(       a  XWU-
  -	  nO	U* X|-
  -	  * nXgU-
  -  nUnUS-  nM¶  [!        X­XïX#5      $ )z=Compute s**n, where s is a raw mpf and n is a Python integer.r   r   r.   rR   ræ   iè  r  )r©   r¥   rk   rª   rF   r�   r“   r	   r   rÃ   rÈ   Úmpf_pow_intÚreciprocal_rndr   rW   rl   r}   )rŠ   r=   rn   r^   r&   r'   r(   r)   Ú_ÚinverseÚresult_signÚrounds_downÚworkprecÚpmÚpeÚpbcs                   r*   r7  r7    sÊ  € àÑ€Dˆsæ–SØ”‹9Ø�1‹u˜Q�hØ�A‹vœd�{ÜˆLØ”‹:Ø�1‹uœd¤E˜]¨1¨q©5Ñ1Ð1Ø�A‹vœd�{ÜˆLÜˆäˆA‹€AØˆAƒv”dˆ{ØˆAƒv”g˜a sÓ+Ð+ØˆAƒvØ‰ˆ�ÞÜˆLØ‰gˆØ�!‹8Ø”w ¡¨Ð+Ð+Ø‰W�q‰[ˆØ
Œg”c˜#™'“lÑ#Ñ#ˆÜ˜!˜S c¡'¨2°SÓ9Ð9ØˆBƒw”wœt Q¨cÓ2Ð2Øˆ1ƒuÜ˜a  T¨!¡V¬^¸CÑ-@ÓAˆÜ”t˜W¨CÓ0Ð0à‘(€Kð ˆaƒxØœW c¡e¨QÐ/Ð/Ø	�tˆdƒ{Ø‰	ˆÜ˜+¨C©E´8¸C³=À$ÓLÐLð œ-Ñ'÷ &Ü�CÑ˜Ñ%ð ð �aœ ›‘mÑ# aÑ'€HÜ�N€Aˆ2Ø
Øˆq�5Ø‘ˆBØ‘ˆBØ˜‘6‰MˆCØœ¤ B¡I£Ñ/Ñ/ˆCØ‹~ÞØ H¡Ñ-‘Bà˜C S¡\Ñ2Ð3�BØ˜H‘nÑ$�Ø�Ø�‰FˆAÞØØ‰gˆØ‰gˆØ‰W�q‰[ˆØ”'œ#˜c™i›.Ñ)Ñ)ˆØ‹=ÞØ ™kÑ*‘à˜ 2¡;Ñ/Ð0�Ø˜‘=Ñ ˆCØˆBØ�‰Fˆñ7 ô: �[ b¨tÓ9Ð9r,   c                 óò   • U[         :X  a  [        XU5      $ U u  pEpgU[        Xg-   U-
  S-
  S4nU(       a  U[        [        4;   U-  n	OU[
        [        4;   U-  n	U	(       a  [        XX#5      $ [        XU5      $ )zê
For nonzero x, calculate x + eps with directed rounding, where
eps < prec relatively and eps has the given sign (0 for
positive, 1 for negative).

With rounding to nearest, this is taken to simply normalize
x to the given precision.
r   )rW   r“   r	   r\   r[   r]   r
  )
r%   Úeps_signrn   r^   r&   r'   r(   r)   ÚepsÚaways
             r*   Úmpf_perturbrE  f  sƒ   € ð ŒmÓÜ�q Ó$Ð$ØÑ€DˆsØ”W˜c™f T™k¨!™m¨QÐ
/€CÞØœ
¤MÐ2Ñ2°hÑ>‰àœ¤-Ð0Ñ0°HÑ<ˆÞÜ�q˜tÓ)Ð)ä�q Ó$Ð$r,   c                 ó¤  • U S   (       a  Sn[        U 5      n OSnU u  p4pVU(       d  g[        U[        R                  " SS5      -  5      S-   nXV-   n[	        U5      S:”  a{  SS	KJn	Jn
  [        [	        U5      5      S
-   n[        U5      n[        XÉ" U5      5      n[        XÊ" U5      U5      n[        U5      n[        U [        [        X×5      U5      n U u  p4pVUnOSn[        Xu-
  U-
  S5      n[        U[        R                  " SS5      -  S-   5      n[!        X5      n[#        UUSU5      n[%        USUS9nU['        U5      U-
  S-
  -  nUUU4$ )a   Helper function for representing the floating-point number s as
a decimal with dps digits. Returns (sign, string, exponent) where
sign is '' or '-', string is the digit string, and exponent is
the decimal exponent as an int.

If inexact, the decimal representation is rounded toward zero.r   Ú-Ú )rH  Ú0r   é
   r.   i¬  r   )Úmpf_ln2Úmpf_ln10ræ   g      à?)r4  Úsize)r  rF   r¦   Úlogr  Ú	libelefunrK  rL  r   r…   r   rÈ   r�   r7  ÚftenrE   rÐ   r   r   r½   )rŠ   rP   r&   Ú_signr'   r(   r)   ÚbitprecÚ
exp_from_1rK  rL  ÚexpprecÚtmprí   ÚexponentÚfixprecÚfixdpsÚsfÚsdÚdigitss                       r*   Úto_digits_expr\  �  sX  € ð 	ˆ‡tØˆÜ�A‹J‰àˆØÑ€E�æØä�#œŸš  A›Ñ&Ó'¨"Ñ,€Gð ‘€JÜ
ˆ:ƒ˜Óß0ô œ3˜s›8Ó$ qÑ(ˆÜ�s‹mˆÜ�c˜7 7Ó+Ó,ˆÜ�c˜8 GÓ,¨gÓ6ˆÜ�3‹KˆÜ�A”{¤4¨Ó4°gÓ>ˆØÑˆ�CØ‰àˆô
 �'‘- "Ñ$ aÓ(€GÜ�œ4Ÿ8š8 B q›>Ñ)¨CÑ/Ó0€FÜ	�!Ó	€BÜ	�b˜' 2 vÓ	.€BÜ�R˜b sÑ+€Fà”�F“˜fÑ$ qÑ(Ñ(€HØ�˜Ð!Ð!r,   c                 óÈ  • U S   (       dK  U [         :X  a  U(       a  SnOSnU(       a  US-  nU$ U [        :X  a  gU [        :X  a  gU [        :X  a  g[        eUc  [        US	-  * S
5      nUc  Un[        XS	-   5      u  pxn	U(       d  US   S;   a  U	S-  n	SnGO[        U5      U:”  aw  X�   S;   ao  USU nUS-
  n
U
S:¼  a  XŠ   S:X  a  U
S-  n
U
S:¼  a
  XŠ   S:X  a  M  U
S:¼  a+  USU
 [        [        XŠ   5      S-   5      -   SX-
  S-
  -  -   nOSSUS-
  -  -   nU	S-  n	OUSU nX9s=:  a  U:  a5  O  O2U	S:  a  S[        U	* 5      -  U-   nSnOU	S-   nX±:”  a
  USX±-
  -  -  nSn	OSnUSU S-   X‹S -   nU(       a  UR                  S5      nUS   S:X  a  US-  nU	S:X  a  U(       a  U(       d  Xx-   $ U	S:¼  a  Xx-   S-   [        U	5      -   $ U	S:  a  Xx-   S-   [        U	5      -   $ g)aK  
Convert a raw mpf to a decimal floating-point literal with at
most `dps` decimal digits in the mantissa (not counting extra zeros
that may be inserted for visual purposes).

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.

The literal is formatted so that it can be parsed back to a number
by to_str, float() or Decimal().
r   z0.0z.0ze+0ú+infú-infrÜ   NrO   éûÿÿÿr   Ú56789Ú9rI  Ú1Ú.rR   ze+r¬   )rk   r©   rª   r¥   rˆ   r”   r\  r½   rÀ   rF   Úrstrip)rŠ   rP   Ústrip_zerosÚ	min_fixedÚ	max_fixedÚshow_zero_exponentr_   r&   r[  rV  ÚiÚsplits               r*   Úto_strrl  µ  s;  € ð( ˆQ�4Ø”‹:Þ˜‘AØ�AÞ!Ø�U‘
�ØˆHØ”‹9˜VØ”‹:˜fØ”‹9˜UÜÐàÑ¤c¨C°©F¨)°RÓ&8˜)ØÑ c˜)ô +¨1°!©eÓ4Ñ€D�(ö Ø�!‰9˜ÓØ˜‰MˆHØŠô ˆv‹;˜Ó ¡°Ó!7Ø˜D˜S�\ˆFØ�a‘ˆAØ�q“&˜V™Y¨#Ó-Ø�Q‘�ð �q“&˜V™Y¨#Õ-à�A‹vØ  ˜¤c¬#¨f©i«.¸1Ñ*<Ó&=Ñ=ÀÀsÁwÐQRÁ{Ñ@SÑS‘à˜s c¨A¡g™Ñ.�Ø˜A‘‘à˜D˜S�\ˆFð Õ+ )Ö+Ø˜!‹|Øœc 8 )›nÑ,°Ñ6�Ø‘à  1™�Ø“;Ø˜c 5¡9™oÑ-�FØ‰HàˆEà˜˜%�. 3Ñ&¨°¨Ñ7ˆæà—]‘] 3Ó'ˆFØ�b‰z˜SÓ Ø˜#‘�à�1ƒ}žÖ%7ÀÁÐ9MØ�1ƒ}˜T™]¨TÑ1´C¸³MÑAÐAØ�!ƒ|˜D™M¨CÑ/´#°h³-Ñ?Ð?€|r,   c                 ó„  • U R                  5       R                  S5      n [        U 5        U R                  S5      n[	        U5      S:X  a  SnOUS   n [        US   5      nU R                  S5      n[	        U5      S:X  a*  US   US   R                  S5      pTU[	        U5      -  nXE-   n [        [        X5      5      n X4$ )zHelper function for from_str.Úlr¬   r   r   rd  r.   rI  )Úlowerre  r°   rk  r½   rF   r   )r%   r4  Úpartsr(   rì   rí   s         r*   Ústr_to_man_exprq  
  s«   € à	�‰‹	×Ñ˜Ó€Aä	ˆ!„Hà�G‰G�C‹L€EÜ
ˆ5ƒz�QƒØ‰à�!‰HˆÜ�%˜‘(‹mˆà�G‰G�C‹L€EÜ
ˆ5ƒz�QƒØ�Q‰x˜˜q™Ÿ™¨Ó-ˆ1ØŒs�1‹v‰ˆØ‰EˆÜŒC�‹LÓ€AØˆ6€Mr,   )rÝ   r^  r_  rÜ   c           	      ó  • U R                  5       R                  5       n U [        ;   a	  [        U    $ SU ;   aS  U R                  S5      u  p4UR	                  S5      UR	                  S5      pC[        [        U5      [        U5      X5      $ [        U SS9u  pV[        U5      S:”  a.  [        XQS-   5      n[        U[        [        XaS-   5      X5      nU$ US:¼  a  [        USU-  -  X5      nU$ [        USU* -  X5      nU$ )a>  Create a raw mpf from a decimal literal, rounding in the
specified direction if the input number cannot be represented
exactly as a binary floating-point number with the given number of
bits. The literal syntax accepted is the same as for Python
floats.

TODO: the rounding does not work properly for large exponents.
Ú/rn  rJ  ©r4  i�  r   )ro  ÚstripÚspecial_strrk  re  rË   rF   rq  r  r…   r   r7  rP  )r%   rn   r^   rÉ   rÊ   r'   r(   rŠ   s           r*   r¿   r¿   !  sô   € ð 	
�‰‹	�‰Ó€AØŒKÓÜ˜1‰~Ðà
ˆaƒxØ�w‰w�s‹|‰ˆØ�x‰x˜‹}˜aŸh™h s›mˆ1ÜœS ›V¤S¨£V¨TÓ7Ð7ä˜a bÑ)�H€Cô ˆ3ƒx�#ƒ~Ü�S˜r™'Ó"ˆÜ�A”{¤4¨°2©gÓ6¸ÓBˆð €Hð	 �!‹8Ü˜˜r 3™w™¨Ó2ˆAð €Hô ˜c 2¨ t¡8¨TÓ7ˆAØ€Hr,   c                 ó„   • [        U SS9u  p[        U5      nSnUS:  a  U* nSn[        U5      n[        X1X$U[        5      $ )Nr.   rt  r   r   )rq  r   r   r}   rZ   )r%   r'   r(   r&   r)   s        r*   Ú	from_bstrrx  D  sK   € Ü˜a aÑ(�H€CÜ
ˆc‹(€CØ€DØ
ˆQƒwØˆdˆØˆÜ	�#‹€BÜ�T ¨¬[Ó9Ð9r,   c                 óP   • U u  pp4SS/U   [        U[        U5      SS9-   SU-  -   $ )NrH  rG  r.   )rM  r4  ze%i)r   r   r$   s        r*   Úto_bstrrz  N  s6   € ØÑ€DˆsØˆsˆ8�D‰>œG C¬h°s«mÀ!ÑDÑDÈÐPSÉÑTÐTr,   c                 ón  • U u  p4pVU(       a  [        S5      eU(       d  U $ US-  (       a  US-  nUS-  nUS-  nOUS:X  a  [        X4US-  XaU5      $ [        SSU-  U-
  S-   5      nXwS-  -  nUS;   a  [        XG-  5      nO#[	        XG-  5      u  pHU(       a  US-  S-   nUS-  n[        XEU-
  S-  X5      $ )zV
Compute the square root of a nonnegative mpf value. The
result is correctly rounded.
z square root of a negative numberr   r.   r  Úfd)r3   rÃ   rE   r   r   r~   )	rŠ   rn   r^   r&   r'   r(   r)   Úshiftr0  s	            r*   Úmpf_sqrtr~  X  sÖ   € ð
 Ñ€DˆsÞÜÐ>Ó?Ð?ÞØˆØ
ˆQ‡wØˆq‰ˆØ�‰	ˆØ
ˆa‰‰Ø	�‹Ü˜$ S¨!¡V¨R°sÓ;Ð;Ü��1�T‘6˜"‘9˜Q‘;Ó€EØ	�Q‰YÑ€EØ
ˆdƒ{Ü�C‘JÓ‰ä˜3™:Ó&‰ˆæØ˜‘6˜1‘*ˆCØ�Q‰JˆEÜ˜ %™i¨!™^¨TÓ7Ð7r,   c                 ó¶   • U[         :X  a  [        XU5      $ U [         :X  a  [        XU5      $ [        [        X 5      [        X5      US-   5      n[	        XBU5      $ )zECompute the Euclidean norm sqrt(x**2 + y**2) of two raw mpfs
x and y.r  )rk   r  r
  r   r~  )r%   r¶   rn   r^   Úhypot2s        r*   Ú	mpf_hypotr�  t  sQ   € ð 	ŒEƒzœ' !¨3Ó/Ð/ØŒEƒzœ' !¨3Ó/Ð/Ü”W˜Q“\¤7¨1£<°°a±Ó8€FÜ�F #Ó&Ð&r,   r!   )TNNF)rJ  )ŽÚ__doc__Ú__docformat__r¦   r   rÙ   rÒ   Úbackendr   r   r   r	   r
   r   r   r   r   r   r   r   r   Ú
libintmathr   r   r   r   r   r   r   r   r   r   r   r   r   r+   r1   rˆ   r3   ÚinternÚ	NameErrorrW   rZ   r[   r]   r\   Ú
round_fastrI   rK   rQ   rk   Úfnzeror�   r‘   ÚftworP  Úfhalfr¥   r©   rª   r¨   rY   ra   ÚrangeÚh_mask_smallrX   rl   ro   rq   rF   Úlongru   rw   ry   Údirrz   r}   rÃ   r~   Údictr„   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   Úmpf_mul_intr(  r*  rÈ   r2  r5  r8  Únegative_rndr7  rE  r\  rl  rq  rv  r¿   rx  rz  r~  r�  Úsage.libs.mpmath.ext_libmpÚlibsÚmpmathÚ	ext_libmpÚext_libÚImportError)r9  s   0r*   Ú<module>r™     sS  ðñð €ã å ã 
ð €÷F÷ F÷ Fõ F÷÷ ÷ õ ð ˆfÓó'ò+ò)ô	�Jô 	ðÙ
ñ
 �s“€Ù�S‹k€Ù�s“€Ù�#‹;€Ù�C‹[€
Ø€
ò;ò
=ò
ð 
ˆH�a˜Ð€Ø
ˆX�q˜!Ð	€Ø	ˆ7�A�qÐ€Ø	
ˆG�Q˜Ð€Ø	ˆ7�A�qÐ€Ø	ˆ8�Q˜Ð€Ø	
ˆG�R˜Ð€ð 	
ˆ8�T˜2Ð€Ø	ˆ8�T˜2Ð€Ø	
ˆH�d˜BÐ€ð €ò÷2"ñ "ð ˆs±%¸¸3´-Ó@²-¨Q�g  !¡‘n aÔ'±-Ñ@Ñ@€Ù
‹,˜Ð	%€ð
 ˜5 -°Øˆu�h˜uð&€ò5òn'ðRØ�t�€Jò5ò6ð ˆfÓÐ,±°D³	Ó9Ø×'Ñ'€JØ×(Ñ(€Kà
ˆfÓØ)×3Ñ3Ð3€J�æ	Ø €IØ"�Jà€IØ€Jð !%¨*ô 4ñ> ÑB±%¸¸S´/ÓBÓB€	à
ˆfÓÐ)©S°«YÓ6Ø×&Ñ&€Là
ˆfÓØ×*Ñ*€Là˜Jô )òô)ò,)ð, ˜Zô ð ˜Jô ð ˜Jô ð ˜Jô /ð ˜zô 9ð&  *ô ð  :ô 'ð  *ô #ðJ #-ô 8ò
ò	0ò&Eòòò:2òhò
ò
ò
ò
ð ˜:ô ð ˜jô 7ð ˜jô 2òð ˜j¨qô ]ð~ ˜jô 'ð
 ˜J°ô .-ð`  :ô 9ð* &0ô ?ð   Zô 9ð, (2ô 4ð( ˆfÓØ€GØ"�Kà€GØ$€Kò ò)ð 'ô #MðJ ",ô Hð  'ô @ð0 ˆxØ
ˆZØ�Ø�+Ø�-ð€ð ˆzØ
ˆXØ�Ø�+Ø�-ð€ð !+ô Q:òh%ò62"ðh @DØôS@ôjð*  $¨u¸DÑA€à$ô òF:òUð %ô 8ð8 )ô 'ð ˆfÓðß4Ó4Ø—/‘/ˆØ—/‘/ˆØ—/‘/ˆØ—/‘/ˆØ×#Ò#‰ð øð[* ó ÙƒFðüòp Aøðf ó Ø�ƒJðûðT$ ó Ùðús=   Á-M Ã:M%Ä.M* Ì
A	M: Í	M"Í!M"Í*	M7Í6M7Í:NÎN