o
    4@Hh"                     @  sl  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rPd d	lmZmZ ed
Zd1ddZdZed2ddZed2ddZ d2ddZ!G dd deZ"ej#$deegd3ddZ%ed2dd Z&ed2d!d"Z'ed2d#d$Z(d2d%d&Z)d4d)d*Z*d4d+d,Z+ej#j,d-d.d2d/d0Z-dS )5    )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TfCallable[[], Awaitable[T]]expected_durfloatreturnc                   sZ   t  }t| I d H }t  | }t||  d||   kr&dk s)J  J | S )NgG?g      ?)timeperf_counteroutcomeacaptureprintunwrap)r   r   startresultdur r#   Y/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/trio/_tests/test_timeouts.pycheck_takes_about   s    r%   g      ?Nonec               	     s   ddd} t | tI d H  ddd}t |tI d H  t  tdI d H  W d    n1 s0w   Y  tt . ttj	 tdI d H  W d    n1 sTw   Y  W d    d S W d    d S 1 slw   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   r   r(   pytestraises	Cancelled)r*   r+   r#   r#   r$   
test_sleepA   s   

"r0   c                        ddd} t | tI d H  d S )Nr   r&   c                     >   t t tdI d H  W d    d S 1 sw   Y  d S Nd   )r   r)   r   r#   r#   r#   r$   sleep_3W      
"z#test_move_on_after.<locals>.sleep_3r,   r%   r)   )r5   r#   r#   r$   test_move_on_afterU   s   
r8   c               	     s   t j  d fdd} t  4 I d H -}||  tt t  I d H  W d    n1 s2w   Y  W d   I d H  d S 1 I d H sHw   Y  d S )Nr   r&   c                     s*   t j I d H  t j td  d S r'   )triolowlevel
checkpoint
rescheduler   Valuer#   taskr#   r$   	wake_taskb   s   z1test_cannot_wake_sleep_forever.<locals>.wake_taskr,   )	r9   r:   current_taskopen_nursery
start_soonr-   r.   RuntimeErrorr   )r@   nurseryr#   r>   r$   test_cannot_wake_sleep_forever^   s   

.rF   c                   @  s   e Zd Zd
ddZd	S )TimeoutScopesecondsr   shieldboolr   trio.CancelScopec                C  s   d S r'   r#   )selfrH   rI   r#   r#   r$   __call__m   s    zTimeoutScope.__call__N)rH   r   rI   rJ   r   rK   )__name__
__module____qualname__rM   r#   r#   r#   r$   rG   l   s    rG   scopec              
     s   t  f}| tddG}|  z
tj I d H  W n tjy*   t	d Y nw d|_
ttj tj I d H  W d    n1 sGw   Y  W d    n1 sVw   Y  W d    d S W d    d S 1 snw   Y  d S )NTrI   zshield didn't workF)r   CancelScoper)   cancelr9   r:   r;   r/   r-   failrI   r.   )rQ   outerinnerr#   r#   r$   test_context_shields_from_outerp   s   PrX   c                    r1   )Nr   r&   c               	     s   t  1} ttdd |   t I d H  W d    n1 s!w   Y  W d    d S W d    d S 1 s9w   Y  d S NTrR   )r   rS   r   r)   rT   r   rV   r#   r#   r$   r?      s
   Pz:test_move_on_after_moves_on_even_if_shielded.<locals>.taskr,   r7   r>   r#   r#   r$   ,test_move_on_after_moves_on_even_if_shielded}   s   
r[   c                    r1   )Nr   r&   c               
     s   t tE t (} ttdd |   t I d H  W d    n1 s'w   Y  W d    n1 s6w   Y  W d    d S W d    d S 1 sNw   Y  d S rY   )	r-   r.   r	   r   rS   r
   r)   rT   r   rZ   r#   r#   r$   r?      s   P z4test_fail_after_fails_even_if_shielded.<locals>.taskr,   r7   r>   r#   r#   r$   &test_fail_after_fails_even_if_shielded   s   
r\   c                    s  d	dd} t t t| tI d H  W d    n1 sw   Y  tt d  tdI d H  W d    n1 s=w   Y  d	dd}t t t|tI d H  W d    n1 s_w   Y  t	d tdI d H  W d    d S 1 s{w   Y  d S )
Nr   r&   c                     sF   t t t  tdI d H  W d    d S 1 sw   Y  d S r3   )r   r   r(   r)   r   r#   r#   r#   r$   sleep_4   s   "ztest_fail.<locals>.sleep_4r4   r   c                     r2   r3   )r
   r)   r   r#   r#   r#   r$   sleep_5   r6   ztest_fail.<locals>.sleep_5r,   )
r-   r.   r	   r%   r)   r   r   r(   r   r
   )r]   r^   r#   r#   r$   	test_fail   s   


"r_   c               
     s   t d} tdft| ft| ffD ]"\}}tjtdd ||I d H  W d    n1 s-w   Y  qtdft| ft| ftdft| ft	| ffD ]/\}}tjtdd || W d    n1 sbw   Y  W d    n1 sqw   Y  qGd S )Nnanz8^(deadline|`seconds`) must (not )*be (non-negative|NaN)$match)
r   r   r   r-   r.   
ValueErrorr
   r   r   r   )r`   funvalcmr#   r#   r$   test_timeouts_raise_value_error   s>   
rh   
mock_clock_core.MockClockc                   sP  t d}|jdksJ | d t }|G}|jd u sJ |j|d ks(J |jdks/J |d |_|j|d ks=J |jdksDJ d|_|j|d ksPJ |jdksWJ W d    n1 saw   Y  t d}|jdu sqJ d|_|jdu s{J | d t }|}|j|d ksJ ||u sJ W d    d S 1 sw   Y  d S )N         FT)r   relative_deadlinejumpr   r(   is_relativedeadlinerI   )ri   rcsr    csr#   r#   r$   test_timeout_deadline_on_entry   s4   


"rt   c                   st  t d}| d t }d}tjt|d |j|d ks!J W d    n1 s+w   Y  | d tjt|d |j|d ksFJ W d    n1 sPw   Y  tjt|d d|_W d    n1 sjw   Y  |jdksvJ |jr{J t	d}d}tj
t|d |jsJ W d    n1 sw   Y  tj
t|d d|_W d    d S 1 sw   Y  d S )	Nrk   rl   zC^unentered relative cancel scope does not have an absolute deadlinerb            zG^unentered non-relative cancel scope does not have a relative deadline$)r   ro   r   r(   r-   warnsDeprecationWarningrq   rp   r   r.   rD   rn   )ri   rs   r    	match_strr#   r#   r$   test_invalid_access_unentered   s4   


"r{   znot implemented)reasonc                    s*   t d} | js
J td}|jsJ d S )Nrk   )r   rq   r
   rn   )
my_fail_atmy_fail_afterr#   r#   r$    test_fail_access_before_entering  s
   
r   )r   r   r   r   r   r   r,   )rQ   rG   r   r&   )ri   rj   r   r&   ).
__future__r   r   typingr   r   r   r   r-   r9    r   _core._tests.tutilr   	_timeoutsr	   r
   r   r   r   r   r   r   testingr   collections.abcr   r   r   r%   r)   r0   r8   rF   rG   markparametrizerX   r[   r\   r_   rh   rt   r{   xfailr   r#   r#   r#   r$   <module>   sD    (




!
"