
    tZh3              	       v   d dl Z d dlmZ d dl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 d	lmZ dZ e
jB                  jE                  d e#e dd e dd       D  cg c]	  \  } }| |f c}}       d        Z$e
jB                  jE                  dg d      d        Z%e
jB                  jL                  e
jB                  jE                  de      d               Z'd Z(d Z)d Z*d Z+ G d dejX                        Z-e	j\                  d        Z/e	j\                  d        Z0e	j\                  d        Z1e	j\                  d        Z2e	j\                  d        Z3i Z4er ejj                  ejl                  ge4d<   d e4d!<   d"ejn                  v rd#e4d$<    e8e4      Z9d"ejn                  v rde9d$<   nd#e9d$<    G d% d&ejX                        Z: G d' d(ejX                        Z;y# e$ r d dlZY w xY w# e$ r dZY w xY w# e$ r 	 d d	lmZ n# e$ r d
 ZY nw xY w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)mpzc                     | S N xs    s/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/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                 $    t        |       |k(  sJ y r   r   )primenext_ps     r   test_next_primer!   D   s     e&&&r   val)r   r   r   c                 $    t        |       dk(  sJ y N   r   )r"   s    r    test_next_prime_with_nums_less_2r&   K   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_primesr2   P   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_2r6   b   s    a#A6M6r   c                  6    t        dd      } | | z  dz  dk(  sJ y )N	   e   r4   )r0   s    r   *test_square_root_mod_prime_for_small_primer:   g   s%     c2D$;!!!r   c                  N    d} | dz  dk(  sJ t        d|       }||z  | z  dk(  sJ y )N            r4   pr0   s     r   ,test_square_root_mod_prime_for_p_congruent_5rB   l   9    
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   r=   r>      r4   r@   s     r   4test_square_root_mod_prime_for_p_congruent_5_large_drG   t   rC   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_p}   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)NrK      zno square rootrM   r	   r   assertInstr	exceptionrO   es     r   test_no_squarez%TestSquareRootModPrime.test_no_square   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)NrK   !   p is not primerS   rW   s     r   test_non_primez%TestSquareRootModPrime.test_non_prime   rZ   r[   c                     | j                  t              5 }t        dd       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Ni  i  r^   rS   rW   s     r   test_non_prime_with_negativez3TestSquareRootModPrime.test_non_prime_with_negative   sK    / 	01!'3/	0 	&AKK(89	0 	0r[   N)__name__
__module____qualname__rP   rY   r_   ra   r   r   r   rI   rI   |   s    *:::r   rI   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   )r   mods    r   <lambda>z'st_two_nums_rel_prime.<locals>.<lambda>   s    c!SkQ& r   )stintegersfilter)drawr.   rm   s     @r   st_two_nums_rel_primers      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 )Nrh   r   )ro   sampled_fromr   rp   rq   r   )rr   argskwargsr   s       r   	st_primesrx      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%   rf   ri   r   r   rg   )rx   ro   rp   )rr   r   r.   r/   s       r   st_num_square_primer{      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%      rz   r   
   min_sizemax_size   rg   c                     t        j                  t        j                  t        j                        d      d|       S N   )r   r   r   ro   listsru   )nprimess    r   rn   z&st_comp_with_com_fac.<locals>.<lambda>   s-    bhh02> r   )	ro   r   rx   ru   r   operatormulrp   flatmap)rr   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%   r}   rz   r~   T)r   r   uniquer   r   rg   c                     t        j                  t        j                  t        j                        d      d|       S r   r   )r   leftover_primess    r   rn   z$st_comp_no_com_fac.<locals>.<lambda>   s-    bhh9BG r   r   )ro   r   rx   ru   lenr   r   r   rp   r   insert)
rr   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  deadlinez--fastr   max_examplesc                   N    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y)TestIsPrimec                     t        d      sJ y )N   r   rN   s    r   test_very_small_primez!TestIsPrime.test_very_small_prime  s    ||r   c                     t        d      rJ y )N   r   rN   s    r   test_very_small_compositez%TestIsPrime.test_very_small_composite  s    B<<r   c                     t        d      sJ y )Ni[r   rN   s    r   test_small_primezTestIsPrime.test_small_prime  s    	"""r   c                     t        d      rJ y )Ni(  r   rN   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   rN   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   rN   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   rN   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   rN   s    r   !test_medium_non_trivial_compositez-TestIsPrime.test_medium_non_trivial_composite-  r   r   c                 <    t        t        d      dz  dz         sJ y )Nr%   i   i  )r   r   rN   s    r   test_large_primezTestIsPrime.test_large_prime0  s    A$.///r   c                     t        d      rJ y )Nl   *i:.S#q.m& r   rN   s    r   test_pseudoprime_base_19z$TestIsPrime.test_pseudoprime_base_194  s    >????r   c                     t        dj                  dd            }t        |      sJ t        d      D ]'  }t        |d|dz
  z  dz   z  d|dz
  z  dz   z        r' y  J d       )	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)   )rO   rA   _s      r   test_pseudoprime_base_300z%TestIsPrime.test_pseudoprime_base_3007  s~     " #*'#r"2	
 {{r 	3AAA!23sa!e}q7HIJ	3 3225r   N)rb   rc   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s:     ##((,,0@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j0                  j2                   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d!i e 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?   rl   rN   s    r   test_gcdz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                 R    t        |      }d|v s|dk7  sJ |D ]  }||z  dk(  rJ  y Nr   r   rl   rO   r   r   r   s       r   test_gcd_with_com_factorz)TestNumbertheory.test_gcd_with_com_factorR  s?     LG|qAv%% 	Aq5A::	r   )i  i-  i  c                 (    t        |      }|dk(  sJ y rk   rl   )rO   r   r   s      r   test_gcd_with_uncom_factorz+TestNumbertheory.test_gcd_with_uncom_factora  s     LAvvr   r   r%   i    rg   r   r   c                 <    t        |      }|D ]  }||z  dk(  rJ  y Nr   rl   r   s       r   test_gcd_with_random_numbersz-TestNumbertheory.test_gcd_with_random_numbersn  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   rN   s    r   test_lcmzTestNumbertheory.test_lcm|  s=    1eU#y000$%2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_numbers  s,     L 	Aq5A::	r   c                 @    |\  }}t        ||      }||z  |z  |k(  sJ y r   r4   )rO   valssquarer   calcs        r   test_square_root_mod_primez+TestNumbertheory.test_square_root_mod_prime  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   )rO   r.   factorsmultr   s        r   test_factorizationz#TestNumbertheory.test_factorization  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(  r9   g   r   r   r   r   rO   expr   r   r   s        r   test_factorisation_smallprimesz/TestNumbertheory.test_factorisation_smallprimes  sc    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  sc    ;&&&;&&&$ 	!AAaDAaDL D	!s{{r   c                 &    t        dd      dk(  sJ y )Nr   r?   r   rN   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   rN   s    r   test_jacobi_with_onez%TestNumbertheory.test_jacobi_with_one  r   r   r?   i  c                     | dz  S r$   r   r   s    r   rn   zTestNumbertheory.<lambda>  s
    QU r   c                    t        |      }t        |      rt               }t        d|      D ]8  }t        |      }t	        ||z  |      dk(  sJ |j                  ||z  |z         : t        d|      D ]#  }||vst        |      }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*   r   )rO   rm   r-   r0   r   r   r5   cs           r   test_jacobizTestNumbertheory.test_jacobi  s	    #hC=eGa /4ydTk3/1444D4K#-./ 1c] 0G#AA!!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   )rO   r   r.   rm   invs        r   test_inverse_modz!TestNumbertheory.test_inverse_mod  sD     S#s#3}}}}Sy3!###r   c                 &    dt        dd      k(  sJ y )Nr      r   rN   s    r   test_inverse_mod_with_zeroz+TestNumbertheory.test_inverse_mod_with_zero  s    K2&&&&r   Nr   )$rb   rc   rd   r   unittest
skipUnless
HC_PRESENTr   HYP_SLOW_SETTINGSr   r   r   r   r   r   ro   r   rp   r   r   r   r{   r   r+   markslowr   r   r   r   r   rq   r   rs   r   r   r   r   r   r   r   L  s   
 X	 "!"j*%&
!" # ' # X	 "!" 
  ! ! # "!"
BKK!q$w7	
 #
 "!"
BKK!q$w7	
 #
 X	 "!"
 !- " #- [["!"
;2;;f56  !  7 # 
!! "!"
;2;;d3::?KL+ M #+( "!"
 "#$ $ #$'r   r   )<r   	functoolsr   sys	unittest2r   ImportErrorhypothesis.strategies
strategiesro   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   	compositers   rx   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Aq!f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s^   G5 H H <H55	HHHHH2H H2 H+(H2*H++H21H2