o
    6h3                     @   s  d dl Z d dlmZ d dlZzd dlZW n ey!   d dlZY nw d dlmZ	 d dl
Z
d dlmZmZmZ z
d dlmZ dZW n eyK   dZY n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 zd d	lmZ W n ey   zd d	lmZ W n ey   d
d ZY nw Y nw dZ e
j!"ddd e#e dd e dd D dd Z$e
j!"dg ddd Z%e
j!j&e
j!"dedd Z'dd Z(dd Z)dd Z*d d! Z+G d"d# d#ej,Z-e	j.d$d% Z/e	j.d&d' Z0e	j.d(d) Z1e	j.d*d+ Z2e	j.d,d- Z3i Z4erej5ej6ge4d.< d/e4d0< d1ej7v rd2e4d3< e8e4Z9d1ej7v r-de9d3< nd2e9d3< G d4d5 d5ej,Z:G d6d7 d7ej,Z;dS )8    N)reduce)givensettingsexample)HealthCheckTF   )SquareRootErrorJacobiErrorfactorizationgcdlcmjacobiinverse_modis_prime
next_primesmallprimessquare_root_mod_prime)mpzc                 C   s   | S N xr   r   k/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/ecdsa/test_numbertheory.pyr   (   s   r   )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                 C   s   g | ]\}}||fqS r   r   ).0pqr   r   r   
<listcomp>E       r   c                 C   s   t | |ksJ d S r   r   )primenext_pr   r   r   test_next_primeD   s   r"   val)r   r   r   c                 C   s   t | dksJ d S N   r   )r#   r   r   r    test_next_prime_with_nums_less_2K   s   r&   r    c              	   C   s   t  }tdd| d  D ]}|| |  }|| t|| }|| |  |ks(J qtd| D ]!}||v r5q.tt t||  W d    n1 sJw   Y  q.d S )Nr   r   r%   )setrangeaddr   pytestraisesr   )r    squaresnumsqroot	nonsquarer   r   r   +test_square_root_mod_prime_for_small_primesP   s   

r1   c                  C   s   t dd} | dksJ d S )Nr   r%   r   )ar   r   r    test_square_root_mod_prime_for_2b   s   
r4   c                  C   s"   t dd} | |  d dksJ d S )N	   e   r2   )r/   r   r   r   *test_square_root_mod_prime_for_small_primeg   s   
r7   c                  C   6   d} | d dks
J t d| }|| |  dksJ d S )N            r2   r   r/   r   r   r   ,test_square_root_mod_prime_for_p_congruent_5l      
r>   c                  C   r8   )N   r:   r;      r2   r=   r   r   r   4test_square_root_mod_prime_for_p_congruent_5_large_dt   r?   rB   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestSquareRootModPrimec                 C   s:   |  t tdd W d    d S 1 sw   Y  d S )N       )assertRaisesr	   r   selfr   r   r   test_power_of_2_p}   s   "z(TestSquareRootModPrime.test_power_of_2_pc                 C   J   |  t}tdd W d    n1 sw   Y  | dt|j d S )NrD      zno square rootrF   r   r   assertInstr	exceptionrH   er   r   r   test_no_square      z%TestSquareRootModPrime.test_no_squarec                 C   rJ   )NrD   !   p is not primerL   rP   r   r   r   test_non_prime   rS   z%TestSquareRootModPrime.test_non_primec                 C   rJ   )Ni  i  rU   rL   rP   r   r   r   test_non_prime_with_negative   rS   z3TestSquareRootModPrime.test_non_prime_with_negativeN)__name__
__module____qualname__rI   rR   rV   rW   r   r   r   r   rC   |   s
    rC   c                    sB   | t jddd d | t jd d d fdd}| fS )Nr%      	min_value	max_valuer   c                    s   t |  dkS Nr   r   r   modr   r   <lambda>   s    z'st_two_nums_rel_prime.<locals>.<lambda>)stintegersfilter)drawr-   r   ra   r   st_two_nums_rel_prime   s   
rh   c                 O   s8   d|vrd|d< | t tt j|i |tB }|S )Nr]   r   )rd   sampled_fromr   re   rf   r   )rg   argskwargsr    r   r   r   	st_primes   s   rl   c                 C   s@   | t dd d}| tjdd|d  d}|| | }||fS )Nr%   r[   r^   r   r   r\   )rl   rd   re   )rg   r    r-   r.   r   r   r   st_num_square_prime   s   rn   c                    sx   | t jtdd dddd| t jt ddd}ttj|d | t jdddfd	d
} fdd|D S )zM
    Strategy that returns lists of numbers, all having a common factor.
    r%      rm   r   
   min_sizemax_size   r\   c                        t jt jt  ddd| dS N   )rs   r   rq   rd   listsri   n)primesr   r   rc      
    z&st_comp_with_com_fac.<locals>.<lambda>c                    s   g | ]}t tj|d   qS r   r   operatormulr   nums)com_facr   r   r      s    z(st_comp_with_com_fac.<locals>.<listcomp>)	rd   ry   rl   ri   r   r   r   re   flatmap)rg   com_fac_primescomp_primesr   )r   r|   r   st_comp_with_com_fac   s   

r   c                    s   | t jtdd ddddd}| t jt |dt|d ddttjd}fdd	|D   s6J s:J | t jdd
d	 fdd}dd	 |D }| t jdt|d}|
|| |S )zQ
    Strategy that returns lists of numbers that don't have a common factor.
    r%   ro   rm   rp   T)rr   rs   uniquer   c                    s   g | ]}| vr|qS r   r   )r   i)uncom_fac_primesr   r   r      r   z&st_comp_no_com_fac.<locals>.<listcomp>rt   r\   c                    ru   rv   rx   rz   )leftover_primesr   r   rc      r}   z$st_comp_no_com_fac.<locals>.<lambda>c                 S   s   g | ]	}t tj|d qS r~   r   r   r   r   r   r      s    r   )rd   ry   rl   ri   lenr   r   r   re   r   insert)rg   r|   	uncom_facnumber_primesnumbers	insert_atr   )r   r   r   st_comp_no_com_fac   s4   


r   suppress_health_checki  deadlinez--fastrt   max_examplesc                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestIsPrimec                 C      t dsJ d S )N   r   rG   r   r   r   test_very_small_prime     z!TestIsPrime.test_very_small_primec                 C      t drJ d S )N   r   rG   r   r   r   test_very_small_composite  r   z%TestIsPrime.test_very_small_compositec                 C   r   )Ni[r   rG   r   r   r   test_small_prime  r   zTestIsPrime.test_small_primec                 C   r   )Ni(  r   rG   r   r   r   test_special_composite  r   z"TestIsPrime.test_special_compositec                 C      t dd d s
J d S )Nr%      i)  r   rG   r   r   r   test_medium_prime_1"     zTestIsPrime.test_medium_prime_1c                 C   r   )Nr%   r   i-  r   rG   r   r   r   test_medium_prime_2&  r   zTestIsPrime.test_medium_prime_2c                 C      t dd d r
J d S )Nr%   r   i0  r   rG   r   r   r   test_medium_trivial_composite*     z)TestIsPrime.test_medium_trivial_compositec                 C   r   )Nr%   r   i/  r   rG   r   r   r   !test_medium_non_trivial_composite-  r   z-TestIsPrime.test_medium_non_trivial_compositec                 C   s   t tdd d sJ d S )Nr%   i   i  )r   r   rG   r   r   r   test_large_prime0  s   zTestIsPrime.test_large_primec                 C   r   )Nl   *i:.S#q.m& r   rG   r   r   r   test_pseudoprime_base_194  r   z$TestIsPrime.test_pseudoprime_base_19c                 C   s`   t ddd}t|sJ tdD ]}t|d|d  d  d|d  d  s+ d S q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  rp   i9  r   ia  Fzcomposite not detected)intreplacer   r(   )rH   r   _r   r   r   test_pseudoprime_base_3007  s   (z%TestIsPrime.test_pseudoprime_base_300N)rX   rY   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    r   c                   @   s  e Zd Zdd Zeeded1i ee	ddge
e dd Zeeded1i ee	g de
e d	d
 Zed1i ee
ejejddd dddddd Zdd Zed1i ee
ejejddd dddddd Zeeded1i ee
e dd Zejjed1i ee
ejddde	de	ddd Zdd Zd d! Zd"d# Zd$d% Zed1i ee
ejd&d'dd(d) d*d+ Z ed1i ee
e! d,d- Z"d.d/ Z#d0S )2TestNumbertheoryc                 C   s<   t ddddks
J t g ddksJ t ddksJ d S )Ni            )r   r   r   r<   r`   rG   r   r   r   test_gcdM     zTestNumbertheory.test_gcdzwHypothesis 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                 C   s:   t |}d|v s|dksJ |D ]
}|| dksJ qd S Nr   r   r`   rH   r   r{   r   r   r   r   test_gcd_with_com_factorR  s
   
z)TestNumbertheory.test_gcd_with_com_factor)i  i-  i  c                 C   s   t |}|dks
J d S r_   r`   )rH   r   r{   r   r   r   test_gcd_with_uncom_factora  s   
z+TestNumbertheory.test_gcd_with_uncom_factorr   r%   i    r\   rt   rq   c                 C   s&   t |}|D ]
}|| dksJ qd S Nr   r`   r   r   r   r   test_gcd_with_random_numbersn  s   	z-TestNumbertheory.test_gcd_with_random_numbersc                 C   s<   t ddddks
J t g ddksJ t ddksJ d S )Nr<   r      r   )r<   r   r   r   rG   r   r   r   test_lcm|  r   zTestNumbertheory.test_lcmc                 C   s&   t |}|D ]
}|| dksJ qd S r   r   r   r   r   r   test_lcm_with_random_numbers  s   	z-TestNumbertheory.test_lcm_with_random_numbersc                 C   s*   |\}}t ||}|| | |ksJ d S r   r2   )rH   valssquarer    calcr   r   r   test_square_root_mod_prime  s   	
z+TestNumbertheory.test_square_root_mod_primel    J)l   5yl   1n
Yc                 C   s:   t |}d}|D ]}||d |d  9 }q||ksJ d S r   )r
   )rH   r-   factorsmultr   r   r   r   test_factorization  s
   z#TestNumbertheory.test_factorizationc                 C   sV   d}dt v sJ dt v sJ t|}d}|D ]}||d |d  9 }q||ks)J d S )Ni(  r6   g   r   r   r   r
   rH   expr   r   r   r   r   r   test_factorisation_smallprimes     z/TestNumbertheory.test_factorisation_smallprimesc                 C   sV   d}dt vsJ dt vsJ t|}d}|D ]}||d |d  9 }q||ks)J d S )Ni;< i  i  r   r   r   r   r   r   r   "test_factorisation_not_smallprimes  r   z3TestNumbertheory.test_factorisation_not_smallprimesc                 C      t dddks	J d S )Nr   r<   r   rG   r   r   r   test_jacobi_with_zero     z&TestNumbertheory.test_jacobi_with_zeroc                 C   r   )Nr   r<   r   rG   r   r   r   test_jacobi_with_one  r   z%TestNumbertheory.test_jacobi_with_oner<   i  c                 C   s   | d S r$   r   r   r   r   r   rc     s    zTestNumbertheory.<lambda>c                 C   s   t |}t|rFt }td|D ]}t |}t|| |dks!J ||| |  qtd|D ]}||vrCt |}t||dksCJ q0d S t|}td|D ]}d}|D ]}|t||d |d  9 }qU|t||ksnJ qOd S )Nr   r   r   )r   r   r'   r(   r   r)   r
   )rH   rb   r,   r/   r   r   r3   cr   r   r   test_jacobi  s(   zTestNumbertheory.test_jacobic                 C   sF   |\}}t ||}d|  k r|k sJ  J || | dks!J d S )Nr   r   r   )rH   r   r-   rb   invr   r   r   test_inverse_mod  s   
z!TestNumbertheory.test_inverse_modc                 C   s   dt ddks	J d S )Nr      r   rG   r   r   r   test_inverse_mod_with_zero  r   z+TestNumbertheory.test_inverse_mod_with_zeroNr   )$rX   rY   rZ   r   unittest
skipUnless
HC_PRESENTr   HYP_SLOW_SETTINGSr   r   r   r   r   r   rd   ry   re   r   r   r   rn   r   r*   markslowr   r   r   r   r   rf   r   rh   r   r   r   r   r   r   r   L  sz    



r   )<r   	functoolsr   sys	unittest2r   ImportErrorhypothesis.strategies
strategiesrd   r*   
hypothesisr   r   r   r   r   numbertheoryr   r	   r
   r   r   r   r   r   r   r   r   gmpy2r   gmpy	BIGPRIMESr   parametrizezipr"   r&   r   r1   r4   r7   r>   rB   TestCaserC   	compositerh   rl   rn   r   r   HYP_SETTINGSfilter_too_muchtoo_slowargvdictr   r   r   r   r   r   r   <module>   s    4	$







.
7