+
    BiH                     6   R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt Rt]P(                  R 4       t]P,                  ! ]! ]R4      R4       ! R	 R
]P0                  4      4       t]P,                  ! ]! ]R4      R4       ! R R]4      4       t]P,                  ! ]! ]R4      R4       ! R R]4      4       t]P,                  ! ]! ]R4      R4       ! R R]4      4       t]P,                  ! ]! ]R4      R4      ]P,                  ! ]! ]R4      R4       ! R R]4      4       4       t]P,                  ! ]! ]R4      R4       ! R R]4      4       t ! R R]4      t] R8X  d   ]PB                  ! 4        R# R# )a  
This test suite exercises some system calls subject to interruption with EINTR,
to check that it is actually handled transparently.
It is intended to be run by the main test suite within a child process, to
ensure there is no background thread running (so that signals are delivered to
the correct thread).
Signals are generated in-process using setitimer(ITIMER_REAL), which allows
sub-second periodicity (contrarily to signal()).
N)support)	os_helper)socket_helperg{Gz?c              #     "   T ;_uu_ 4         V x   RRR4       R#    T P                  4        h ; i  + '       g   i     R# ; i5i)zGContext manager killing the subprocess if a Python exception is raised.N)kill)procs   &'/usr/lib/python3.14/test/_test_eintr.pykill_on_errorr	   #   s9      
	J 
	IIK 
s$   A4
A14A		A	setitimerzrequires setitimer()c                   ^   a  ] tR t^.t o RtRtRtRtR tR t	]
R 4       tR tR tR	 tR
tV tR# )EINTRBaseTestzBase class for EINTR tests. g?g?c                8    V ;P                   ^,          un         R# )   N)signals)selfsignumframes   &&&r   
sighandlerEINTRBaseTest.sighandler:   s        c                >   ^ V n         \        P                  ! \        P                  V P                  4      V n        \        P
                  ! \        P                  V P                  V P                  4       \        P                  ! RR\        P                  R7       R# )    T)exitfileNiX  )r   signalSIGALRMr   orig_handlerr
   ITIMER_REALsignal_delaysignal_periodfaulthandlerdump_traceback_latersys
__stderr__r   s   &r   setUpEINTRBaseTest.setUp=   sf    "MM&..$//J++T->->++	-
 	))'/2~~	?r   c                 R    \         P                  ! \         P                  ^ ^ 4       R# )r   N)r   r
   r    r   r   
stop_alarmEINTRBaseTest.stop_alarmH   s    ++Q2r   c                    V P                  4        \        P                  ! \        P                  V P                  4       \        P
                  ! 4        R # N)r)   r   r   r   r    cancel_dump_traceback_laterr$   s   &r   tearDownEINTRBaseTest.tearDownL   s0    fnnd&7&78002r   c                b    \         P                  R 3V,           p\        P                  ! V3/ VB # )z-c)r"   
executable
subprocessPopen)r   argskwcmd_argss   &*, r   r2   EINTRBaseTest.subprocessQ   s+    NND)D0/B//r   c                R    V P                  WP                  \        ,
          4       R # r,   )assertGreaterEqual
sleep_time	CLOCK_RES)r   elapseds   &&r   check_elapsed_time EINTRBaseTest.check_elapsed_timeU   s    9)DEr   )r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r:   r   r%   staticmethodr)   r.   r2   r=   __static_attributes____classdictcell____classdict__s   @r   r   r   .   sO     ' LM J	? 3 33
0F Fr   r   c                      a  ] tR t^Yt o RtR tR tR t]P                  ! ]
! ]R4      R4      R 4       tR tR	 t]P                  ! ]
! ]R
4      R4      R 4       tR tR tR tR tRtV tR# )OSEINTRTestzEINTR tests for the os module. c                F    R V P                   : R2pV P                  V4      # )zimport time; time.sleep())r:   r2   )r   codes   & r   new_sleep_processOSEINTRTest.new_sleep_process]   s$    )$//)<A>t$$r   c                    ^p\        V4       Uu. uF  q0P                  4       NK  	  pp\        V4       F
  pV! 4        K  	  V F  pVP                  4        K  	  R# u upi )   N)rangerN   wait)r   	wait_funcnum_	processesr   s   &&    r   _test_wait_multipleOSEINTRTest._test_wait_multiplea   sT    7<SzBz!++-z	BsAK  DIIK 	 Cs   Ac                D    V P                  \        P                  4       R # r,   )rX   osrS   r$   s   &r   	test_waitOSEINTRTest.test_waitj   s      )r   wait3zrequires wait3()c                *    V P                  R  4       R# )c                  .    \         P                  ! ^ 4      # r   )r[   r^   r(   r   r   <lambda>(OSEINTRTest.test_wait3.<locals>.<lambda>o   s    !r   N)rX   r$   s   &r   
test_wait3OSEINTRTest.test_wait3m   s      !45r   c                j    V P                  4       pV! VP                  4       VP                  4        R # r,   )rN   pidrS   )r   rT   r   s   && r   _test_wait_singleOSEINTRTest._test_wait_singleq   s%    %%'$((		r   c                *    V P                  R  4       R# )c                 0    \         P                  ! V ^ 4      # ra   )r[   waitpidrg   s   &r   rb   *OSEINTRTest.test_waitpid.<locals>.<lambda>x   s    2::c1+=r   Nrh   r$   s   &r   test_waitpidOSEINTRTest.test_waitpidw   s    =>r   wait4zrequires wait4()c                *    V P                  R  4       R# )c                 0    \         P                  ! V ^ 4      # ra   )r[   rr   rm   s   &r   rb   (OSEINTRTest.test_wait4.<locals>.<lambda>|   s    288C+;r   Nro   r$   s   &r   
test_wait4OSEINTRTest.test_wait4z   s    ;<r   c              #    "   \         P                  ! 4       w  rV P                  \         P                  V4       . ROpRP	                  RRRRV: 2RV P
                  : 2RRRR	R
3
4      pV P                  V\        V4      V.R7      p\        V4      ;_uu_ 4        \         P                  ! V4       V F  pW3x  K
  	  V P                  VP                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i5i)z;Make a fd which will force block on read of expected bytes.
zimport os, sys, time zwr = int(sys.argv[1])data = sleep_time = zfor item in data:z$    # let the parent block on read()    time.sleep(sleep_time)z    os.write(wr, item)pass_fdsN)s   hellos   worlds   spam)r[   pipe
addCleanupclosejoinr:   r2   strr	   assertEqualrS   )r   rdwrdatarM   r   datums   &      r   _interrupted_readsOSEINTRTest._interrupted_reads~   s     "%
 -yy"#dXDOO./2($
  tSWt<4  HHRLi TYY[!,	 !   s   BC?AC+!
C?+C<	6	C?c           
         V P                  4        F5  w  rV P                  V\        P                  ! V\	        V4      4      4       K7  	  R # r,   )r   r   r[   readlen)r   fdexpecteds   &  r   	test_readOSEINTRTest.test_read   s6     335LBXrwwr3x='AB 6r   c                    V P                  4        FY  w  r\        \        V4      4      pV P                  \        P
                  ! W4      \        V4      4       V P                  W24       K[  	  R # r,   )r   	bytearrayr   r   r[   readinto)r   r   r   buffers   &   r   test_readintoOSEINTRTest.test_readinto   sP     335LBs8}-FR[[4c(mDV. 6r   c                   \         P                  ! 4       w  rV P                  \         P                  V4       R \        P
                  ,          pRP                  RRRRV P                  : 2R\        P
                   2RRRR	RR
RRRRRRR34      pV P                  V\        V4      V.R7      p\        V4      ;_uu_ 4        \         P                  ! V4       ^ pV\        V4      8  d-   V\         P                  ! V\        V4      VR 4      ,          pK<  V P                  VP                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i)   xry   zimport io, os, sys, timerz   zrd = int(sys.argv[1])r|   zdata = b"x" * data_len = len(data)z!# let the parent block on write()time.sleep(sleep_time)zread_data = io.BytesIO()z+while len(read_data.getvalue()) < data_len:z%    chunk = os.read(rd, 2 * data_len)z    read_data.write(chunk)zvalue = read_data.getvalue()zif value != data:zD    raise Exception(f"read error: {len(value)} vs {data_len} bytes")r~   N)r[   r   r   r   r   PIPE_MAX_SIZEr   r:   r2   r   r	   r   write
memoryviewr   rS   )r   r   r   r   rM   r   writtens   &      r   
test_writeOSEINTRTest.test_write   s!   "% g+++yy&#DOO./W2234"/$&93(*;%
 , tSWt<4  HHRLGCI%288B
4(8(BCCTYY[!, !   s   A5EE	r(   N)r?   r@   rA   rB   rC   rN   rX   r\   unittest
skipUnlesshasattrr[   rd   rh   rp   rv   r   r   r   r   rE   rF   rG   s   @r   rJ   rJ   Y   s     *%* W-/AB6 C6? W-/AB= C=-<C/$- $-r   rJ   c                     a  ] tR t^t o Rt]P                  ! ]! ]R4      R4      R 4       t	R t
]P                  ! ]! ]P                  R4      R4      R 4       tR	 tR
 tR t]P                  ! ]! ]P                  R4      R4      R 4       tR t]P$                  ! ^
^4      ]P                  ! ]! ]R4      R4      R 4       4       tR t]P,                  ! ]P0                  R8H  R4      R 4       tR t]P,                  ! ]P0                  R8H  R4      ]P,                  ! ]P0                  P7                  R4      R4      R 4       4       tRtV tR# )SocketEINTRTestz#EINTR tests for the socket module. 
socketpairzneeds socketpair()c                   \         P                  ! 4       w  r#V P                  VP                  4       . ROpRP	                  RRRR\        VP                  4       2R\        VP                  4       2RV: 2RV P                  : 2RR	R
RRRRRR34      pVP                  4       pV P                  V\        V4      V.R7      p\        V4      ;_uu_ 4        VP                  4        V F$  pV P                  W! V\        V4      4      4       K&  	  V P                  VP                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i)r   ry   import os, socket, sys, timerz   fd = int(sys.argv[1])	family = sock_type = r{   r|   z)wr = socket.fromfd(fd, family, sock_type)os.close(fd)zwith wr:z    for item in data:z(        # let the parent block on recv()z        time.sleep(sleep_time)z        wr.sendall(item)r~   N)r      y   z)socketr   r   r   r   intfamilytyper:   filenor2   r   r	   r   r   rS   )	r   	recv_funcr   r   r   rM   r   r   items	   &&       r   
_test_recvSocketEINTRTest._test_recv   s#   ""$! "yy*#BII'(3rww<.)dXDOO./7#6,&!
 & YY[tSWt<4  HHJ  ySY'?@ TYY[!,	 !   s   AD<<E	c                X    V P                  \        P                  P                  4       R # r,   )r   r   recvr$   s   &r   	test_recvSocketEINTRTest.test_recv       **+r   recvmsgzneeds recvmsg()c                *    V P                  R  4       R# )c                 2    V P                  V4      ^ ,          # ra   )r   sockr   s   &&r   rb   .SocketEINTRTest.test_recvmsg.<locals>.<lambda>   s    4<<+=a+@r   N)r   r$   s   &r   test_recvmsgSocketEINTRTest.test_recvmsg   s    @Ar   c                6   \         P                  ! 4       w  r#V P                  VP                  4       R \        P
                  ^,          ,          pRP                  RRRR\        VP                  4       2R\        VP                  4       2RV P                  : 2R\        P
                  ^,           2R	RR
RRRRRRRRRRRRR34      pVP                  4       pV P                  V\        V4      V.R7      p\        V4      ;_uu_ 4        VP                  4        ^ pV\        V4      8  d/   V! V\!        V4      VR 4      p	Yf   \        V4      MT	,          pK>  V P#                  VP%                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i)s   xyzry   r   rz   r   r   r   r|   zdata = b"xyz" * r   z)rd = socket.fromfd(fd, family, sock_type)r   zwith rd:z$    # let the parent block on send()r}   z'    received_data = bytearray(data_len)z	    n = 0z    while n < data_len:z8        n += rd.recv_into(memoryview(received_data)[n:])zif received_data != data:zL    raise Exception(f"recv error: {len(received_data)} vs {data_len} bytes")r~   N)r   r   r   r   r   SOCK_MAX_SIZEr   r   r   r   r:   r   r2   r   r	   r   r   r   rS   )
r   	send_funcr   r   r   rM   r   r   r   sents
   &&        r   
_test_sendSocketEINTRTest._test_send   sl   ""$! ..!34yy*#BII'(3rww<.)DOO./w449:;"72(5%F';/
 6 YY[tSWt<4  HHJGCI% Z%5gh%?@3t9$>TYY[!, !   s   A1FF	c                X    V P                  \        P                  P                  4       R # r,   )r   r   sendr$   s   &r   	test_sendSocketEINTRTest.test_send*  r   r   c                X    V P                  \        P                  P                  4       R # r,   )r   r   sendallr$   s   &r   test_sendallSocketEINTRTest.test_sendall-  s    --.r   sendmsgzneeds sendmsg()c                *    V P                  R  4       R# )c                 &    V P                  V.4      # r,   )r   r   s   &&r   rb   .SocketEINTRTest.test_sendmsg.<locals>.<lambda>2  s    4<<+?r   N)r   r$   s   &r   test_sendmsgSocketEINTRTest.test_sendmsg0  s    ?@r   c                8   \         P                  ! \        P                  ^ 34      pV P	                  VP
                  4       VP                  4       ^,          pRP                  RRR\        P                  : 2RV 2RV P                  : 2RRRR	R
3
4      pV P                  V4      p\        V4      ;_uu_ 4        VP                  4       w  rVVP                  4        V P                  VP                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i)r   ry   zimport socket, timerz   zhost = zport = r|   z# let parent block on accept()r   z,with socket.create_connection((host, port)):r}   N)r   create_serverr   HOSTr   r   getsocknamer   r:   r2   r	   acceptr   rS   )r   r   portrM   r   client_sockrV   s   &      r   test_acceptSocketEINTRTest.test_accept4  s    ##]%7%7$;<

#!!$yy!m((+,dVDOO./,$:(
  t$4  ![[]NKTYY[!, !   s   ;ADD	mkfifozneeds mkfifo()c                D   \         P                  p\         P                  ! V4        \        P                  ! V4       V P                  \         P                  V4       RP                  RRRV: 2RV P                  : 2RRRRV3	4      pV P                  V4      p\        V4      ;_uu_ 4        V! V4       V P                  VP                  4       ^ 4       RRR4       R#   \
         d    pT P                  R T: 24        Rp?LRp?ii ; i  + '       g   i     R# ; i)	zos.mkfifo(): Nry   import os, timerz   zpath = r|   z# let the parent blockr   )r   TESTFNunlinkr[   r   PermissionErrorskipTestr   r   r:   r2   r	   r   rS   )r   do_open_close_readerdo_open_close_writerfilenameexcrM   r   s   &&&    r   
_test_openSocketEINTRTest._test_openP  s     ## 	"	3IIh 		(((3yyh\"DOO./$$ 

 
 t$4   *TYY[!, ! #  	3MMM#122	3" !  s#   C! .)D!D,DDD	c                >    \        VR 4      pVP                  4        R# )wN)openr   )r   pathfps   && r   python_openSocketEINTRTest.python_openo  s    $_

r   darwinz+hangs under macOS; see bpo-25234, bpo-35363c                >    V P                  R V P                  4       R# )zfp = open(path, 'r')
fp.close()N)r   r   r$   s   &r   	test_openSocketEINTRTest.test_opens  s     	:((	*r   c                |    \         P                  ! V\         P                  4      p\         P                  ! V4       R # r,   )r[   r   O_WRONLYr   )r   r   r   s   && r   os_openSocketEINTRTest.os_openy  s!    WWT2;;'
r   netbsdzhangs on NetBSD; see gh-137397c                >    V P                  R V P                  4       R# )z,fd = os.open(path, os.O_RDONLY)
os.close(fd)N)r   r   r$   s   &r   test_os_openSocketEINTRTest.test_os_open}  s    
 	G	&r   r(   N)r?   r@   rA   rB   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   requires_freebsd_versionr[   r   r   skipIfr"   platformr   r   
startswithr  rE   rF   rG   s   @r   r   r      ss    .68LM!- N!-F, 	:<MNB OB,-\,/ 	:<MNA OA-8 %%b!,X.0@A- B --: __S\\X-BD*D* __S\\X-BD__S\\,,X657&7D&r   r   c                   *   a  ] tR tRt o RtR tRtV tR# )TimeEINTRTesti  z!EINTR tests for the time module. c                    \         P                  ! 4       p\         P                  ! V P                  4       V P	                  4        \         P                  ! 4       V,
          pV P                  V4       R # r,   )time	monotonicsleepr:   r)   r=   r   t0dts   &  r   
test_sleepTimeEINTRTest.test_sleep  sG    ^^

4??#^^"#r   r(   N)r?   r@   rA   rB   rC   r  rE   rF   rG   s   @r   r	  r	    s     ,$ $r   r	  pthread_sigmaskzneed signal.pthread_sigmask()c                      a  ] tR tRt o RtR t]P                  ! ]! ]	R4      R4      R 4       t
]P                  ! ]! ]	R4      R4      R 4       tR	tV tR
# )SignalEINTRTesti  z#EINTR tests for the signal module. c                   \         P                  p\         P                   ! VR  4      pV P                  \         P                   W#4       RP                  RR\        P
                  ! 4        2R\        V4       2RV P                  : 2RR34      p\         P                  ! \         P                  V.4       V P                  \         P                  \         P                  V.4       V P                  V4      p\        V4      ;_uu_ 4        V! V4       RRR4       V P                  VP                  4       ^ 4       R#   + '       g   i     L2; i)	c                      R # r,   r(   )r4   s   *r   rb   /SignalEINTRTest.check_sigwait.<locals>.<lambda>  s    $r   ry   r   zpid = z	signum = r|   r   zos.kill(pid, signum)N)r   SIGUSR1r   r   r[   getpidr   r:   r  	SIG_BLOCKSIG_UNBLOCKr2   r	   r   rS   )r   rT   r   old_handlerrM   r   s   &&    r   check_sigwaitSignalEINTRTest.check_sigwait  s    mmF,>?v;yyRYY[M"F}%DOO./$"
  	v//&:..0B0BVHMt$4  f ! 	a( ! s   
	D==E	sigwaitinfozneed signal.sigwaitinfo()c                .    R  pV P                  V4       R# )c                 4    \         P                  ! V .4       R # r,   )r   r   r   s   &r   rT   3SignalEINTRTest.test_sigwaitinfo.<locals>.wait_func  s    x(r   Nr  r   rT   s   & r   test_sigwaitinfo SignalEINTRTest.test_sigwaitinfo  s    	) 	9%r   sigtimedwaitc                .    R  pV P                  V4       R# )c                 6    \         P                  ! V .R 4       R# )g      ^@N)r   r)  r#  s   &r   rT   4SignalEINTRTest.test_sigtimedwait.<locals>.wait_func  s    %0r   Nr%  r&  s   & r   test_sigtimedwait!SignalEINTRTest.test_sigtimedwait  s    	1 	9%r   r(   N)r?   r@   rA   rB   rC   r  r   r   r   r   r'  r-  rE   rF   rG   s   @r   r  r    se      /)0 746&6& 846&6&r   r  c                   p  a  ] tR tRt o RtR t]P                  ! ]P                  R8H  R4      ]P                  ! ]! ]R4      R4      R 4       4       t]P                  ! ]! ]R	4      R
4      R 4       t]P                  ! ]! ]R4      R4      R 4       t]P                  ! ]! ]R4      R4      R 4       tRtV tR# )SelectEINTRTesti  z#EINTR tests for the select module. c                    \         P                  ! 4       p\        P                  ! . . . V P                  4       \         P                  ! 4       V,
          pV P	                  4        V P                  V4       R # r,   )r  r  selectr:   r)   r=   r  s   &  r   test_selectSelectEINTRTest.test_select  sM    ^^b"b$//2^^"#r   r   z(poll may fail on macOS; see issue #28087pollzneed select.pollc                   \         P                  ! 4       p\        P                  ! 4       pVP                  V P                  R ,          4       \        P                  ! 4       V,
          pV P                  4        V P                  V4       R# g     @@N)r2  r5  r  r  r:   r)   r=   r   pollerr  r  s   &   r   	test_pollSelectEINTRTest.test_poll  sY     ^^DOOc)*^^"#r   epollzneed select.epollc                @   \         P                  ! 4       pV P                  VP                  4       \        P
                  ! 4       pVP                  V P                  4       \        P
                  ! 4       V,
          pV P                  4        V P                  V4       R # r,   )
r2  r<  r   r   r  r  r5  r:   r)   r=   r8  s   &   r   
test_epollSelectEINTRTest.test_epoll  sb    %^^DOO$^^"#r   kqueuezneed select.kqueuec                D   \         P                  ! 4       pV P                  VP                  4       \        P
                  ! 4       pVP                  R ^V P                  4       \        P
                  ! 4       V,
          pV P                  4        V P                  V4       R # r,   )
r2  r@  r   r   r  r  controlr:   r)   r=   )r   r@  r  r  s   &   r   test_kqueueSelectEINTRTest.test_kqueue  sf    %^^tQ0^^"#r   devpollzneed select.devpollc                N   \         P                  ! 4       pV P                  VP                  4       \        P
                  ! 4       pVP                  V P                  R ,          4       \        P
                  ! 4       V,
          pV P                  4        V P                  V4       R# r7  )
r2  rE  r   r   r  r  r5  r:   r)   r=   r8  s   &   r   test_devpollSelectEINTRTest.test_devpoll  sh    !%^^DOOc)*^^"#r   r(   N)r?   r@   rA   rB   rC   r3  r   r  r"   r  r   r   r2  r:  r>  rC  rG  rE   rF   rG   s   @r   r0  r0    s     .$ __S\\X-?A02DE$ FA$ 13FG$ H$ 24HI$ J$ 35JK$ L$r   r0  c                      a  ] tR tRt o R t]P                  ! ]P                  ! 4       R8H  R4      R 4       t	R t
RtV tR# )	FCNTLEINTRTesti  c                   V P                  \        P                  \        P                  4       \        P
                  ! 4       w  r4\        P
                  ! 4       w  rVW4WV3 F#  pV P                  \        P                  V4       K%  	  \        P                  ! R \        P                   RV RV RV RV P                   R24      pV P                  WV.R7      p	\        V	4      ;_uu_ 4        \        \        P                  R4      ;_uu_ 4       p
\        P                  ! V^4      pV P                  VR4       \        P                   ! 4       p\        P"                  ! VR	4       V! V
\$        P&                  4       \        P                   ! 4       V,
          pV P)                  4        V P+                  V4       R
R
R
4       V	P-                  4        R
R
R
4       R
#   + '       g   i     L*; i  + '       g   i     R
# ; i)z;
            import fcntl, os, time
            with open('z%', 'wb') as f:
                fcntl.z,(f, fcntl.LOCK_EX)
                os.write(z%, b"ok")
                _ = os.read(z;, 2)  # wait for parent process
                time.sleep(z
)
        r~   wbs   oks   goN)r   r   r   r   r[   r   r   textwrapdedentr:   r2   r	   r   r   r   r  r  r   fcntlLOCK_EXr)   r=   rS   )r   	lock_func	lock_namerd1wr1rd2wr2r   rM   r   fok
start_timer  s   &&&           r   _lockFCNTLEINTRTest._lock  s   	(()*:*:;779779S&BOOBHHb) ' $!(() * k "  E " OO, -	   tCj94  i&&--WWS!_  U+ "^^-
e$
 !U]]+^^%
2!''+ .  IIK# ! -- !  s%   -#G/B*G	:G/G,'G//H 	AIXzAIX returns PermissionErrorc                F    V P                  \        P                  R 4       R# )lockfN)rZ  rO  r^  r$   s   &r   
test_lockfFCNTLEINTRTest.test_lockf!  s    

5;;(r   c                F    V P                  \        P                  R 4       R# )flockN)rZ  rO  rb  r$   s   &r   
test_flockFCNTLEINTRTest.test_flock%  s    

5;;(r   r(   N)r?   r@   rA   rB   rZ  r   r  r  systemr_  rc  rE   rF   rG   s   @r   rJ  rJ    sB      H __X__&%/1NO) P)) )r   rJ  __main__)"rC   
contextlibr    rO  r[   r  r2  r   r   r2   r"   rM  r  r   testr   test.supportr   r   r;   contextmanagerr	   r   r   TestCaser   rJ   r   r	  r  r0  rJ  r?   mainr(   r   r   <module>rm     s      	      
     " &
 	   
WV[13IJ'FH%% 'F K'FT 
WV[13IJp-- p- Kp-f 
WV[13IJu&m u& Ku&p 
WV[13IJ$M $ K$ 
WV[13IJ 
WV%6746)&m )&6 K
)&X 
WV[13IJ5$m 5$ K5$p*)] *)Z zMMO r   