
    [Ah3              	          S SK r S SKJr  S SKr S SKrS SKJr	  S SK
r
S SKJrJrJr   S SKJr  S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   S S	KJr  Sr \
RB                  RE                  S\#" \ SS \ SS 5       V Vs/ s H  u  pX4PM
     snn 5      S 5       r$\
RB                  RE                  S/ SQ5      S 5       r%\
RB                  RL                  \
RB                  RE                  S\5      S 5       5       r'S r(S r)S r*S r+ " S S\RX                  5      r-\	R\                  S 5       r/\	R\                  S 5       r0\	R\                  S 5       r1\	R\                  S 5       r2\	R\                  S 5       r30 r4\(       a   \Rj                  \Rl                  /\4S'   S \4S!'   S"\Rn                  ;   a  S#\4S$'   \8" \45      r9S"\Rn                  ;   a  S\9S$'   OS#\9S$'    " S% S&\RX                  5      r: " S' S(\RX                  5      r;g! \ a    S SKr GNf = f! \ a    Sr GNf = f! \ a     S S	KJr   GN! \ a    S
 r  GNf = ff = fs  snn f ))    N)reduce)givensettingsexample)HealthCheckTF   )SquareRootErrorJacobiErrorfactorizationgcdlcmjacobiinverse_modis_prime
next_primesmallprimessquare_root_mod_prime)mpzc                     U $ N xs    ^C:\Users\julio\Documents\inmobiliaria_backend\env\Lib\site-packages\ecdsa/test_numbertheory.pyr   r   (   s    H    )i@ iA i)A i/A iEA iSA iYA i]A iA iA iA iA iA iA iA iB iB iB i+B i/B zprime, next_pc                 &    [        U 5      U:X  d   eg r   r   )primenext_ps     r   test_next_primer!   D   s     e&&&r   val)r   r   r   c                 &    [        U 5      S:X  d   eg N   r   )r"   s    r    test_next_prime_with_nums_less_2r&   K   s    c?ar   r   c                 ^   [        5       n[        SSU S-  -   5       H3  nX"-  U -  nUR                  U5        [        X05      nXD-  U -  U:X  a  M3   e   [        SU 5       H8  nXQ;   a  M
  [        R
                  " [        5         [        XP5        S S S 5        M:     g ! , (       d  f       ML  = f)Nr   r   r%   )setrangeaddr   pytestraisesr	   )r   squaresnumsqroot	nonsquares         r   +test_square_root_mod_prime_for_small_primesr2   P   s     eGQEQJ'YB$R/{U"b((( ( 1e_	]]?+!)3 ,+ % ,+s   B
B,	c                  ,    [        SS5      n U S:X  d   eg )Nr   r%   r   )as    r    test_square_root_mod_prime_for_2r6   b   s    a#A6M6r   c                  6    [        SS5      n X -  S-  S:X  d   eg )N	   e   r4   )r0   s    r   *test_square_root_mod_prime_for_small_primer:   g   s#     c2D;!!!r   c                  P    Sn U S-  S:X  d   e[        SU 5      nX-  U -  S:X  d   eg )N            r4   pr0   s     r   ,test_square_root_mod_prime_for_p_congruent_5rB   l   7    
Aq5A:: A&D;?ar   c                  P    Sn U S-  S:X  d   e[        SU 5      nX-  U -  S:X  d   eg )N   r=   r>      r4   r@   s     r   4test_square_root_mod_prime_for_p_congruent_5_large_drG   t   rC   r   c                   ,    \ rS rSrS rS rS rS rSrg)TestSquareRootModPrime|   c                 z    U R                  [        5         [        SS5        S S S 5        g ! , (       d  f       g = f)N       )assertRaisesr
   r   selfs    r   test_power_of_2_p(TestSquareRootModPrime.test_power_of_2_p}   s&    {+!"b) ,++s   ,
:c                     U R                  [        5       n[        SS5        S S S 5        U R                  S[	        WR
                  5      5        g ! , (       d  f       N4= f)NrL      zno square rootrN   r	   r   assertInstr	exceptionrP   es     r   test_no_square%TestSquareRootModPrime.test_no_square   D    /1!"b) 0 	&AKK(89 0/   A
Ac                     U R                  [        5       n[        SS5        S S S 5        U R                  S[	        WR
                  5      5        g ! , (       d  f       N4= f)NrL   !   p is not primerU   rY   s     r   test_non_prime%TestSquareRootModPrime.test_non_prime   r]   r^   c                     U R                  [        5       n[        SS5        S S S 5        U R                  S[	        WR
                  5      5        g ! , (       d  f       N4= f)Ni  i  ra   rU   rY   s     r   test_non_prime_with_negative3TestSquareRootModPrime.test_non_prime_with_negative   sD    /1!'3/ 0 	&AKK(89 0/r^   r   N)	__name__
__module____qualname____firstlineno__rQ   r[   rb   re   __static_attributes__r   r   r   rI   rI   |   s    *:::r   rI   c                    ^ U " [         R                  " SSS-  S95      mU " [         R                  " STS-
  S9R                  U4S j5      5      nUT4$ )Nr%      	min_value	max_valuer   c                 "   > [        U T5      S:H  $ Nr   r   )r   mods    r   <lambda>'st_two_nums_rel_prime.<locals>.<lambda>   s    c!SkQ&r   )stintegersfilter)drawr.   rt   s     @r   st_two_nums_rel_primer{      sS     r{{Q!T':
;C

a373::&	
C
 8Or   c                     SU;  a  SUS'   U " [         R                  " [        5      [         R                  " U0 UD6R	                  [
        5      -  5      nU$ )Nro   r   )rw   sampled_fromr   rx   ry   r   )rz   argskwargsr   s       r   	st_primesr      sR    & {
$
++t
&v
&
-
-h
7	8E Lr   c                 |    U " [        SS-  S95      nU " [        R                  " SSUS-  -   S95      nX"-  U-  nX14$ )Nr%   rm   rp   r   r   rn   )r   rw   rx   )rz   r   r.   r/   s       r   st_num_square_primer      sF    QW-.E
r{{Q!eqj.A
BC	U	B9r   c                   ^ U " [         R                  " [        SS-  S9SSS95      mU " [         R                  " [         R                  " T5      SSS95      n[	        [
        R                  US5      nU " [         R                  " SSS9R                  U4S	 j5      5      nU Vs/ s H!  n[	        [
        R                  US5      U-  PM#     sn$ s  snf )
zE
Strategy that returns lists of numbers, all having a common factor.
r%      r   r   
   min_sizemax_size   rn   c                 ~   > [         R                  " [         R                  " [         R                  " T5      SS9SU S9$ N   )r   r   r   rw   listsr}   )nprimess    r   ru   &st_comp_with_com_fac.<locals>.<lambda>   s+    bhh02>r   )	rw   r   r   r}   r   operatormulrx   flatmap)rz   com_fac_primescom_faccomp_primesnumsr   s        @r   st_comp_with_com_facr      s    
 
QV,q2FF 
(1rBN X\\>15G
 
a2.66	
K ALLF8<<q)G3LLLs   %(Cc           	        ^	 U " [         R                  " [        SS-  S9SSSS95      nU " [         R                  " [         R                  " U5      S[	        U5      S-
  SS95      n[        [        R                  US5      nU Vs/ s H  oDU;  d  M
  UPM     snm	T	(       d   eU(       d   eU " [         R                  " SSS	9R                  U	4S
 j5      5      nU Vs/ s H  n[        [        R                  US5      PM      nnU " [         R                  " S[	        U5      S	95      nUR                  X5        U$ s  snf s  snf )zI
Strategy that returns lists of numbers that don't have a common factor.
r%   r   r   r   T)r   r   uniquer   r   rn   c                 ~   > [         R                  " [         R                  " [         R                  " T5      SS9SU S9$ r   r   )r   leftover_primess    r   ru   $st_comp_no_com_fac.<locals>.<lambda>   s+    bhh9BGr   r   )rw   r   r   r}   lenr   r   r   rx   r   insert)
rz   r   uncom_fac_primes	uncom_facinumber_primesr   numbers	insert_atr   s
            @r   st_comp_no_com_facr      s)   
 
3'!b	
F 
OOF#[1_		
 x||%5q9I #)F&Q5E,Eq&FO? 
a2.66	
M :GGvhllD!,GGR[[1GEFINN9(N+ G" Hs   	D=D=%Esuppress_health_checki  deadlinez--fastr   max_examplesc                   V    \ 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S rSrg)TestIsPrimei  c                 (    [        S5      (       d   eg )N   r   rO   s    r   test_very_small_prime!TestIsPrime.test_very_small_prime  s    |||r   c                 (    [        S5      (       a   eg )N   r   rO   s    r   test_very_small_composite%TestIsPrime.test_very_small_composite  s    B<<<r   c                 (    [        S5      (       d   eg )Ni[r   rO   s    r   test_small_primeTestIsPrime.test_small_prime  s    	""""r   c                 (    [        S5      (       a   eg )Ni(  r   rO   s    r   test_special_composite"TestIsPrime.test_special_composite  s    E??""?r   c                 4    [        SS-  S-   5      (       d   eg )Nr%      i)  r   rO   s    r   test_medium_prime_1TestIsPrime.test_medium_prime_1"      3''''r   c                 4    [        SS-  S-   5      (       d   eg )Nr%   r   i-  r   rO   s    r   test_medium_prime_2TestIsPrime.test_medium_prime_2&  r   r   c                 4    [        SS-  S-   5      (       a   eg )Nr%   r   i0  r   rO   s    r   test_medium_trivial_composite)TestIsPrime.test_medium_trivial_composite*      AsFUN+++++r   c                 4    [        SS-  S-   5      (       a   eg )Nr%   r   i/  r   rO   s    r   !test_medium_non_trivial_composite-TestIsPrime.test_medium_non_trivial_composite-  r   r   c                 F    [        [        S5      S-  S-   5      (       d   eg )Nr%   i   i  )r   r   rO   s    r   test_large_primeTestIsPrime.test_large_prime0  s     A$.////r   c                 (    [        S5      (       a   eg )Nl   *i:.S#q.m& r   rO   s    r   test_pseudoprime_base_19$TestIsPrime.test_pseudoprime_base_194  s    >?????r   c                     [        SR                  SS5      5      n[        U5      (       d   e[        S5       H-  n[        USUS-
  -  S-   -  SUS-
  -  S-   -  5      (       a  M-    g     S5       e)	Nz29 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  zcomposite not detected)intreplacer   r)   )rP   rA   _s      r   test_pseudoprime_base_300%TestIsPrime.test_pseudoprime_base_3007  s~     " #*'#r"2	
 {{{rAAA!23sa!e}q7HIJJ  3225r   r   N)rg   rh   ri   rj   r   r   r   r   r   r   r   r   r   r   r   rk   r   r   r   r   r     s:     ##((,,0@3r   r   c            
          \ rS rSrS r\R                  " \S5      \" S!0 \	D6\
" SS/5      \" \" 5       5      S 5       5       5       5       r\R                  " \S5      \" S!0 \	D6\
" / SQ5      \" \" 5       5      S 5       5       5       5       r\" S!0 \	D6\" \R"                  " \R$                  " S	S
S-  S9S	SS95      S 5       5       rS r\" S!0 \	D6\" \R"                  " \R$                  " S	S
S-  S9S	SS95      S 5       5       r\R                  " \S5      \" S!0 \	D6\" \" 5       5      S 5       5       5       r\R2                  R4                  \" S!0 \	D6\" \R$                  " S	SS95      \
" S5      \
" S5      S 5       5       5       5       5       rS rS rS rS r\" S!0 \	D6\" \R$                  " SSS9RA                  S 5      5      S 5       5       r!\" S!0 \	D6\" \"" 5       5      S 5       5       r#S  r$S!r%g")#TestNumbertheoryiL  c                 r    [        SSS5      S:X  d   e[        / SQ5      S:X  d   e[        S5      S:X  d   eg )Ni            )r   r   r   r?   rs   rO   s    r   test_gcdTestNumbertheory.test_gcdM  s=    9j*5>>>675@@@1v{{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                 \    [        U5      nSU;   d  US:w  d   eU H  nX2-  S:X  a  M   e   g Nr   r   rs   rP   r   r   r   s       r   test_gcd_with_com_factor)TestNumbertheory.test_gcd_with_com_factorR  s8     LG|qAv%%A5A:: r   )i  i-  i  c                 *    [        U5      nUS:X  d   eg rr   rs   )rP   r   r   s      r   test_gcd_with_uncom_factor+TestNumbertheory.test_gcd_with_uncom_factora  s     LAvvr   r   r%   i    rn   r   r   c                 @    [        U5      nU H  nX2-  S:X  a  M   e   g Nr   rs   r   s       r   test_gcd_with_random_numbers-TestNumbertheory.test_gcd_with_random_numbersn  s%     LA5A:: r   c                 r    [        SSS5      S:X  d   e[        / SQ5      S:X  d   e[        S5      S:X  d   eg )Nr?   r      r   )r?   r   r   r   rO   s    r   test_lcmTestNumbertheory.test_lcm|  s=    1eU#y000$%2221v{{r   c                 @    [        U5      nU H  nX#-  S:X  a  M   e   g r   r   r   s       r   test_lcm_with_random_numbers-TestNumbertheory.test_lcm_with_random_numbers  s%     LA5A:: r   c                 <    Uu  p#[        X#5      nXD-  U-  U:X  d   eg r   r4   )rP   valssquarer   calcs        r   test_square_root_mod_prime+TestNumbertheory.test_square_root_mod_prime  s*     $V3{U"f,,,r   l    J)l   5yl   1n
Yc                 X    [        U5      nSnU H  nX4S   US   -  -  nM     X1:X  d   eg r   )r   )rP   r.   factorsmultr   s        r   test_factorization#TestNumbertheory.test_factorization  s;      $AaDAaDL D {{r   c                     SnS[         ;   d   eS[         ;   d   e[        U5      nSnU H  nX4S   US   -  -  nM     X1:X  d   eg )Ni(  r9   g   r   r   r   r   rP   expr   r   r   s        r   test_factorisation_smallprimes/TestNumbertheory.test_factorisation_smallprimes  sZ    k!!!k!!!$AaDAaDL D {{r   c                     SnS[         ;  d   eS[         ;  d   e[        U5      nSnU H  nX4S   US   -  -  nM     X1:X  d   eg )Ni;< i  i  r   r   r  r  s        r   "test_factorisation_not_smallprimes3TestNumbertheory.test_factorisation_not_smallprimes  sZ    ;&&&;&&&$AaDAaDL D {{r   c                 (    [        SS5      S:X  d   eg )Nr   r?   r   rO   s    r   test_jacobi_with_zero&TestNumbertheory.test_jacobi_with_zero      a|q   r   c                 (    [        SS5      S:X  d   eg )Nr   r?   r  rO   s    r   test_jacobi_with_one%TestNumbertheory.test_jacobi_with_one  r  r   r?   i  c                     U S-  $ r$   r   r   s    r   ru   TestNumbertheory.<lambda>  s    QUr   c                    [        U5      n[        U5      (       a  [        5       n[        SU5       H8  n[        U5      n[	        X3-  U5      S:X  d   eUR                  X3-  U-  5        M:     [        SU5       H&  nXB;  d  M
  [        U5      n[	        XA5      S:X  a  M&   e   g [        U5      n[        SU5       H6  nSnU H  nU[	        XdS   5      US   -  -  nM     U[	        Xa5      :X  a  M6   e   g )Nr   r   r   )r   r   r(   r)   r   r*   r   )rP   rt   r-   r0   r   r   r5   cs           r   test_jacobiTestNumbertheory.test_jacobi  s     #hC==eGa4ydk3/1444DK#-. & 1c]#AA!!>R/// #
 $C(G1c] AQ4AaD00A !F1N***	 #r   c                 `    Uu  p#[        X#5      nSUs=:  a  U:  d   e   eX$-  U-  S:X  d   eg )Nr   r   r   )rP   r   r.   rt   invs        r   test_inverse_mod!TestNumbertheory.test_inverse_mod  s>     ##3}}}}y3!###r   c                 (    S[        SS5      :X  d   eg )Nr      r  rO   s    r   test_inverse_mod_with_zero+TestNumbertheory.test_inverse_mod_with_zero  s    K2&&&&r   r   N)&rg   rh   ri   rj   r   unittest
skipUnless
HC_PRESENTr   HYP_SLOW_SETTINGSr   r   r   r   r   r   rw   r   rx   r   r   r   r   r   r+   markslowr   r  r
  r  r  ry   r  r{   r  r!  rk   r   r   r   r   r   L  s   
 	 "!"j*%&
!" # ' # 	 "!" 
  ! ! # "!"

KK!q$w7	
 #
 "!"

KK!q$w7	
 #
 	 "!"
 !- " #- [["!"
2;;f56  !  7 # 
!! "!"
2;;d3::?KL+ M #+( "!"
 "#$ $ #$'r   r   )<r   	functoolsr   sys	unittest2r#  ImportErrorhypothesis.strategies
strategiesrw   r+   
hypothesisr   r   r   r   r%  numbertheoryr	   r
   r   r   r   r   r   r   r   r   r   gmpy2r   gmpy	BIGPRIMESr'  parametrizezipr!   r&   r(  r2   r6   r:   rB   rG   TestCaserI   	compositer{   r   r   r   r   HYP_SETTINGSfilter_too_muchtoo_slowargvdictr&  r   r   )rA   qs   00r   <module>r>     s     
  #  / /&J   	0 Ys^Yqr])KL)Kqf)KL'' 
+  ,  +.4 / 4 
"
  :X.. :0 	 	     M M: + +\ ##-L()
  $Lsxx#%L  & sxx()n%(*n%43(## 43nW'x(( W'K
    J$   	D MsR   G? H H <I?
HHHHI&H//	H=8I<H==I