a
    (ñ»jN  ã                   @  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rpd dlmZ d	d
œdd„Zd	d
œdd„Zd	d
œdd„Zd	d
œdd„Zd	d
œdd„Zd	d
œdd„Zd	d
œdd„Zd	d
œdd„Zd	d
œdd„ZdS )é    )ÚannotationsN)ÚTYPE_CHECKINGÚNoReturn)ÚRaisesGroupé   )Ú_core)Ú_signal_handlerÚget_pending_signal_countÚopen_signal_receiver)Ú	FrameTypeÚNone©Úreturnc                  Ã  sB  t  t j¡} tt jƒ�È}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svJ ‚ q~q\6 t|ƒdksŽJ ‚t  t j¡ |2 z3 d H W }|t jks¸J ‚ qÀqž6 t|ƒdksÐJ ‚W d   ƒ n1 sä0    Y  t 	t
¡� | ¡ I d H  W d   ƒ n1 �s0    Y  t  t j¡| u �s>J ‚d S )Nr   )ÚsignalÚ	getsignalÚSIGILLr
   Úraise_signalr   Zwait_all_tasks_blockedr	   ÚpytestÚraisesÚRuntimeErrorÚ	__anext__)ÚorigÚreceiverÚsignum© r   ú>E:\soccer\ml_env\Lib\site-packages\trio/_tests/test_signals.pyÚtest_open_signal_receiver   s&    ..r   c               	   Ã  s~   t  t j¡} tjtdd��< tt jdƒ� W d   ƒ n1 s>0    Y  W d   ƒ n1 s\0    Y  t  t j¡| u szJ ‚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  sX   t jtdd��6 tƒ � W d   ƒ n1 s,0    Y  W d   ƒ n1 sJ0    Y  d S )NzNo signals were providedr   )r   r   Ú	TypeErrorr
   r   r   r   r   Ú$test_open_signal_receiver_empty_fail6   s    r#   c                  Ã  sR   t  t j¡} tt jt jƒ� W d   ƒ n1 s00    Y  t  t j¡| u sNJ ‚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d„} t  t¡�& tj tj| ¡I d H  W d   ƒ n1 sD0    Y  d S )Nr   r   c                   Ó  s.   t tjƒ� W d   ƒ n1 s 0    Y  d S r$   )r
   r   ÚSIGINTr   r   r   r   ÚnaughtyE   s    z0test_catch_signals_wrong_thread.<locals>.naughty)r   r   r   ÚtrioZ	to_threadZrun_syncÚrun)r'   r   r   r   Útest_catch_signals_wrong_threadD   s    r*   c                  Ã  s¬   t tjƒ�Ž ttjƒ�d} t ¡ 4 I d H š.}| | j¡ | | j¡ W d   ƒI d H  ql1 I d H sb0    Y  W d   ƒ n1 s€0    Y  W d   ƒ n1 sž0    Y  d S r$   )	r   r(   ZBusyResourceErrorr
   r   r   Zopen_nurseryZ
start_soonr   )r   Znurseryr   r   r   Ú"test_open_signal_receiver_conflictM   s
    r+   c                  Ã  s2   t  ¡ } t ¡ }|j| jdd� |  ¡ I d H  d S )NT)Z
idempotent)r(   ÚEventr   Zcurrent_trio_tokenZrun_sync_soonÚsetÚwait)ZevÚtokenr   r   r   Ú+wait_run_sync_soon_idempotent_queue_barrierW   s    r0   c               	   Ã  s  t tjtjƒ�ä} z°tt tj¡ƒ d }tdƒD ]r}t tj¡ t tj¡ tƒ I d H  |d u rn|  	¡ I d H }q.|  	¡ I d H }|tjtjfv s�J ‚||ksœJ ‚|}q.t
| ƒdkr¾|  	¡ I d H  q¢W n" tyâ   dd l}| ¡  Y n0 W d   ƒ n1 sø0    Y  d S )Né
   r   )r
   r   r   ÚSIGFPEÚprintr   Úranger   r0   r   r	   ÚBaseExceptionÚ	tracebackÚ	print_exc)r   ÚpreviousÚ_Úgotr6   r   r   r   Ú'test_open_signal_receiver_no_starvation^   s&    r;   c               
   ƒ  sº  t ƒ ‰ ddddœ‡ fdd„} tdƒ ttjtjh| ƒ�b ttjtjƒ�(}t tj¡ t tj¡ W d   ƒ n1 st0    Y  tƒ I d H  W d   ƒ n1 sž0    Y  ˆ tjtjhks¼J ‚ˆ  	¡  tdƒ ttjtjh| ƒ�v ttjtjƒ�F}t tj¡ t tj¡ tƒ I d H  t
|ƒdk�s&J ‚W d   ƒ n1 �s<0    Y  W d   ƒ n1 �s\0    Y  ˆ tjtjhk�s|J ‚ˆ  	¡  td	ƒ ttjhtjƒ�T ttjƒ�}t tj¡ W d   ƒ n1 �sÌ0    Y  tƒ I d H  W d   ƒ n1 �sø0    Y  td
ƒ ttjhtjƒ�f ttjƒ�:}t tj¡ tƒ I d H  t
|ƒdk�sRJ ‚W d   ƒ n1 �sh0    Y  W d   ƒ n1 �sˆ0    Y  ddddœdd„}ttjtjh|ƒ�î t t¡�v}ttjtjƒ�F}t tj¡ t tj¡ tƒ I d H  t
|ƒdk�s
J ‚W d   ƒ n1 �s 0    Y  W d   ƒ n1 �s@0    Y  |j}|jd h}t|jtƒ�snJ ‚| |jjd ¡ |tjtjhk�s–J ‚W d   ƒ n1 �s¬0    Y  d S )NÚintzFrameType | Noner   )ÚsignoÚframer   c                   s   ˆ   | ¡ d S r$   )Úadd)r=   r>   ©Zdelivered_directlyr   r   Údirect_handler€   s    zAtest_catch_signals_race_condition_on_exit.<locals>.direct_handleré   r   é   é   r   )r   r>   r   c                 S  s   t | ƒ‚d S r$   )r   )r   r>   r   r   r   Úraise_handler­   s    z@test_catch_signals_race_condition_on_exit.<locals>.raise_handlerr   )r-   r3   r   r   r   r2   r
   r   r0   Úclearr	   ÚSIG_IGNr   r   r   ÚvalueÚargsÚ
isinstanceÚ__context__r?   )rA   r   rE   ÚexcinfoÚexcZsignumsr   r@   r   Ú)test_catch_signals_race_condition_on_exit}   sV    **R,,RRrN   )Ú
__future__r   r   Útypingr   r   r   r(   Ztrio.testingr   Ú r   Z_signalsr   r	   r
   Útypesr   r   r!   r#   r%   r*   r+   r0   r;   rN   r   r   r   r   Ú<module>   s$   	
