o
    4@HhN                     @  s   d dl mZ d dlZd dlmZm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 er8d dlmZ dddZdddZdddZdddZdddZdddZdddZdddZdddZdS )    )annotationsN)TYPE_CHECKINGNoReturn)RaisesGroup   )_core)_signal_handlerget_pending_signal_countopen_signal_receiver)	FrameTypereturnNonec                    s<  t t j} tt jb}t t j t t j t I d H  t t j t I d H  |2 z3 d H W }|t jks<J  n6 t|dksGJ t t j |2 z3 d H W }|t jks\J  n6 t|dksgJ W d    n1 sqw   Y  t	t
 | I d H  W d    n1 sw   Y  t t j| u sJ d S )Nr   )signal	getsignalSIGILLr
   raise_signalr   wait_all_tasks_blockedr	   pytestraisesRuntimeError	__anext__)origreceiversignum r   X/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/trio/_tests/test_signals.pytest_open_signal_receiver   s0   r   c               	     s   t t j} tjtdd tt jd W d    n1 s w   Y  W d    n1 s/w   Y  t t j| u s>J d S )Nz2(signal number out of range|invalid signal value)$matchi )r   r   r   r   r   
ValueErrorr
   r   r   r   r   >test_open_signal_receiver_restore_handler_after_one_bad_signal*   s   r!   c                	   C  sj   t jtdd$ t  W d    n1 sw   Y  W d    d S W d    d S 1 s.w   Y  d S )NzNo signals were providedr   )r   r   	TypeErrorr
   r   r   r   r   $test_open_signal_receiver_empty_fail6   s   "r#   c                    sT   t t j} tt jt j W d    n1 sw   Y  t t j| u s(J d S N)r   r   r   r
   r    r   r   r   @test_open_signal_receiver_restore_handler_after_duplicate_signal<   s   r%   c                    sR   ddd} t t tjtj| I d H  W d    d S 1 s"w   Y  d S )Nr   r   c                     s2   t tj	 W d    d S 1 sw   Y  d S r$   )r
   r   SIGINTr   r   r   r   naughtyE   s   "z0test_catch_signals_wrong_thread.<locals>.naughtyr   r   )r   r   r   trio	to_threadrun_syncrun)r'   r   r   r   test_catch_signals_wrong_threadD   s
   
"r-   c                    s   t tjP ttj2} t 4 I d H }|| j || j W d   I d H  n1 I d H s2w   Y  W d    n1 sAw   Y  W d    d S W d    d S 1 sYw   Y  d S r$   )	r   r)   BusyResourceErrorr
   r   r   open_nursery
start_soonr   )r   nurseryr   r   r   "test_open_signal_receiver_conflictM   s   ("r2   c                    s4   t  } t }|j| jdd |  I d H  d S )NT)
idempotent)r)   Eventr   current_trio_tokenrun_sync_soonsetwait)evtokenr   r   r   +wait_run_sync_soon_idempotent_queue_barrierW   s
   r;   c               	     s$  t tjtj} z]tttj d }tdD ]9}ttj ttj t I d H  |d u r8| 	 I d H }q| 	 I d H }|tjtjfv sIJ ||ksOJ |}qt
| dkre| 	 I d H  t
| dksXW n tyw   dd l}|  Y n	w W d    d S W d    d S 1 sw   Y  d S )N
   r   )r
   r   r   SIGFPEprintr   ranger   r;   r   r	   BaseException	traceback	print_exc)r   previous_gotrA   r   r   r   'test_open_signal_receiver_no_starvation^   s6   "rF   c               
     s  t   d fdd} td	 ttjtjh| 1 ttjtj}ttj ttj W d    n1 s7w   Y  t I d H  W d    n1 sLw   Y   tjtjhks[J  	  td
 ttjtjh| 9 ttjtj"}ttj ttj t I d H  t
|d
ksJ W d    n1 sw   Y  W d    n1 sw   Y   tjtjhksJ  	  td ttjhtj) ttj}ttj W d    n1 sw   Y  t I d H  W d    n1 sw   Y  td ttjhtj3 ttj}ttj t I d H  t
|d	ks J W d    n	1 s+w   Y  W d    n	1 s;w   Y  ddd}ttjtjh|x tt;}ttjtj#}ttj ttj t I d H  t
|d
ksxJ W d    n	1 sw   Y  W d    n	1 sw   Y  |j}|jd h}t|jtsJ ||jjd  |tjtjhksJ W d    d S 1 sw   Y  d S )NsignointframeFrameType | Noner   r   c                   s     |  d S r$   )add)rG   rI   delivered_directlyr   r   direct_handler   s   zAtest_catch_signals_race_condition_on_exit.<locals>.direct_handler   r         r   r   c                 S  s   t | r$   )r   )r   rI   r   r   r   raise_handler   s   z@test_catch_signals_race_condition_on_exit.<locals>.raise_handlerr   )rG   rH   rI   rJ   r   r   )r   rH   rI   rJ   r   r   )r7   r>   r   r   r   r=   r
   r   r;   clearr	   SIG_IGNr   r   r   valueargs
isinstance__context__rK   )rN   r   rR   excinfoexcsignumsr   rL   r   )test_catch_signals_race_condition_on_exit}   st   
	$r\   r(   )
__future__r   r   typingr   r   r   r)   trio.testingr    r   _signalsr   r	   r
   typesr   r   r!   r#   r%   r-   r2   r;   rF   r\   r   r   r   r   <module>   s&    





	


