ó
    F\h6.  ã                   ód  • S r SSKrSSKr SSKrSS jr\R                  " 5       R                  5       r\R                  \l
        \R                  \l        \R                  \l        S\R                  \R                   '   S rS rS rS rS	 rS
rS rS rS rS rS rS rg! \ a    Sr Nžf = f)aþ  Python implementations of some algorithms for use by longobject.c.
The goal is to provide asymptotically faster algorithms that can be
used for operations on integers with many digits.  In those cases, the
performance overhead of the Python implementation is not significant
since the asymptotic behavior is what dominates runtime. Functions
provided by this module should be considered private and not part of any
public API.

Note: for ease of maintainability, please prefer clear code and avoid
"micro-optimizations".  This module will only be imported and used for
integers with a huge number of digits.  Saving a few microseconds with
tricky or non-obvious code is not worth it.  For people looking for
maximum performance, they should use something like gmpy2.é    Nc                 óÎ  • [        5       n[        5       nU 1nU(       a{  UR                  5       n X;   d  X::  a  M#  UR                  U 5        U S-	  nUR                  U5        UR                  U5        U S-  (       a  UR                  US-   5        U(       a  M{  0 nU(       d  U$ [        [	        U5      5      n	[        U	5      n
U(       a  [        SU
5        X-  XŠ'   U	 H‚  nUS-
  U;   a!  U(       a  [        SU5        X‹S-
     U-  X‹'   M-  US-	  nX·-
  nXx;   d   eU(       a  [        SU5        X‡   X‡   -  nXÇ:w  a   XÇS-   :X  d   eU(       a  [        S5        XÑ-  nXØU'   M„     U$ )Né   zpow atz	* base atz	square atz    and * base)ÚsetÚpopÚaddÚiterÚsortedÚnextÚprint)ÚwÚbaseÚ	more_thanÚshowÚseenÚneedÚwsÚloÚdÚitÚfirstÚthisÚhiÚsqs                 Ú/usr/lib/python3.13/_pylong.pyÚcompute_powersr   3   sQ  € Ü‹5€DÜ‹5€DØ
ˆ€BÞ
Ø�F‰F‹HˆØ‹9˜›ÙØ�‰�ŒØ�!‰Vˆà�‰�ŒØ
�‰ˆrŒ
Øˆq�5Ø�F‰F�2˜‘6ŒN÷ ˆ"ð 	€AÞØˆÜ	Œf�T‹lÓ	€BÜ�‹H€EÞÜˆh˜ÔØ‰}€A�HÛˆØ�!‰8�q‹=ÞÜ�k 4Ô(Ø˜q™‘k DÑ(ˆA‹Gà˜‘ˆBØ‘ˆBØ“7ˆN�7ÞÜ�k 4Ô(ð ‘˜™‘ˆBØ‹xØ !™V“|Ð#�|ÞÜÐ*Ô+Ø‘
�Øˆd‹Gñ' ð( €Hó    r   c                 ó   ^^^^• SSK Jm  SmUUUU4S jm[         R                  " [        5         U R	                  5       n[        UT" S5      T5      mU S:  a  SnU * n OSnT" X5      nU(       a  U* nSSS5        U$ ! , (       d  f       W$ = f)	z6Asymptotically fast conversion of an 'int' to Decimal.r   )ÚDecimaléÈ   c                 ó|   >• UT::  a  T" U 5      $ US-	  nX-	  nU SU-  S-
  -  nT" XB5      T" X1U-
  5      TU   -  -   $ ©Nr   © )	Únr   Úw2r   r   ÚBITLIMÚDÚinnerÚw2pows	        €€€€r   r'   Úint_to_decimal.<locals>.innery   sV   ø€ Ø�‹;Ù�Q“4ˆKØ�!‰VˆØ‰WˆØ�1˜‘7˜a‘-Ñ ˆÙ�R‹}™u R¨R©Ó0°5¸±9Ñ<Ñ<Ð<r   é   TFN)Údecimalr   ÚlocalcontextÚ_unbounded_dec_contextÚ
bit_lengthr   )r#   ÚnbitsÚnegateÚresultr%   r&   r'   r(   s       @@@@r   Úint_to_decimalr2   g   sŒ   û€ õ %Ø€F÷=ð =ô 
×	Ò	Ô4Õ	5Ø—‘“ˆÜ˜u¡a¨£d¨FÓ3ˆØˆq‹5ØˆFØ�‰AàˆFÙ�q“ˆÞØ�WˆF÷ 
6ð €M÷ 
6Ô	5ð €Mús   °AA>Á>
Bc                 óp  ^^^• U R                  5       nUS:”  a  [        b  [        [        U 5      5      $ SmUUU4S jm[	        US-  S-   5      n[        UST5      mTR                  5        H  u  p#X2-  TU'   M     U S:  a  U * n SnOS	nT" X5      nUS   S
:X  a  U (       a  UR                  S
5      nXE-   $ )z?Asymptotically fast conversion of an 'int' to a decimal string.iÐÝ iè  c                 ó˜   >• UT::  a  [        U 5      $ US-	  n[        U TU   5      u  p4T" X1U-
  5      T" XB5      R                  U5      -   $ r!   )ÚstrÚdivmodÚzfill)r#   r   r$   r   r   ÚDIGLIMr'   Úpow10s        €€€r   r'   Ú$int_to_decimal_string.<locals>.inner�   sQ   ø€ Ø�‹;Ü�q“6ˆMØ�!‰VˆÜ˜˜5 ™9Ó%‰ˆÙ�R˜R™Ó ¡5¨£=×#6Ñ#6°rÓ#:Ñ:Ð:r   gÿyŸPDÓ?r   é   r   Ú-Ú Ú0)r.   Ú_decimalr5   r2   Úintr   ÚitemsÚlstrip)	r#   r   ÚkÚvÚsignÚsr8   r'   r9   s	         @@@r   Úint_to_decimal_stringrG   Ž   s¾   ú€ à	�‰‹€AØˆ7ƒ{”xÑ+ô ”> !Ó$Ó%Ð%ð €F÷;ô 	ˆAÐ"Ñ" QÑ&Ó'€AÜ˜1˜a Ó(€EØ—‘–‰ˆØ‘6ˆˆa‹ñ àˆ1ƒuØˆBˆØ‰àˆÙˆa‹€AØˆ�tˆsƒ{–qð �H‰H�S‹MˆØ‰8€Or   c                 óp   ^ ^^^• SmUUU U4S jm[        [        T 5      ST5      mT" S[        T 5      5      $ )z6Asymptotically fast conversion of a 'str' to an 'int'.i   c                 ó~   >• X-
  T::  a  [        TX 5      $ X-   S-   S-	  nT" X!5      T" X5      TX-
     -  X-
  -  -   $ r!   )r@   )ÚaÚbÚmidr8   r'   rF   Úw5pows      €€€€r   r'   Ú _str_to_int_inner.<locals>.innerÊ   sW   ø€ Ø‰5�F‹?Ü�q˜�v“;ÐØ‰u�q‰y˜QÑˆÙ�c“Ù˜!“M E¨!©'¡NÑ2Ø™ñ!ñ"ð 	#r   r;   r   )r   Úlen)rF   r8   r'   rM   s   `@@@r   Ú_str_to_int_innerrP   »   s9   û€ ð €F÷#ð #ô œ3˜q›6 1 fÓ-€EÙ�”C˜“FÓÐr   c                 óX   • U R                  5       R                  SS5      n [        U 5      $ )zkAsymptotically fast version of PyLong_FromString(), conversion
of a string of decimal digits into an 'int'.Ú_r=   )ÚrstripÚreplacerP   )rF   s    r   Úint_from_stringrU   Ö   s'   € ð 	
�‰‹
×Ñ˜3 Ó#€AÜ˜QÓÐr   c                 ó¼   • [         R                  " SU 5      nU(       d  [        S5      e[        UR	                  S5      5      nUR	                  S5      S:X  a  U* nU$ )zBAsymptotically fast version of decimal string to 'int' conversion.z\s*([+-]?)([0-9_]+)\s*z&invalid literal for int() with base 10r*   r   r<   )ÚreÚmatchÚ
ValueErrorrU   Úgroup)rF   ÚmrD   s      r   Ú
str_to_intr\   à   sR   € ô 	�ŠÐ*¨AÓ.€AÞÜÐAÓBÐBÜ˜Ÿ™ ›
Ó#€AØ‡w�wˆqƒz�SÓØˆBˆØ€Hr   i   c                 ó(  • U R                  5       U-
  [        ::  a  [        X5      $ US-  nU(       a  U S-  n US-  nUS-  nUS-	  nSU-  S-
  nX-	  X-  pv[        X-	  X-	  U-  XXt5      u  p‰[        X�U-  XXt5      u  p©U(       a  U	S-  n	X„-  U
-  U	4$ )a2  Divide a 2n-bit nonnegative integer a by an n-bit positive integer
b, using a recursive divide-and-conquer algorithm.

Inputs:
  n is a positive integer
  b is a positive integer with exactly n bits
  a is a nonnegative integer such that a < 2**n * b

Output:
  (q, r) such that a = b*q+r and 0 <= r < b.

r   )r.   Ú
_DIV_LIMITr6   Ú_div3n2n)rJ   rK   r#   ÚpadÚhalf_nÚmaskÚb1Úb2Úq1ÚrÚq2s              r   Ú_div2n1nrh   ô   s·   € ð 	‡|�|ƒ~˜ÑœZÓ'Ü�a‹|ÐØ
ˆa‰%€CÞ
Ø	ˆa‰ˆØ	ˆa‰ˆØ	ˆQ‰ˆØ�!‰V€FØ�‰K˜1Ñ€DØ‰[˜!™(ˆÜ�Q‘V˜a™k¨TÑ1°1¸"ÓE�E€BÜ�Q˜D™ !¨Ó4�E€BÞ
Ø	ˆa‰ˆØ‰<˜"Ñ˜aÐÐr   c                 óž   • X-	  U:X  a  SU-  S-
  XU-  -
  U-   pvO[        XU5      u  pgXu-  U-  Xd-  -
  nUS:  a  US-  nXr-  nUS:  a  M  Xg4$ )zAHelper function for _div2n1n; not intended to be called directly.r   r   )rh   )Úa12Úa3rK   rc   rd   r#   Úqrf   s           r   r_   r_     sn   € à
�x�2ƒ~Ø�Q‘˜!‰|˜S¨!¡G™_¨rÑ1‰1ä˜ Ó#‰ˆØ	
‰�"‰˜™Ñ€AØ
ˆa‹%Ø	ˆQ‰ˆØ	‰ˆð ˆa�%ð ˆ4€Kr   c                 óŠ   ^^^• S/U R                  5       T-   S-
  T-  -  mUUU4S jmU (       a  T" U S[        T5      5        T$ )a2  Decompose non-negative int a into base 2**n

Input:
  a is a non-negative integer

Output:
  List of the digits of a in base 2**n in little-endian order,
  meaning the most significant digit is last. The most
  significant digit is guaranteed to be non-zero.
  If a is 0 then the output is an empty list.

r   r   c                 óz   >• US-   U:X  a  U TU'   g X-   S-	  nX1-
  T	-  nX-	  nXU-  -  nT" XaU5        T" XSU5        g r!   r"   )
ÚxÚLÚRrL   ÚshiftÚupperÚlowerÚa_digitsr'   r#   s
          €€€r   r'   Ú_int2digits.<locals>.inner.  sW   ø€ Øˆq‰5�A‹:ØˆH�Q‰KØØ‰u˜‰lˆØ‘˜A‘ˆØ‘
ˆØ˜e‘^Ñ$ˆÙˆe˜ÔÙˆe˜!Õr   )r.   rO   )rJ   r#   ru   r'   s    `@@r   Ú_int2digitsrw     sE   ú€ ð ˆs�q—|‘|“~¨Ñ)¨AÑ-°!Ñ3Ñ4€H÷	ö 	Ùˆa�”C˜“MÔ"Ø€Or   c                 óN   ^ ^^• U UU4S jmT (       a  T" S[        T 5      5      $ S$ )zxCombine base-2**n digits into an int. This function is the
inverse of `_int2digits`. For more details, see _int2digits.
c                 ód   >• U S-   U:X  a  TU    $ X-   S-	  nX -
  T-  nT" X!5      U-  T" X5      -   $ r!   r"   )rp   rq   rL   rr   Údigitsr'   r#   s       €€€r   r'   Ú_digits2int.<locals>.innerC  sF   ø€ Øˆq‰5�A‹:Ø˜!‘9ÐØ‰u˜‰lˆØ‘˜A‘ˆÙ�c“ Ñ&©%°«-Ñ7Ð7r   r   )rO   )rz   r#   r'   s   ``@r   Ú_digits2intr|   >  s"   ú€ ÷
8ö %+‰5�”C˜“KÓ Ð1°Ð1r   c                 óè   • UR                  5       n[        X5      nSn/ n[        U5       H'  n[        XB-  U-   X5      u  ptUR	                  U5        M)     UR                  5         [        XR5      nX„4$ )zWDivide a non-negative integer a by a positive integer b, giving
quotient and remainder.r   )r.   rw   Úreversedrh   ÚappendÚreverser|   )	rJ   rK   r#   ru   rf   Úq_digitsÚa_digitÚq_digitrl   s	            r   Ú_divmod_posr„   M  sr   € ð 	
�‰‹€AÜ˜1Ó €Hà	€AØ€HÜ˜HÖ%ˆÜ˜q™v¨Ñ0°!Ó7‰
ˆØ�‰˜Ö ñ &ð ×ÑÔÜ�HÓ €AØˆ4€Kr   c                 óž   • US:X  a  [         eUS:  a  [        U * U* 5      u  p#X#* 4$ U S:  a  [        U ) U5      u  p#U) X) -   4$ [        X5      $ )zyAsymptotically fast replacement for divmod, for 'int'.
Its time complexity is O(n**1.58), where n = #bits(a) + #bits(b).
r   )ÚZeroDivisionErrorÚ
int_divmodr„   )rJ   rK   rl   rf   s       r   r‡   r‡   ^  se   € ð 	ˆAƒvÜÐØ	
ˆQ‹Ü˜1˜"˜q˜bÓ!‰ˆØ�"ˆuˆØ	
ˆQ‹Ü˜1˜"˜aÓ ‰ˆØˆr�1�r‘6ˆzÐä˜1Ó Ð r   )F)Ú__doc__rW   r+   r?   ÚImportErrorr   Ú
getcontextÚcopyr-   ÚMAX_PRECÚprecÚMAX_EMAXÚEmaxÚMIN_EMINÚEminÚtrapsÚInexactr2   rG   rP   rU   r\   r^   rh   r_   rw   r|   r„   r‡   r"   r   r   Ú<module>r”      sÔ   ðñ>ó 
Û ðÛôB,ð\ !×+Ò+Ó-×2Ñ2Ó4Ð Ø%×.Ñ.Ð Ô Ø%×.Ñ.Ð Ô Ø%×.Ñ.Ð Ô Ø01Ð × Ñ ˜WŸ_™_Ñ -ò%òN+òZò6 ò	ð" €
ò ò<
òò>2òó"!øðW
 ó Ø‚Hðús   ŒB$ Â$B/Â.B/