
    dfc-              	          d dl Z d dlmZ 	 d dlZ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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	Ze	j:                  j=                  d
 eedd edd       D  cg c]	  \  } }| |f c}}       d        Z e	j:                  j=                  dg d      d        Z!e	j:                  j=                  de      d        Z"d Z#d Z$d Z%d Z& G d dejN                        Z(ejR                  d        Z*ejR                  d        Z+ejR                  d        Z,ejR                  d        Z-ejR                  d        Z.i Z/er ej`                  ejb                  ge/d<   de/d<    e2e/      Z3d e3d!<    G d" d#ejN                        Z4 G d$ d%ejN                        Z5y# e$ r d dlZY w xY w# e$ r dZY w xY wc c}} w )&    N)reduce)givensettingsexample)HealthCheckTF   )SquareRootErrorJacobiErrorfactorizationgcdlcmjacobiinverse_modis_prime
next_primesmallprimessquare_root_mod_prime)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                 $    t        |       |k(  sJ y Nr   )primenext_ps     P/home/api-vastappli/venv/lib/python3.12/site-packages/ecdsa/test_numbertheory.pytest_next_primer   9   s     e&&&    val)r   r   r   c                 $    t        |       dk(  sJ y N   r   )r   s    r    test_next_prime_with_nums_less_2r!   @   s    c?ar   r   c                 J   t               }t        dd| dz  z         D ]4  }||z  | z  }|j                  |       t        ||       }||z  | z  |k(  r4J  t        d|       D ]5  }||v rt	        j
                  t              5  t        ||        d d d        7 y # 1 sw Y   BxY w)Nr   r   r    )setrangeaddr   pytestraisesr	   )r   squaresnumsqroot	nonsquares         r   +test_square_root_mod_prime_for_small_primesr-   E   s    eGQEQJ' )3YB$R/d{U"b(() 1e_ 4	]]?+ 	4!)U3	4 	44	4 	4s   BB"	c                  *    t        dd      } | dk(  sJ y )Nr   r    r   )as    r    test_square_root_mod_prime_for_2r1   V   s    a#A6M6r   c                  6    t        dd      } | | z  dz  dk(  sJ y )N	   e   r/   )r+   s    r   *test_square_root_mod_prime_for_small_primer5   [   s%     c2D$;!!!r   c                  N    d} | dz  dk(  sJ t        d|       }||z  | z  dk(  sJ y )N            r/   pr+   s     r   ,test_square_root_mod_prime_for_p_congruent_5r=   `   7    
Aq5A: A&D$;?ar   c                  N    d} | dz  dk(  sJ t        d|       }||z  | z  dk(  sJ y )N   r8   r9      r/   r;   s     r   4test_square_root_mod_prime_for_p_congruent_5_large_drB   h   r>   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestSquareRootModPrimec                 p    | j                  t              5  t        dd       d d d        y # 1 sw Y   y xY w)N       )assertRaisesr
   r   selfs    r   test_power_of_2_pz(TestSquareRootModPrime.test_power_of_2_pq   s/    {+ 	*!"b)	* 	* 	*s   ,5c                     | j                  t              5 }t        dd       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)NrF      zno square rootrH   r	   r   assertInstr	exceptionrJ   es     r   test_no_squarez%TestSquareRootModPrime.test_no_squareu   K    / 	*1!"b)	* 	&AKK(89	* 	*   AAc                     | j                  t              5 }t        dd       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)NrF   !   p is not primerN   rR   s     r   test_non_primez%TestSquareRootModPrime.test_non_prime{   rU   rV   c                     | j                  t              5 }t        dd       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Ni  i  rY   rN   rR   s     r   test_non_prime_with_negativez3TestSquareRootModPrime.test_non_prime_with_negative   sK    / 	01!'3/	0 	&AKK(89	0 	0rV   N)__name__
__module____qualname__rK   rT   rZ   r\    r   r   rD   rD   p   s    *:::r   rD   c                      | t        j                  dddz               | t        j                  ddz
        j                  fd            }|fS )Nr       	min_value	max_valuer   c                 "    t        |       dk(  S Nr   r   )xmods    r   <lambda>z'st_two_nums_rel_prime.<locals>.<lambda>   s    c!SkQ& r   )stintegersfilter)drawr)   rj   s     @r   st_two_nums_rel_primerp      sS     r{{Q!T':
;C

a373::&	
C
 8Or   c                     d|vrd|d<    | t        j                  t              t        j                  |i |j	                  t
              z        }|S )Nrd   r   )rl   sampled_fromr   rm   rn   r   )ro   argskwargsr   s       r   	st_primesru      sR    & {
$
++t
&v
&
-
-h
7	8E Lr   c                      | t        ddz              } | t        j                  dd|dz  z               }||z  |z  }||fS )Nr    rb   re   r   r   rc   )ru   rl   rm   )ro   r   r)   r*   s       r   st_num_square_primerx      sJ    QW-.E
r{{Q!eqj.A
BC	sU	Bu9r   c                     | t        j                  t        ddz        dd             | t        j                  t        j                        dd            }t	        t
        j                  |d      } | t        j                  dd      j                  fd	            }|D cg c]   }t	        t
        j                  |d      |z  " c}S c c}w )
zM
    Strategy that returns lists of numbers, all having a common factor.
    r       rw   r   
   min_sizemax_size   rc   c                     t        j                  t        j                  t        j                        d      d|       S N   )r~   r   r|   rl   listsrr   )nprimess    r   rk   z&st_comp_with_com_fac.<locals>.<lambda>   s-    bhh02> r   )	rl   r   ru   rr   r   operatormulrm   flatmap)ro   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           	      ~  	  | t        j                  t        ddz        ddd            } | t        j                  t        j                  |      dt	        |      dz
  d            }t        t        j                  |d      }|D cg c]	  }||vs| c}		sJ |sJ  | t        j                  dd	      j                  	fd
            }|D cg c]  }t        t        j                  |d       }} | t        j                  dt	        |      	            }|j                  ||       |S c c}w c c}w )zQ
    Strategy that returns lists of numbers that don't have a common factor.
    r    rz   rw   r{   T)r}   r~   uniquer   r   rc   c                     t        j                  t        j                  t        j                        d      d|       S r   r   )r   leftover_primess    r   rk   z$st_comp_no_com_fac.<locals>.<lambda>   s-    bhh9BG r   r   )rl   r   ru   rr   lenr   r   r   rm   r   insert)
ro   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 #)FQA5E,EqFO 
a2.66	
M :GGvhllD!,GGGR[[1GEFINN9i(N+ G" Hs   	D5D5"D:suppress_health_checki  deadliner{   max_examplesc                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestIsPrimec                     t        d      sJ y )N   r   rI   s    r   test_very_small_primez!TestIsPrime.test_very_small_prime  s    ||r   c                     t        d      rJ y )N   r   rI   s    r   test_very_small_compositez%TestIsPrime.test_very_small_composite  s    B<<r   c                     t        d      sJ y )Ni[r   rI   s    r   test_small_primezTestIsPrime.test_small_prime
  s    	"""r   c                     t        d      rJ y )Ni(  r   rI   s    r   test_special_compositez"TestIsPrime.test_special_composite  s    E?"?r   c                 *    t        ddz  dz         sJ y )Nr       i)  r   rI   s    r   test_medium_prime_1zTestIsPrime.test_medium_prime_1      3'''r   c                 *    t        ddz  dz         sJ y )Nr    r   i-  r   rI   s    r   test_medium_prime_2zTestIsPrime.test_medium_prime_2  r   r   c                 *    t        ddz  dz         rJ y )Nr    r   i0  r   rI   s    r   test_medium_trivial_compositez)TestIsPrime.test_medium_trivial_composite      AsFUN+++r   c                 *    t        ddz  dz         rJ y )Nr    r   i/  r   rI   s    r   !test_medium_non_trivial_compositez-TestIsPrime.test_medium_non_trivial_composite  r   r   c                 *    t        ddz  dz         sJ y )Nr    i   i  r   rI   s    r   test_large_primezTestIsPrime.test_large_prime  s    4%(((r   N)r]   r^   r_   r   r   r   r   r   r   r   r   r   r`   r   r   r   r     s/     ##((,,)r   r   c            	       d   e Zd Zd Z ej
                  ed       edi e e	 e
             d                      Z ej
                  ed       edi e e	 e             d                      Z e	 ej                   ej                   dddz        dd	
            d        Zd Z 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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      j;                  d             d               Z e	 e             d        Z d Z!y)TestNumbertheoryc                 l    t        ddd      dk(  sJ t        g d      dk(  sJ t        d      dk(  sJ y )Ni            )r   r   r   r:   rh   rI   s    r   test_gcdzTestNumbertheory.test_gcd$  s7    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 itc                 R    t        |      }d|v s|dk7  sJ |D ]  }||z  dk(  rJ  y Nr   r   rh   rJ   r   r   r   s       r   test_gcd_with_com_factorz)TestNumbertheory.test_gcd_with_com_factor)  s:     LG|qAv% 	Aq5A:	r   c                 (    t        |      }|dk(  sJ y rg   rh   )rJ   r   r   s      r   test_gcd_with_uncom_factorz+TestNumbertheory.test_gcd_with_uncom_factor7  s     LAvvr   r   r    i    rc   r   r|   c                 <    t        |      }|D ]  }||z  dk(  rJ  y Nr   rh   r   s       r   test_gcd_with_random_numbersz-TestNumbertheory.test_gcd_with_random_numbersC  s*     L 	Aq5A:	r   c                 l    t        ddd      dk(  sJ t        g d      dk(  sJ t        d      dk(  sJ y )Nr:   r      r   )r:   r   r   r   rI   s    r   test_lcmzTestNumbertheory.test_lcmP  s7    1eU#y00$%221v{{r   c                 <    t        |      }|D ]  }||z  dk(  rJ  y r   r   r   s       r   test_lcm_with_random_numbersz-TestNumbertheory.test_lcm_with_random_numbersU  s*     L 	Aq5A:	r   c                 @    |\  }}t        ||      }||z  |z  |k(  sJ y r   r/   )rJ   valssquarer   calcs        r   test_square_root_mod_primez+TestNumbertheory.test_square_root_mod_primea  s0     $VU3d{U"f,,,r   l    J)l   5yl   1n
Yc                 V    t        |      }d}|D ]  }||d   |d   z  z  } ||k(  sJ y r   )r   )rJ   r)   factorsmultr   s        r   test_factorizationz#TestNumbertheory.test_factorizationo  sD    
  $ 	!AAaDAaDL 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 y )Ni(  r4   g   r   r   r   r   rJ   expr   r   r   s        r   test_factorisation_smallprimesz/TestNumbertheory.test_factorisation_smallprimesz  s]    k!!k!!$ 	!AAaDAaDL 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 y )Ni;< i  i  r   r   r   r   s        r   "test_factorisation_not_smallprimesz3TestNumbertheory.test_factorisation_not_smallprimes  s]    ;&&;&&$ 	!AAaDAaDL D	!s{{r   c                 &    t        dd      dk(  sJ y )Nr   r:   r   rI   s    r   test_jacobi_with_zeroz&TestNumbertheory.test_jacobi_with_zero      a|q   r   c                 &    t        dd      dk(  sJ y )Nr   r:   r   rI   s    r   test_jacobi_with_onez%TestNumbertheory.test_jacobi_with_one  r   r   r:   i  c                     | dz  S r   r`   )ri   s    r   rk   zTestNumbertheory.<lambda>  s
    QU r   c                    t        |      rnt               }t        d|      D ]-  }t        ||z  |      dk(  sJ |j	                  ||z  |z         / t        d|      D ]  }||vst        ||      dk(  rJ  y t        |      }t        d|      D ]4  }d}|D ]  }|t        ||d         |d   z  z  } |t        ||      k(  r4J  y )Nr   r   r   )r   r#   r$   r   r%   r   )rJ   rj   r(   r+   r   r   r0   cs           r   test_jacobizTestNumbertheory.test_jacobi  s     C=eGa /dTk3/144D4K#-./ 1c] 0G#!!S>R//0 $C(G1c] +  1A1Q4AaD00A1F1cN**	+r   c                 `    |\  }}t        ||      }d|cxk  r|k  sJ  J ||z  |z  dk(  sJ y )Nr   r   r   )rJ   r   r)   rj   invs        r   test_inverse_modz!TestNumbertheory.test_inverse_mod  s@    S#s#3}}}Sy3!###r   c                 &    dt        dd      k(  sJ y )Nr      r   rI   s    r   test_inverse_mod_with_zeroz+TestNumbertheory.test_inverse_mod_with_zero  s    K2&&&&r   Nr`   )"r]   r^   r_   r   unittest
skipUnless
HC_PRESENTr   HYP_SLOW_SETTINGSr   r   r   r   r   rl   r   rm   r   r   r   HYP_SETTINGSrx   r   r   r   r   r   r   r   rn   r   rp   r   r   r`   r   r   r   r   #  s>   
 X	 "!"
!" # # X	 "!"
  ! # BKK!q$w7	

 BKK!q$w7	

 X	 
 !- " - 
;2;;f56  !  7 !! 
;2;;d3::?KL+ M +"  "#$ $$'r   r   )6r   	functoolsr   	unittest2r   ImportErrorhypothesis.strategies
strategiesrl   r&   
hypothesisr   r   r   r   r   numbertheoryr	   r
   r   r   r   r   r   r   r   r   r   	BIGPRIMESmarkparametrizezipr   r!   r-   r1   r5   r=   rB   TestCaserD   	compositerp   ru   rx   r   r   r   filter_too_muchtoo_slowdictr   r   r   )r<   qs   00r   <module>r     s&      #  / /&J   	0 Ys^Yqr])KLAq!fL'' 
+  ,  +.4 /4 
"
  :X.. :0 	 	     M M: + +\ ##-L()
  $L & $& . !)(## )@N'x(( N'{    JT Ms(   F* F: 1G*	F76F7:GG