§
    qŠtjÑ3  ã            
       ó,  — d dl Z d dlmZ d dlZ	 d dlZn# e$ r d dlZY nw xY wd dlmZ	 d dl
Z
d dlmZmZmZ 	 d dlmZ dZn# e$ r dZY nw xY wddlmZmZmZmZmZmZmZmZmZmZmZ 	 d d	lmZ n!# e$ r 	 d d	lmZ n# e$ r d
„ ZY nw xY wY nw xY wdZ e
j!         "                    dd„  e#e dd…         e dd…         ¦  «        D ¦   «         ¦  «        d„ ¦   «         Z$e
j!         "                    dg d¢¦  «        d„ ¦   «         Z%e
j!        j&        e
j!         "                    de¦  «        d„ ¦   «         ¦   «         Z'd„ Z(d„ Z)d„ Z*d„ Z+ G d„ dej,        ¦  «        Z-e	j.        d„ ¦   «         Z/e	j.        d„ ¦   «         Z0e	j.        d„ ¦   «         Z1e	j.        d„ ¦   «         Z2e	j.        d„ ¦   «         Z3i Z4erej5        ej6        ge4d <   d!e4d"<   d#ej7        v rd$e4d%<    e8e4¦  «        Z9d#ej7        v rde9d%<   nd$e9d%<    G d&„ d'ej,        ¦  «        Z: G d(„ d)ej,        ¦  «        Z;dS )*é    N)Úreduce)ÚgivenÚsettingsÚexample)ÚHealthCheckTFé   )ÚSquareRootErrorÚJacobiErrorÚfactorizationÚgcdÚlcmÚjacobiÚinverse_modÚis_primeÚ
next_primeÚsmallprimesÚsquare_root_mod_prime)Úmpzc                 ó   — | S ©N© ©Úxs    úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/ecdsa/test_numbertheory.pyr   r   (   s   € ØˆHó    )i÷@ iA i)A i/A iEA iSA iYA i]A i�A i­A i·A iËA iãA iíA iûA iB iB iB i+B i/B zprime, next_pc                 ó   — g | ]	\  }}||f‘Œ
S r   r   )Ú.0ÚpÚqs      r   ú
<listcomp>r    E   s    € ÐLÐLÐL¡  A�q˜!�fÐLÐLÐLr   éÿÿÿÿc                 ó0   — t          | ¦  «        |k    sJ ‚d S r   ©r   )ÚprimeÚnext_ps     r   Útest_next_primer&   D   s#   € õ �eÑÔ Ò&Ð&Ð&Ð&Ð&Ð&r   Úval)r!   r   r   c                 ó0   — t          | ¦  «        dk    sJ ‚d S ©Né   r#   )r'   s    r   Ú test_next_prime_with_nums_less_2r+   K   s   € å�c‰?Œ?˜aÒÐÐÐÐÐr   r$   c                 ó|  — t          ¦   «         }t          dd| dz  z   ¦  «        D ]=}||z  | z  }|                     |¦  «         t          || ¦  «        }||z  | z  |k    sJ ‚Œ>t          d| ¦  «        D ]H}||v rŒt	          j        t          ¦  «        5  t          || ¦  «         d d d ¦  «         n# 1 swxY w Y   ŒId S )Nr   r   r*   )ÚsetÚrangeÚaddr   ÚpytestÚraisesr	   )r$   ÚsquaresÚnumÚsqÚrootÚ	nonsquares         r   Ú+test_square_root_mod_prime_for_small_primesr7   P   s  € õ ‰eŒe€GÝ�Q˜˜E Q™J™Ñ'Ô'ð )ð )ˆØ�3‰Y˜ÑˆØ�Š�B‰ŒˆÝ$ R¨Ñ/Ô/ˆà�d‰{˜UÑ" bÒ(Ð(Ð(Ð(Ð(å˜1˜e‘_”_ð 4ð 4ˆ	Ø˜ÐÐØÝŒ]�?Ñ+Ô+ð 	4ð 	4Ý! )¨UÑ3Ô3Ð3ð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4øð4ð 4s   ÂB0Â0B4	Â7B4	c                  ó6   — t          dd¦  «        } | dk    sJ ‚d S )Nr   r*   ©r   )Úas    r   Ú test_square_root_mod_prime_for_2r;   b   s"   € Ý˜a Ñ#Ô#€AØ�Š6ˆ6ˆ6ˆ6ˆ6ˆ6r   c                  óB   — t          dd¦  «        } | | z  dz  dk    sJ ‚d S )Né	   ée   r9   )r5   s    r   Ú*test_square_root_mod_prime_for_small_primer?   g   s1   € Ý  ¨cÑ2Ô2€DØ�$‰;˜Ñ Ò!Ð!Ð!Ð!Ð!Ð!r   c                  ó\   — d} | dz  dk    sJ ‚t          d| ¦  «        }||z  | z  dk    sJ ‚d S )Né   é   é   é   r9   ©r   r5   s     r   Ú,test_square_root_mod_prime_for_p_congruent_5rF   l   óF   € Ø
€AØˆq‰5�AŠ:ˆ:ˆ:ˆ:å   AÑ&Ô&€DØ�$‰;˜‰?˜aÒÐÐÐÐÐr   c                  ó\   — d} | dz  dk    sJ ‚t          d| ¦  «        }||z  | z  dk    sJ ‚d S )Né   rB   rC   é   r9   rE   s     r   Ú4test_square_root_mod_prime_for_p_congruent_5_large_drK   t   rG   r   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestSquareRootModPrimec                 óŒ   — |                       t          ¦  «        5  t          dd¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Né   é    )ÚassertRaisesr
   r   ©Úselfs    r   Útest_power_of_2_pz(TestSquareRootModPrime.test_power_of_2_p}   sŠ   € Ø×Ò�{Ñ+Ô+ð 	*ð 	*Ý! " bÑ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   ›9¹=Á =c                 óÚ   — |                       t          ¦  «        5 }t          dd¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt	          |j        ¦  «        ¦  «         d S )NrO   é   zno square root©rQ   r	   r   ÚassertInÚstrÚ	exception©rS   Úes     r   Útest_no_squarez%TestSquareRootModPrime.test_no_square�   óŸ   € Ø×Ò�Ñ/Ô/ð 	*°1Ý! " bÑ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	�ŠÐ&­¨A¬KÑ(8Ô(8Ñ9Ô9Ð9Ð9Ð9ó   ›8¸<¿<c                 óÚ   — |                       t          ¦  «        5 }t          dd¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt	          |j        ¦  «        ¦  «         d S )NrO   é!   úp is not primerW   r[   s     r   Útest_non_primez%TestSquareRootModPrime.test_non_prime‡   r^   r_   c                 óÚ   — |                       t          ¦  «        5 }t          dd¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt	          |j        ¦  «        ¦  «         d S )Ni¸  i¹  rb   rW   r[   s     r   Útest_non_prime_with_negativez3TestSquareRootModPrime.test_non_prime_with_negative�   sŸ   € Ø×Ò�Ñ/Ô/ð 	0°1Ý! '¨3Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	�ŠÐ&­¨A¬KÑ(8Ô(8Ñ9Ô9Ð9Ð9Ð9r_   N)Ú__name__Ú
__module__Ú__qualname__rT   r]   rc   re   r   r   r   rM   rM   |   sP   € € € € € ð*ð *ð *ð:ð :ð :ð:ð :ð :ð:ð :ð :ð :ð :r   rM   c                 óÀ   ‡—  | t          j        dddz  ¬¦  «        ¦  «        Š | t          j        d‰dz
  ¬¦  «                             ˆfd„¦  «        ¦  «        }|‰fS )Nr*   é   ©Ú	min_valueÚ	max_valuer   c                 ó,   •— t          | ‰¦  «        dk    S ©Nr   ©r   )r   Úmods    €r   ú<lambda>z'st_two_nums_rel_prime.<locals>.<lambda>›   s   ø€ •c˜!˜S‘k”k QÒ&€ r   )ÚstÚintegersÚfilter)Údrawr3   rq   s     @r   Úst_two_nums_rel_primerw   ”   su   ø€ ð ˆ$�rŒ{ Q°!°T±'Ð:Ñ:Ô:Ñ
;Ô
;€CØ
ˆ$Ý
Œ˜a¨3°©7Ð3Ñ3Ô3×:Ò:Ø&Ð&Ð&Ð&ñ	
ô 	
ñô €Cð
 �ˆ8€Or   c                 ó°   — d|vrd|d<    | t          j        t          ¦  «        t          j        |i |¤Ž                     t
          ¦  «        z  ¦  «        }|S )Nrl   r   )rs   Úsampled_fromr   rt   ru   r   )rv   ÚargsÚkwargsr$   s       r   Ú	st_primesr|   ¡   sa   € à˜&Ð Ð Øˆˆ{ÑØˆDÝ
Œ�Ñ$Ô$Ý
Œ+�tÐ
&˜vÐ
&Ð
&×
-Ò
-­hÑ
7Ô
7ñ	8ñô €Eð €Lr   c                 óœ   —  | t          ddz  ¬¦  «        ¦  «        } | t          j        dd|dz  z   ¬¦  «        ¦  «        }||z  |z  }||fS )Nr*   rj   ©rm   r   r   rk   )r|   rs   rt   )rv   r$   r3   r4   s       r   Úst_num_square_primer   ¬   s^   € àˆD• Q¨¡WÐ-Ñ-Ô-Ñ.Ô.€EØ
ˆ$�rŒ{ Q°!°e¸q±j±.ÐAÑAÔAÑ
BÔ
B€CØ	ˆs‰�UÑ	€BØˆuˆ9Ðr   c                 óˆ  ‡‡—  | t          j        t          ddz  ¬¦  «        dd¬¦  «        ¦  «        Š | t          j        t          j        ‰¦  «        dd¬¦  «        ¦  «        }t	          t
          j        |d¦  «        Š | t          j        dd¬¦  «                             ˆfd	„¦  «        ¦  «        }ˆfd
„|D ¦   «         S )zM
    Strategy that returns lists of numbers, all having a common factor.
    r*   é   r~   r   é
   ©Úmin_sizeÚmax_sizeé   rk   c                 ó~   •— t          j        t          j        t          j        ‰¦  «        d¬¦  «        d| ¬¦  «        S ©Né   )r…   r   rƒ   ©rs   Úlistsry   )ÚnÚprimess    €r   rr   z&st_comp_with_com_fac.<locals>.<lambda>Ç   s:   ø€ •b”hÝ”�œ¨Ñ0Ô0¸2Ð>Ñ>Ô>ØØðñ ô € r   c                 óL   •— g | ] }t          t          j        |d ¦  «        ‰z  ‘Œ!S ©r   ©r   ÚoperatorÚmul)r   ÚnumsÚcom_facs     €r   r    z(st_comp_with_com_fac.<locals>.<listcomp>Ï   s,   ø€ ÐLÐLÐL¸�F•8”<  qÑ)Ô)¨GÑ3ÐLÐLÐLr   )	rs   r‹   r|   ry   r   r‘   r’   rt   Úflatmap)rv   Úcom_fac_primesÚcomp_primesr”   r�   s      @@r   Úst_comp_with_com_facr˜   ´   sæ   øø€ ð
 ˆTÝ
Œ• Q¨¡VÐ,Ñ,Ô,°qÀ2ÐFÑFÔFñô €Fð �TÝ
Œ•” Ñ(Ô(°1¸rÐBÑBÔBñô €Nõ •X”\ >°1Ñ5Ô5€Gð
 �$Ý
Œ˜a¨2Ð.Ñ.Ô.×6Ò6ðð ð ð ñ	
ô 	
ñô €Kð MÐLÐLÐLÀÐLÑLÔLÐLr   c           	      ó\  ‡‡—  | t          j        t          ddz  ¬¦  «        ddd¬¦  «        ¦  «        } | t          j        t          j        |¦  «        dt	          |¦  «        dz
  d¬¦  «        ¦  «        Št          t          j        ‰d¦  «        }ˆfd„|D ¦   «         Š‰sJ ‚‰sJ ‚ | t          j        dd	¬
¦  «         	                    ˆfd„¦  «        ¦  «        }d„ |D ¦   «         } | t          j        dt	          |¦  «        ¬
¦  «        ¦  «        }| 
                    ||¦  «         |S )zQ
    Strategy that returns lists of numbers that don't have a common factor.
    r*   r�   r~   r‚   T)r„   r…   Úuniquer   c                 ó   •— g | ]}|‰v¯|‘Œ	S r   r   )r   ÚiÚuncom_fac_primess     €r   r    z&st_comp_no_com_fac.<locals>.<listcomp>é   s$   ø€ ÐFÐFÐF˜Q¨AÐ5EÐ,EÐ,E�qÐ,EÐ,EÐ,Er   r†   rk   c                 ó~   •— t          j        t          j        t          j        ‰¦  «        d¬¦  «        d| ¬¦  «        S rˆ   rŠ   )rŒ   Úleftover_primess    €r   rr   z$st_comp_no_com_fac.<locals>.<lambda>ò   s:   ø€ •b”hÝ”�œ¨Ñ9Ô9ÀBÐGÑGÔGØØðñ ô € r   c                 óD   — g | ]}t          t          j        |d ¦  «        ‘ŒS r�   r�   )r   r“   s     r   r    z&st_comp_no_com_fac.<locals>.<listcomp>ú   s&   € ÐGÐGÐG°�v•h”l D¨!Ñ,Ô,ÐGÐGÐGr   r   )rs   r‹   r|   ry   Úlenr   r‘   r’   rt   r•   Úinsert)rv   r�   Ú	uncom_facÚnumber_primesÚnumbersÚ	insert_atrŸ   r�   s         @@r   Úst_comp_no_com_facr§   Ò   sp  øø€ ð
 ˆTÝ
ŒÝ  3¡Ð'Ñ'Ô'°!¸bÈð	
ñ 	
ô 	
ñô €Fð �tÝ
ŒÝŒO˜FÑ#Ô#ØÝ˜‘[”[ 1‘_Øð		
ñ 	
ô 	
ñô Ðõ •x”|Ð%5°qÑ9Ô9€Ið GÐFÐFÐF &ÐFÑFÔF€OàÐÐˆ?ØÐÐÐð �DÝ
Œ˜a¨2Ð.Ñ.Ô.×6Ò6ðð ð ð ñ	
ô 	
ñô €Mð HÐG¸ÐGÑGÔG€Gà�•R”[¨1½¸G¹¼ÐEÑEÔEÑFÔF€IØ‡N‚N�9˜iÑ(Ô(Ð(Ø€Nr   Úsuppress_health_checkiˆ  Údeadlinez--fastr†   Úmax_examplesc                   óP   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZdS )ÚTestIsPrimec                 ó(   — t          d¦  «        sJ ‚d S )Né   ©r   rR   s    r   Útest_very_small_primez!TestIsPrime.test_very_small_prime  s   € Ý˜‰|Œ|ÐÐˆ|ÐÐr   c                 ó(   — t          d¦  «        rJ ‚d S )Né   r¯   rR   s    r   Útest_very_small_compositez%TestIsPrime.test_very_small_composite  s   € Ý˜B‘<”<ÐÐÐÐÐr   c                 ó(   — t          d¦  «        sJ ‚d S )NiÍ[r¯   rR   s    r   Útest_small_primezTestIsPrime.test_small_prime  s   € Ý˜	Ñ"Ô"Ð"Ð"Ð"Ð"Ð"r   c                 ó(   — t          d¦  «        rJ ‚d S )Ni(  r¯   rR   s    r   Útest_special_compositez"TestIsPrime.test_special_composite  s   € Ý˜E‘?”?Ð"Ð"Ð"Ð"Ð"r   c                 ó4   — t          ddz  dz   ¦  «        sJ ‚d S )Nr*   é   i)  r¯   rR   s    r   Útest_medium_prime_1zTestIsPrime.test_medium_prime_1"  ó$   € å˜˜3™ ™Ñ'Ô'Ð'Ð'Ð'Ð'Ð'r   c                 ó4   — t          ddz  dz   ¦  «        sJ ‚d S )Nr*   r¹   i-  r¯   rR   s    r   Útest_medium_prime_2zTestIsPrime.test_medium_prime_2&  r»   r   c                 ó4   — t          ddz  dz   ¦  «        rJ ‚d S )Nr*   r¹   i0  r¯   rR   s    r   Útest_medium_trivial_compositez)TestIsPrime.test_medium_trivial_composite*  ó$   € Ý˜A˜s™F U™NÑ+Ô+Ð+Ð+Ð+Ð+Ð+r   c                 ó4   — t          ddz  dz   ¦  «        rJ ‚d S )Nr*   r¹   i/  r¯   rR   s    r   Ú!test_medium_non_trivial_compositez-TestIsPrime.test_medium_non_trivial_composite-  rÀ   r   c                 óN   — t          t          d¦  «        dz  dz   ¦  «        sJ ‚d S )Nr*   i   iÕ  )r   r   rR   s    r   Útest_large_primezTestIsPrime.test_large_prime0  s+   € å�˜A™œ $™¨Ñ.Ñ/Ô/Ð/Ð/Ð/Ð/Ð/r   c                 ó(   — t          d¦  «        rJ ‚d S )Nl   Å*i:.S#q.m±& r¯   rR   s    r   Útest_pseudoprime_base_19z$TestIsPrime.test_pseudoprime_base_194  s   € ÝÐ>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?r   c                 óö   — t          d                     dd¦  «        ¦  «        }t          |¦  «        sJ ‚t          d¦  «        D ],}t          |d|dz
  z  dz   z  d|dz
  z  dz   z  ¦  «        s d S Œ-J d	¦   «         ‚)
Nz®29 674 495 668 685 510 550 154 174 642 905 332 730 771 991 799 853 043 350 995 075 531 276 838 753 171 770 199 594 238 596 428 121 188 033 664 754 218 345 562 493 168 782 883ú Ú r‚   i9  r   ia  Fzcomposite not detected)ÚintÚreplacer   r.   )rS   r   Ú_s      r   Útest_pseudoprime_base_300z%TestIsPrime.test_pseudoprime_base_3007  s¡   € õ ð"÷ #*¢'¨#¨rÑ"2Ô"2ñ	
ô 
ˆõ ˜‰{Œ{ÐÐˆ{Ý�r‘”ð 	3ð 	3ˆAÝ˜A ¨¨A©¡°Ñ!2Ñ3°s¸aÀ!¹e±}ÀqÑ7HÑIÑJÔJð Ø��ðð 3Ð2Ñ2Ô2�5r   N)rf   rg   rh   r°   r³   rµ   r·   rº   r½   r¿   rÂ   rÄ   rÆ   rÍ   r   r   r   r¬   r¬     s¼   € € € € € ðð ð ð ð  ð  ð#ð #ð #ð#ð #ð #ð(ð (ð (ð(ð (ð (ð,ð ,ð ,ð,ð ,ð ,ð0ð 0ð 0ð@ð @ð @ð3ð 3ð 3ð 3ð 3r   r¬   c            
       óÎ  — e Zd Zd„ Z ej        ed¦  «         ed!i e¤Ž e	ddg¦  «         e
 e¦   «         ¦  «        d„ ¦   «         ¦   «         ¦   «         ¦   «         Z ej        ed¦  «         ed!i e¤Ž e	g d¢¦  «         e
 e¦   «         ¦  «        d„ ¦   «         ¦   «         ¦   «         ¦   «         Z ed!i e¤Ž e
 ej         ej        dd	d
z  ¬¦  «        dd¬¦  «        ¦  «        d„ ¦   «         ¦   «         Zd„ Z ed!i e¤Ž e
 ej         ej        dd	d
z  ¬¦  «        dd¬¦  «        ¦  «        d„ ¦   «         ¦   «         Z ej        ed¦  «         ed!i e¤Ž e
 e¦   «         ¦  «        d„ ¦   «         ¦   «         ¦   «         Zej        j         ed!i e¤Ž e
 ej        dd¬¦  «        ¦  «         e	d¦  «         e	d¦  «        d„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Zd„ Zd„ Zd„ Zd„ Z ed!i e¤Ž e
 ej        dd¬¦  «                             d„ ¦  «        ¦  «        d„ ¦   «         ¦   «         Z  ed!i e¤Ž e
 e!¦   «         ¦  «        d„ ¦   «         ¦   «         Z"d„ Z#d S )"ÚTestNumbertheoryc                 óŒ   — t          ddd¦  «        dk    sJ ‚t          g d¢¦  «        dk    sJ ‚t          d¦  «        dk    sJ ‚d S )Néi   é¥   éÃ   é   )rÑ   rÒ   rÓ   rD   rp   rR   s    r   Útest_gcdzTestNumbertheory.test_gcdM  sV   € Ý�9˜j¨*Ñ5Ô5¸Ò>Ð>Ð>Ð>ÝÐ6Ð6Ð6Ñ7Ô7¸5Ò@Ð@Ð@Ð@Ý�1‰vŒv˜Š{ˆ{ˆ{ˆ{ˆ{ˆ{r   zwHypothesis 2.0.0 can't be made tolerant of hard to meet requirements (like `is_prime()`), the test case times-out on itig i�€ c                 ó\   — t          |¦  «        }d|v s|dk    sJ ‚|D ]}||z  dk    sJ ‚Œd S ©Nr   r   rp   ©rS   r¥   rŒ   rœ   s       r   Útest_gcd_with_com_factorz)TestNumbertheory.test_gcd_with_com_factorR  sQ   € õ �‰LŒLˆØ�Gˆ|ˆ|˜q Ašv˜v˜vÐ%Øð 	ð 	ˆAØ�q‘5˜A’:�:�:�:�:ð	ð 	r   )i  i-  iñ  c                 ó4   — t          |¦  «        }|dk    sJ ‚d S ro   rp   )rS   r¥   rŒ   s      r   Útest_gcd_with_uncom_factorz+TestNumbertheory.test_gcd_with_uncom_factora  s    € õ �‰LŒLˆØ�AŠvˆvˆvˆvˆvˆvr   r   r*   i    rk   r†   rƒ   c                 óD   — t          |¦  «        }|D ]}||z  dk    sJ ‚Œd S ©Nr   rp   rØ   s       r   Útest_gcd_with_random_numbersz-TestNumbertheory.test_gcd_with_random_numbersn  s;   € õ �‰LŒLˆØð 	ð 	ˆAà�q‘5˜A’:�:�:�:�:ð	ð 	r   c                 óŒ   — t          ddd¦  «        dk    sJ ‚t          g d¢¦  «        dk    sJ ‚t          d¦  «        dk    sJ ‚d S )NrD   rÔ   é   rÑ   )rD   rÔ   rà   ©r   rR   s    r   Útest_lcmzTestNumbertheory.test_lcm|  sV   € Ý�1�e˜UÑ#Ô# yÒ0Ð0Ð0Ð0ÝÐ$Ð$Ð$Ñ%Ô%¨Ò2Ð2Ð2Ð2Ý�1‰vŒv˜Š{ˆ{ˆ{ˆ{ˆ{ˆ{r   c                 óD   — t          |¦  «        }|D ]}||z  dk    sJ ‚Œd S rÝ   rá   rØ   s       r   Útest_lcm_with_random_numbersz-TestNumbertheory.test_lcm_with_random_numbers�  s;   € õ �‰LŒLˆØð 	ð 	ˆAØ�q‘5˜A’:�:�:�:�:ð	ð 	r   c                 óL   — |\  }}t          ||¦  «        }||z  |z  |k    sJ ‚d S r   r9   )rS   ÚvalsÚsquarer$   Úcalcs        r   Útest_square_root_mod_primez+TestNumbertheory.test_square_root_mod_primeŽ  s<   € ð ‰ˆ�å$ V¨UÑ3Ô3ˆØ�d‰{˜UÑ" fÒ,Ð,Ð,Ð,Ð,Ð,r   l    J)£l   §5yl   §1n
Y’c                 ój   — t          |¦  «        }d}|D ]}||d         |d         z  z  }Œ||k    sJ ‚d S r×   )r   )rS   r3   ÚfactorsÚmultrœ   s        r   Útest_factorizationz#TestNumbertheory.test_factorizationœ  sN   € õ   Ñ$Ô$ˆØˆØð 	!ð 	!ˆAØ�A�a”D˜A˜aœD‘LÑ ˆDˆDØ�sŠ{ˆ{ˆ{ˆ{ˆ{ˆ{r   c                 óš   — d}dt           v sJ ‚dt           v sJ ‚t          |¦  «        }d}|D ]}||d         |d         z  z  }Œ||k    sJ ‚d S )Ni£(  r>   ég   r   r   ©r   r   ©rS   Úexprë   rì   rœ   s        r   Útest_factorisation_smallprimesz/TestNumbertheory.test_factorisation_smallprimes¨  ss   € ØˆØ•kÐ!Ð!Ð!Ð!Ø•kÐ!Ð!Ð!Ð!Ý Ñ$Ô$ˆØˆØð 	!ð 	!ˆAØ�A�a”D˜A˜aœD‘LÑ ˆDˆDØ�sŠ{ˆ{ˆ{ˆ{ˆ{ˆ{r   c                 óš   — d}dt           vsJ ‚dt           vsJ ‚t          |¦  «        }d}|D ]}||d         |d         z  z  }Œ||k    sJ ‚d S )Ni;< iÏ  iÕ  r   r   rð   rñ   s        r   Ú"test_factorisation_not_smallprimesz3TestNumbertheory.test_factorisation_not_smallprimes²  ss   € ØˆØ�;Ð&Ð&Ð&Ð&Ø�;Ð&Ð&Ð&Ð&Ý Ñ$Ô$ˆØˆØð 	!ð 	!ˆAØ�A�a”D˜A˜aœD‘LÑ ˆDˆDØ�sŠ{ˆ{ˆ{ˆ{ˆ{ˆ{r   c                 ó2   — t          dd¦  «        dk    sJ ‚d S )Nr   rD   ©r   rR   s    r   Útest_jacobi_with_zeroz&TestNumbertheory.test_jacobi_with_zero¼  ó!   € Ý�a˜‰|Œ|˜qÒ Ð Ð Ð Ð Ð r   c                 ó2   — t          dd¦  «        dk    sJ ‚d S )Nr   rD   r÷   rR   s    r   Útest_jacobi_with_onez%TestNumbertheory.test_jacobi_with_one¿  rù   r   rD   iè  c                 ó   — | dz  S r)   r   r   s    r   rr   zTestNumbertheory.<lambda>Ã  s
   € ÀQÈÁU€ r   c                 óH  — t          |¦  «        }t          |¦  «        r¢t          ¦   «         }t          d|¦  «        D ]E}t          |¦  «        }t	          ||z  |¦  «        dk    sJ ‚|                     ||z  |z  ¦  «         ŒFt          d|¦  «        D ]+}||vr%t          |¦  «        }t	          ||¦  «        dk    sJ ‚Œ,d S t          |¦  «        }t          d|¦  «        D ]A}d}|D ]$}|t	          ||d         ¦  «        |d         z  z  }Œ%|t	          ||¦  «        k    sJ ‚ŒBd S )Nr   r!   r   )r   r   r-   r.   r   r/   r   )rS   rq   r2   r5   rœ   rë   r:   Úcs           r   Útest_jacobizTestNumbertheory.test_jacobiÂ  sW  € õ �#‰hŒhˆÝ�C‰=Œ=ð 	+Ý‘e”eˆGÝ˜a ™œð /ð /�Ý˜4‘y”y�Ý˜d T™k¨3Ñ/Ô/°1Ò4Ð4Ð4Ð4Ø—’˜D 4™K¨#Ñ-Ñ.Ô.Ð.Ð.Ý˜1˜c‘]”]ð 0ð 0�Ø˜GÐ#Ð#Ý˜A™œ�AÝ! ! S™>œ>¨RÒ/Ð/Ð/Ð/øð0ð 0õ
 $ CÑ(Ô(ˆGÝ˜1˜c‘]”]ð +ð +�Ø�Ø ð 1ð 1�AØ�  1 Q¤4™œ¨A¨a¬DÑ0Ñ0�A�AØ�F 1 c™NœNÒ*Ð*Ð*Ð*Ð*ð	+ð +r   c                 ón   — |\  }}t          ||¦  «        }d|cxk     r|k     sn J ‚||z  |z  dk    sJ ‚d S )Nr   r   ©r   )rS   r“   r3   rq   Úinvs        r   Útest_inverse_modz!TestNumbertheory.test_inverse_modØ  sV   € ð ‰ˆˆSå˜#˜sÑ#Ô#ˆà�3ˆ}ˆ}Š}ˆ}˜Š}ˆ}ˆ}ˆ}ˆ}ˆ}Ø�S‰y˜3‰ !Ò#Ð#Ð#Ð#Ð#Ð#r   c                 ó2   — dt          dd¦  «        k    sJ ‚d S )Nr   é   r  rR   s    r   Útest_inverse_mod_with_zeroz+TestNumbertheory.test_inverse_mod_with_zeroâ  s#   € Ø•K  2Ñ&Ô&Ò&Ð&Ð&Ð&Ð&Ð&r   Nr   )$rf   rg   rh   rÕ   ÚunittestÚ
skipUnlessÚ
HC_PRESENTr   ÚHYP_SLOW_SETTINGSr   r   r˜   rÙ   r§   rÛ   rs   r‹   rt   rÞ   râ   rä   r   ré   r0   ÚmarkÚslowrí   ró   rõ   rø   rû   ru   rÿ   rw   r  r  r   r   r   rÏ   rÏ   L  s<  € € € € € ðð ð ð
 €XÔØð	ñô ð €XÐ"Ð"Ð!Ð"Ð"Ø€Wˆj˜*Ð%Ñ&Ô&Ø
€UÐÐÑ!Ô!Ñ"Ô"ðð ñ #Ô"ñ 'Ô&ñ #Ô"ñô ðð €XÔØð	ñô ð €XÐ"Ð"Ð!Ð"Ð"Ø€WÐÐÐÑ Ô Ø
€UÐÐÑÔÑ Ô ðð ñ !Ô ñ !Ô ñ #Ô"ñô ðð €XÐ"Ð"Ð!Ð"Ð"Ø
€UØˆŒØˆBŒK !¨q°$©wÐ7Ñ7Ô7ØØð	
ñ 	
ô 	
ñô ðð ñô ñ #Ô"ððð ð ð
 €XÐ"Ð"Ð!Ð"Ð"Ø
€UØˆŒØˆBŒK !¨q°$©wÐ7Ñ7Ô7ØØð	
ñ 	
ô 	
ñô ðð ñô ñ #Ô"ðð
 €XÔØð	ñô ð €XÐ"Ð"Ð!Ð"Ð"Ø
€UÐÐÑ Ô Ñ!Ô!ð-ð -ñ "Ô!ñ #Ô"ñô ð-ð „[ÔØ€XÐ"Ð"Ð!Ð"Ð"Ø
€Uˆ;ˆ2Œ; ¨fÐ5Ñ5Ô5Ñ6Ô6Ø€WÐÑÔØ€WÐÑ Ô ðð ñ !Ô ñ Ôñ 7Ô6ñ #Ô"ñ Ôð
ðð ð ðð ð ð!ð !ð !ð!ð !ð !ð €XÐ"Ð"Ð!Ð"Ð"Ø
€Uˆ;ˆ2Œ; ¨dÐ3Ñ3Ô3×:Ò:¸?¸?ÑKÔKÑLÔLð+ð +ñ MÔLñ #Ô"ð+ð( €XÐ"Ð"Ð!Ð"Ð"Ø
€UÐ Ð Ñ"Ô"Ñ#Ô#ð$ð $ñ $Ô#ñ #Ô"ð$ð'ð 'ð 'ð 'ð 'r   rÏ   )<r‘   Ú	functoolsr   ÚsysÚ	unittest2r  ÚImportErrorÚhypothesis.strategiesÚ
strategiesrs   r0   Ú
hypothesisr   r   r   r   r	  Únumbertheoryr	   r
   r   r   r   r   r   r   r   r   r   Úgmpy2r   ÚgmpyÚ	BIGPRIMESr  ÚparametrizeÚzipr&   r+   r  r7   r;   r?   rF   rK   ÚTestCaserM   Ú	compositerw   r|   r   r˜   r§   ÚHYP_SETTINGSÚfilter_too_muchÚtoo_slowÚargvÚdictr
  r¬   rÏ   r   r   r   ú<module>r!     s®  ðØ €€€Ø Ð Ð Ð Ð Ð Ø 
€
€
€
ðØ Ð Ð Ð Ð øØð ð ð Ø€O€O€O€O€Oðøøøà "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /ðØ&Ð&Ð&Ð&Ð&Ð&à€J€JøØð ð ð Ø€J€J€Jðøøøðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðØÐÐÐÐÐÐøØð ð ð ðØÐÐÐÐÐÐøØð ð ð ð	ð 	ð 	ð 	ð 	ðøøøøøðøøøð€	ð0 „×ÒØÐLÐL¨¨¨Y°s¸°s¬^¸YÀqÀrÀr¼]Ñ)KÔ)KÐLÑLÔLñô ð'ð 'ñô ð'ð „×Ò˜ 
 
 
Ñ+Ô+ð ð  ñ ,Ô+ð ð „ÔØ„×Ò˜ +Ñ.Ô.ð4ð 4ñ /Ô.ñ Ôð4ð ð ð ð
"ð "ð "ð
 ð  ð  ð ð  ð  ð:ð :ð :ð :ð :˜XÔ.ñ :ô :ð :ð0 „ð	ð 	ñ „ð	ð „ðð ñ „ðð „ðð ñ „ðð „ðMð Mñ „ðMð: „ð+ð +ñ „ð+ð\ €Øð $àÔ#ØÔð-€LÐ(Ñ)ð
  $€L�ÑàˆsŒxÐÐØ#%€L�Ñ ð �D˜Ñ&Ô&Ð ØˆsŒxÐÐØ()Ð�nÑ%Ð%à(*Ð�nÑ%ð43ð 43ð 43ð 43ð 43�(Ô#ñ 43ô 43ð 43ðnW'ð W'ð W'ð W'ð W'�xÔ(ñ W'ô W'ð W'ð W'ð W'sS   � •	! !¹A ÁAÁAÁ*A1 Á1BÁ7A>Á=BÁ>B	ÂBÂB	Â	BÂB