a
    (ñ»j"  ã                   @  s¦  d dl mZ d dlZd dlmZmZmZ d dlZd dlZd dl	Z	ddl
mZ ddlmZ ddlmZmZmZmZmZmZmZmZ ddlmZ er d d	lmZmZ ed
ƒZddd
dœdd„ZdZeddœdd„ƒZeddœdd„ƒZ ddœdd„Z!G dd„ deƒZ"ej# $deeg¡dddœdd„ƒZ%eddœdd „ƒZ&eddœd!d"„ƒZ'eddœd#d$„ƒZ(ddœd%d&„Z)d'dd(œd)d*„Z*d'dd(œd+d,„Z+ej#j,d-d.�ddœd/d0„ƒZ-dS )1é    )ÚannotationsN)ÚTYPE_CHECKINGÚProtocolÚTypeVaré   )Ú_core)Úslow)ÚTooSlowErrorÚ
fail_afterÚfail_atÚmove_on_afterÚ
move_on_atÚsleepÚsleep_foreverÚsleep_until)Úassert_checkpoints)Ú	AwaitableÚCallableÚTzCallable[[], Awaitable[T]]Úfloat)ÚfÚexpected_durÚreturnc                 Ã  sV   t  ¡ }t | ¡I d H }t  ¡ | }t|| ƒ d||   krHdk sNn J ‚| ¡ S )NgGœ¡úÿÿï?g      ø?)ÚtimeÚperf_counterÚoutcomeZacaptureÚprintÚunwrap)r   r   ÚstartÚresultZdur© r    ú?E:\soccer\ml_env\Lib\site-packages\trio/_tests/test_timeouts.pyÚcheck_takes_about   s    r"   g      ð?ÚNone©r   c               	   Ã  sÚ   ddœdd„} t | tƒI d H  ddœdd„}t |tƒI d H  tƒ � tdƒI d H  W d   ƒ n1 sf0    Y  tt ¡ ƒ�J t tj	¡� tdƒI d H  W d   ƒ n1 s®0    Y  W d   ƒ n1 sÌ0    Y  d S )Nr#   r$   c                   Ó  s   t t ¡ t ƒI d H  d S ©N)r   r   Úcurrent_timeÚTARGETr    r    r    r!   Úsleep_1C   s    ztest_sleep.<locals>.sleep_1c                   Ó  s   t tƒI d H  d S r%   )r   r'   r    r    r    r!   Úsleep_2H   s    ztest_sleep.<locals>.sleep_2r   )
r"   r'   r   r   r   r   r&   ÚpytestÚraisesÚ	Cancelled)r(   r)   r    r    r!   Ú
test_sleepA   s    ,r-   c                  Ã  s"   ddœdd„} t | tƒI d H  d S )Nr#   r$   c                   Ó  s:   t tƒ� tdƒI d H  W d   ƒ n1 s,0    Y  d S ©Néd   )r   r'   r   r    r    r    r!   Úsleep_3W   s    
z#test_move_on_after.<locals>.sleep_3©r"   r'   )r0   r    r    r!   Útest_move_on_afterU   s    r2   c               	   ƒ  sž   t j ¡ ‰ ddœ‡ fdd„} t  ¡ 4 I d H šX}| | ¡ t t¡� t  ¡ I d H  W d   ƒ n1 sf0    Y  W d   ƒI d H  qš1 I d H s�0    Y  d S )Nr#   r$   c                   “  s(   t j ¡ I d H  t j ˆ t d ¡¡ d S r%   )ÚtrioÚlowlevelÚ
checkpointZ
rescheduler   ÚValuer    ©Útaskr    r!   Ú	wake_taskb   s    z1test_cannot_wake_sleep_forever.<locals>.wake_task)	r3   r4   Zcurrent_taskZopen_nurseryZ
start_soonr*   r+   ÚRuntimeErrorr   )r9   Znurseryr    r7   r!   Útest_cannot_wake_sleep_forever^   s    

r;   c                   @  s   e Zd Zddddœdd„ZdS )ÚTimeoutScoper   Úboolztrio.CancelScope)ÚsecondsÚshieldr   c                C  s   d S r%   r    )Úselfr>   r?   r    r    r!   Ú__call__m   ó    zTimeoutScope.__call__N)Ú__name__Ú
__module__Ú__qualname__rA   r    r    r    r!   r<   l   s   r<   Úscope)rF   r   c              
   Ã  sÖ   t  ¡ �º}| tdd��Ž}| ¡  ztj ¡ I d H  W n tjyR   t 	d¡ Y n0 d|_
t tj¡�  tj ¡ I d H  W d   ƒ n1 sŒ0    Y  W d   ƒ n1 sª0    Y  W d   ƒ n1 sÈ0    Y  d S )NT©r?   zshield didn't workF)r   ÚCancelScoper'   Úcancelr3   r4   r5   r,   r*   Zfailr?   r+   )rF   ÚouterÚinnerr    r    r!   Útest_context_shields_from_outerp   s    rL   c                  Ã  s"   ddœdd„} t | tƒI d H  d S )Nr#   r$   c               	   Ó  sl   t  ¡ �P} ttdd��$ |  ¡  tƒ I d H  W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  d S ©NTrG   )r   rH   r   r'   rI   r   ©rJ   r    r    r!   r8      s    z:test_move_on_after_moves_on_even_if_shielded.<locals>.taskr1   r7   r    r    r!   Ú,test_move_on_after_moves_on_even_if_shielded}   s    rO   c                  Ã  s"   ddœdd„} t | tƒI d H  d S )Nr#   r$   c               
   Ó  s–   t  t¡�x t ¡ �P} ttdd��$ |  ¡  tƒ I d H  W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S rM   )	r*   r+   r	   r   rH   r
   r'   rI   r   rN   r    r    r!   r8   ‹   s    þz4test_fail_after_fails_even_if_shielded.<locals>.taskr1   r7   r    r    r!   Ú&test_fail_after_fails_even_if_shielded‰   s    rP   c                  Ã  s  ddœdd„} t  t¡�  t| tƒI d H  W d   ƒ n1 s>0    Y  tt ¡ d ƒ� tdƒI d H  W d   ƒ n1 s|0    Y  ddœdd„}t  t¡�  t|tƒI d H  W d   ƒ n1 sÄ0    Y  t	dƒ� tdƒI d H  W d   ƒ n1 sú0    Y  d S )	Nr#   r$   c                   Ó  sB   t t ¡ t ƒ� tdƒI d H  W d   ƒ n1 s40    Y  d S r.   )r   r   r&   r'   r   r    r    r    r!   Úsleep_4ž   s    ztest_fail.<locals>.sleep_4r/   r   c                   Ó  s:   t tƒ� tdƒI d H  W d   ƒ n1 s,0    Y  d S r.   )r
   r'   r   r    r    r    r!   Úsleep_5¨   s    
ztest_fail.<locals>.sleep_5)
r*   r+   r	   r"   r'   r   r   r&   r   r
   )rQ   rR   r    r    r!   Ú	test_failœ   s    .,.
rS   c               
   Ã  sð   t dƒ} tdft| ft| ffD ]D\}}tjtdd�� ||ƒI d H  W d   ƒ q1 sX0    Y  qtdft| ft| ftdft| ft	| ffD ]^\}}tjtdd��8 ||ƒ� W d   ƒ n1 sÂ0    Y  W d   ƒ qŒ1 sà0    Y  qŒd S )NÚnanéÿÿÿÿz8^(deadline|`seconds`) must (not )*be (non-negative|NaN)$©Úmatch)
r   r   r   r*   r+   Ú
ValueErrorr
   r   r   r   )rT   ZfunÚvalÚcmr    r    r!   Útest_timeouts_raise_value_error³   s.    ýþ.úþ
r[   z_core.MockClock)Ú
mock_clockr   c                 Ã  sR  t dƒ}|jdksJ ‚|  d¡ t ¡ }|�Ž}|jd u s<J ‚|j|d ksNJ ‚|jdks\J ‚|d |_|j|d ksxJ ‚|jdks†J ‚d|_|j|d ksžJ ‚|jdks¬J ‚W d   ƒ n1 sÀ0    Y  t dƒ}|jdu sàJ ‚d|_|jdu sôJ ‚|  d¡ t ¡ }|�2}|j|d k�s J ‚||u �s.J ‚W d   ƒ n1 �sD0    Y  d S )Né   é   é   FT)r   Úrelative_deadlineÚjumpr   r&   Úis_relativeÚdeadliner?   )r\   Zrcsr   Úcsr    r    r!   Útest_timeout_deadline_on_entryÔ   s.    

,
re   c                 Ã  sv  t dƒ}|  d¡ t ¡ }d}tjt|d��" |j|d ks@J ‚W d   ƒ n1 sT0    Y  |  d¡ tjt|d��" |j|d ksŠJ ‚W d   ƒ n1 sž0    Y  tjt|d�� d|_W d   ƒ n1 sÒ0    Y  |jdksêJ ‚|jrôJ ‚t	dƒ}d}tj
t|d�� |j�sJ ‚W d   ƒ n1 �s20    Y  tj
t|d�� d|_W d   ƒ n1 �sh0    Y  d S )	Nr]   r^   zC^unentered relative cancel scope does not have an absolute deadlinerV   é   é   é   zG^unentered non-relative cancel scope does not have a relative deadline$)r   ra   r   r&   r*   ZwarnsÚDeprecationWarningrc   rb   r   r+   r:   r`   )r\   rd   r   Z	match_strr    r    r!   Útest_invalid_access_unenteredö   s(    
0
0$
ÿ,rj   znot implemented)Úreasonc                  Ã  s(   t dƒ} | jsJ ‚tdƒ}|js$J ‚d S )Nr]   )r   rc   r
   r`   )Z
my_fail_atZmy_fail_afterr    r    r!   Ú test_fail_access_before_entering  s    
rl   ).Ú
__future__r   r   Útypingr   r   r   r   r*   r3   Ú r   Z_core._tests.tutilr   Z	_timeoutsr	   r
   r   r   r   r   r   r   Ztestingr   Úcollections.abcr   r   r   r"   r'   r-   r2   r;   r<   ÚmarkZparametrizerL   rO   rP   rS   r[   re   rj   Zxfailrl   r    r    r    r!   Ú<module>   sB   (
!"