
    /hh                        S SK Jr  S SKrS SKrS SKJr  S SKrS SKrS SKrS SK	J
r
  \
R                  " S5      rS SKJr  S SKJrJrJr  \R&                  \R(                     rS rS	S
.S jrS r0 4S jr " S S\" SS5      5      r\R6                  S 5       r " S S\" SS5      5      r " S S\" SS5      5      rSS.S jrS r S r! " S S\RD                  5      r# " S S \#5      r$ " S! S"\#5      r% " S# S$\#5      r& " S% S&\" S&S'5      5      r'\RP                  " S(5       " S) S*\#5      5       r)\*S+:X  a  \RV                  " 5         gg),    )
namedtupleN)dedent)import_helper_interpchannels)_crossinterp)_interpreters_run_outputclean_up_interpretersc                       [         R                  U 5      u  pU$ ! [         R                   a    [        R                  " S5         Of = fML  )N皙?)	_channelsrecvChannelEmptyErrortimesleep)cidobj	unboundops      B/opt/python-3.13.8/usr/lib/python3.13/test/test__interpchannels.py	recv_waitr      sH    
	&^^C0NC
 J	 ** 	JJsO	 s    *A	A	Funboundc                8    [         R                  " U /UQ76 u  p4U$ N)r   r   )r   r   argsr   r   s        r   recv_nowaitr   *   s    ^^C/$/NCJ    c                     [        XU5        g r   )_run_interp)idsourceshareds      r   
run_interpr#   :   s    F#r   c                     [        U5      n[        R                  " 5       tpEX@:X  a-  [        R                  " 5       tpeXd:w  a  [        e[        X5        g [        R                  " XU5        g r   )r   r   get_mainget_currentRuntimeErrorexec
run_string)r    r!   r"   _mainnsmain_curs          r   r   r   >   sS    F^F%%'HDz++-;V  V4r   c                   <   ^  \ rS rSr\S 5       rSU 4S jjrSrU =r$ )InterpreterK   c                 l    [        X5      (       a  U$ [        U[        5      (       a  U " U5      $ [        er   )
isinstancestrNotImplementedError)clsraws     r   from_rawInterpreter.from_rawM   s.    cJS!!s8O%%r   c                 D  > [         R                  " 5       tp4X#:X  a-  U(       d  SnO US:w  a  [        SR                  U5      5      eUnOFUb  U(       d  SnO9US:X  a  [        S5      eO'U(       a  US:X  a  SnUnO[         R                  " 5       n[
        TU ]  XU5      nU$ )Nr+   z)name mismatch (expected "main", got "{}")interpz!name mismatch (unexpected "main"))r   r%   
ValueErrorformatcreatesuper__new__)r5   namer    r+   r,   self	__class__s         r   r?   Interpreter.__new__V   s     ))+: ?FFtLN NB^ !DEE   DB%%'Bws"-r    NN)	__name__
__module____qualname____firstlineno__classmethodr7   r?   __static_attributes____classcell__rB   s   @r   r/   r/   K   s    & & r   r/   zname idc               #   J   #     S v   g ! [         R                   a     g f = f7fr   )r   ChannelClosedErrorrD   r   r   expect_channel_closedrP   p   s$     +'' s   #	 # # #c                   >   ^  \ rS rSrSU 4S jjrS rS rS rSrU =r	$ )ChannelActionz   c                 L   > U(       d  SnU(       d  Sn[         TU ]  XX#5      nU$ )Nbothr+   r>   r?   )r5   actionendr:   rA   rB   s        r   r?   ChannelAction.__new__|   s(    CFwsC8r   c                 P   U R                   S:X  a&  U R                  S;  a  [        U R                  5      eOKU R                   S;   a&  U R                  S;  a  [        U R                  5      eO[        U R                   5      eU R                  S;  a  [        U R                  5      eg )Nuse)sameoppositesendr   closeforce-close)rU   r\   r]   r^   r   )r+   r\   otherextra)rW   rX   r;   r:   )rA   r   kwargss      r   __init__ChannelAction.__init__   s    ;;%xxCC ** D[[44xxKK ** L T[[));;@@T[[)) Ar   c                 r    U R                   S:X  a  U$ U R                   S:X  a
  US:X  a  S$ S$ U R                   $ )Nr\   r]   r^   r   rX   rA   rX   s     r   resolve_endChannelAction.resolve_end   s9    88vJXX# F]66688Or   c                    U R                   S:X  a  U$ U R                   S:X  a  Uc  [        eU$ U R                   S:X  a  Uc  [        eU$ U R                   S:X  a1  UR                  S:X  a  U$ U(       a  UR                  S:X  a  U$ [        eg )Nr\   rb   rc   r+   )r:   r'   r@   )rA   r:   rb   rc   s       r   resolve_interpChannelAction.resolve_interp   s    ;;& M[[G#}""L[[G#}""L[[F"{{f$5::/"" #r   rD   rE   )
rF   rG   rH   rI   r?   re   rj   rm   rK   rL   rM   s   @r   rR   rR   z   s    
*# #r   rR   zaction end interpc                   N   ^  \ rS rSrSSS.U 4S jjjrS rS rSS.S	 jrS
rU =r	$ )ChannelState   Fclosedc                (   > [         TU ]  XU5      nU$ r   rV   )r5   pendingrs   rA   rB   s       r   r?   ChannelState.__new__   s    wsV4r   c                 P    [        U 5      " U R                  S-   U R                  S9$ N   rr   typeru   rs   rA   s    r   incrChannelState.incr        Dz$,,*4;;??r   c                 P    [        U 5      " U R                  S-
  U R                  S9$ rx   rz   r|   s    r   decrChannelState.decr   r   r   Tforcec                    U R                   (       a  U(       a  U R                  S:X  a  U $ [        U 5      " U(       a  SSS9$ U R                  SS9$ )Nr   Trr   )rs   ru   r{   )rA   r   s     r   r`   ChannelState.close   s=    ;;DLLA-Dzu!tDD$,,tDDr   rD   )r   )
rF   rG   rH   rI   r?   r}   r   r`   rK   rL   rM   s   @r   rp   rp      s1    %  @@ " E Er   rp   zpending closedT
hideclosedc                   UR                   (       a#  US:X  a  US:X  a  UR                  (       a  SnOSnOSn [        XX#5      nU(       a  Se U$ ! [        R                   a#    U(       d  U(       d  e UR                  5       n U$ f = f)Nr[   r   FT.)rs   ru   _run_actionr   rO   r`   )r   rW   rX   stater   
expectfailresults          r   
run_actionr      s    ||U?sf}JJ
S#5 I M '' * Ms   A 3BBc                 T   US:X  a  US:X  a%  [         R                  U SSS9  UR                  5       $ US:X  aM  UR                  (       d!   [         R	                  U 5        [        S5      e[        U 5        UR                  5       $ [        U5      eUS:X  a3  0 nUS	;   a  S
XB'   [         R                  " U 40 UD6  UR                  5       $ US:X  a4  SS
0nUS	;   a  S
XB'   [         R                  " U 40 UD6  UR                  S
S9$ [        U5      e! [         R                   a    Us $ f = f)Nr[   r^      spamFblockingr   zexpected ChannelEmptyErrorr`   r   r^   Tra   r   r   )r   r^   r}   ru   r   	Exceptionr   r   r   r;   r`   )r   rW   rX   r   rd   s        r   r   r      s#   &=NN3%N8::<F]==BNN3' $$@AAC zz|#S/!	7	""FK&v&{{}	=	 T ""FK&v&{{{&&  1 !22 ! L!s   
D D'&D'c                      [         R                  5        H  u  p [         R                  U 5        M     g ! [         R                   a     M7  f = fr   )r   list_alldestroyChannelNotFoundError)r   r,   s     r   clean_up_channelsr      sD    $$&	c" ' -- 		s   5AAc                       \ rS rSrS rSrg)TestBasei  c                 ,    [        5         [        5         g r   )r   r
   r|   s    r   tearDownTestBase.tearDown  s    r   rD   N)rF   rG   rH   rI   r   rK   rD   r   r   r   r     s     r   r   c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)ChannelIDTestsi  c                     [         R                  SSS9nU R                  [        U5      S5        U R                  UR                  S5        g )N
   Tr   rU   )r   _channel_idassertEqualintrX   rA   r   s     r   test_default_kwargs"ChannelIDTests.test_default_kwargs  s?    ##Bd#3S2&&)r   c                    [         R                  SSSS9nU R                  UR                  S5        [         R                  SSSSS9nU R                  UR                  S5        [         R                  SSSS9nU R                  UR                  S5        [         R                  SSSSS	9nU R                  UR                  S5        [         R                  SSSSS9nU R                  UR                  S
5        g )Nr   Tr^   r   r^   Fr^   r   r   r   r   r   )r   r^   r   rU   )r   r   r   rX   r   s     r   test_with_kwargsChannelIDTests.test_with_kwargs  s    ##BT#>&)##BTT#J&)##BT#>&)##BTT#J&)##BTD#I&)r   c                      " S S[         5      n[        R                  U" 5       SS9nU R                  [	        U5      S5        g )Nc                       \ rS rSrS rSrg)*ChannelIDTests.test_coerce_id.<locals>.Inti$  c                     gNr   rD   r|   s    r   	__index__4ChannelIDTests.test_coerce_id.<locals>.Int.__index__%  s    r   rD   N)rF   rG   rH   rI   r   rK   rD   r   r   Intr   $  s    r   r   Tr   r   )r3   r   r   r   r   )rA   r   r   s      r   test_coerce_idChannelIDTests.test_coerce_id#  s;    	# 	 ##CE#6S2&r   c                    U R                  [        [        R                  [	        5       5        U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [
        [        R                  S5        U R                  [        [        R                  S5        g )Ng      $@10s   10l            )assertRaises	TypeErrorr   r   objectr;   OverflowErrorr|   s    r   test_bad_idChannelIDTests.test_bad_id+  s    )Y%:%:FHE)Y%:%:DA)Y%:%:DA)Y%:%:EB*i&;&;R@-)>)>Fr   c                     U R                  [        5         [        R                  SSSS9  S S S 5        g ! , (       d  f       g = f)Nr   Fr^   r   )r   r;   r   r   r|   s    r   test_bad_kwargsChannelIDTests.test_bad_kwargs3  s1    z*!!"5u!= +**s	   5
Ac                     [         R                  [        5      nU R                  [         R                  5         [         R                  [        U5      S-   5        S S S 5        g ! , (       d  f       g = fNry   )r   r=   REPLACEr   r   r   r   r   s     r   test_does_not_exist"ChannelIDTests.test_does_not_exist7  sH    w'y==>!!#c(Q,/ ?>>s   "A$$
A2c                 b    [         R                  SSS9nU R                  [        U5      S5        g )Nr   Tr   r   )r   r   r   r3   r   s     r   test_strChannelIDTests.test_str<  s+    ##Bd#3S4(r   c                    [         R                  SSS9nU R                  [        U5      S5        [         R                  SSSS9nU R                  [        U5      S5        [         R                  SSSS9nU R                  [        U5      S5        [         R                  SSSSS	9nU R                  [        U5      S5        g )
Nr   Tr   zChannelID(10)r   zChannelID(10, send=True)r   zChannelID(10, recv=True)r   )r   r   r   reprr   s     r   	test_reprChannelIDTests.test_repr@  s    ##Bd#3cO4##BT#>c$>?##BT#>c$>?##BTD#IcO4r   c                    [         R                  [        5      n[         R                  [	        U5      5      n[         R                  [        5      nU R                  X:H  5        U R                  X:H  5        U R                  U[	        U5      :H  5        U R                  [	        U5      U:H  5        U R                  U[        [	        U5      5      :H  5        U R                  [        [	        U5      5      U:H  5        U R                  U[        [	        U5      5      S-   :H  5        U R                  U[        [	        U5      5      :H  5        U R                  USS-  :H  5        U R                  U[        S5      :H  5        U R                  US:H  5        U R                  X:H  5        U R                  X:g  5        U R                  X:g  5        U R                  X:g  5        g )Nr        infspam)	r   r=   r   r   r   
assertTruefloatassertFalser3   )rA   cid1cid2cid3s       r   test_equalityChannelIDTests.test_equalityM  si   ($$SY/(%%D	)*D	T)*c$i 001c$i(D01s4y!1C!778SY/0D)u-.(&&&%r   c                    [         R                  [        5      n[         R                  [        5      n[         R                  XSS9  [	        U5      nU R                  X25        U R                  [        U5      [        U5      5        g )NFr   )r   r=   r   r^   r   r   assertIsr{   )rA   chanr   gots       r   test_shareableChannelIDTests.test_shareablec  s`    (w't51$"d3ic+r   rD   N)rF   rG   rH   rI   r   r   r   r   r   r   r   r   r   r   rK   rD   r   r   r   r     s5    ** 'G>0
)5&,,r   r   c                   l   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS r\R"                  " S5      S 5       rS rS rS rS rS rS rS rS rS rS rS rSS.S jrS rS r S  r!S! r"S" r#S# r$S$ r%S% r&S& r'S' r(S( r)S) r*S* r+S+ r,S, r-S- r.S. r/S/ r0S0 r1S1 r2S2 r3S3 r4S4 r5S5 r6S6r7g7)8ChannelTestsip  c                 v    [         R                  [        5      nU R                  U[         R                  5        g r   )r   r=   r   assertIsInstance	ChannelIDr   s     r   test_create_cidChannelTests.test_create_cidr  s(    w'c9#6#67r   c                    [         R                  5        VVs/ s H  u  pUPM	     nnn[         R                  [        5      n[         R                  [        5      n[         R                  [        5      n[         R                  5        VVs/ s H  u  pUPM	     nnnU R	                  U[        U5      S-   5        U R	                  U[        U5      S-   5        U R	                  [        U5      [        U5      -
  XEU15        g s  snnf s  snnf r   )r   r   r=   r   r   r   set)rA   r   r,   beforeid1id2id3afters           r   test_sequential_ids ChannelTests.test_sequential_idsv  s    $-$6$6$89$8&##$89w'w'w'#,#5#5#78#7#78c#hl+c#hl+Uc&k1Cc?C : 9s   DDc                 L   [         R                  " 5       n[        U[        S5      5      n[	        UR                  5       5      n[         R                  " 5       n[        U[        S5      5      n[	        UR                  5       5      nU R                  U[	        U5      S-   5        g )Nzz
            import _interpchannels as _channels
            cid = _channels.create(3)
            print(cid)
            ry   )r   r=   r	   r   r   stripr   )rA   r   outr   r   r   s         r   test_ids_globalChannelTests.test_ids_global  s    ""$#v '   
 399;""$#v '   
 399;s4y1}-r   c                     [         R                  [        5      n[         R                  USS9n[         R                  USS9nU R	                  U/ 5        U R	                  U/ 5        g )NTr^   F)r   r=   r   list_interpretersr   )rA   r   send_interpsrecv_interpss       r   #test_channel_list_interpreters_none0ChannelTests.test_channel_list_interpreters_none  s^     w' 223T2B 223U2Cr*r*r   c                    [         R                  " 5       tp[        R                  [        5      n[        R                  USSS9  [        R                  USS9n[        R                  USS9nU R                  XA/5        U R                  U/ 5        [         R                  " 5       n[        U[        SU S35      5        [        R                  USS9n[        R                  USS9nU R                  XA/5        U R                  XV/5        g )Nr^   Fr   Tr   L
            import _interpchannels as _channels
            _channels.recv()
            )
r   r%   r   r=   r   r^   r   r   r	   r   )rA   interp0r,   r   r   r   interp1s          r   $test_channel_list_interpreters_basic1ChannelTests.test_channel_list_interpreters_basic  s    #,,.w'sFU3 223T2B 223U2Cy1r*&&(GV )5 !%  	
 !223T2B 223U2Cy1y1r   c                 `   [         R                  " 5       tp[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[        R                  [        5      n[        R                  USSS9  [        U[        SU S35      5        [        U[        SU S35      5        [        U[        SU S35      5        [        R                  USS	9n[        R                  USS	9nU R                  [        U5      X15        U R                  [        U5      XE15        g )
Nr^   Fr   L
            import _interpchannels as _channels
            _channels.send(z&, "send", blocking=False)
            r  r  Tr   )r   r%   r=   r   r   r^   r	   r   r   r   r   )	rA   r  r,   r  interp2interp3r   r   r   s	            r   'test_channel_list_interpreters_multiple4ChannelTests.test_channel_list_interpreters_multiple  s-   #,,.&&(&&(&&(w'sFU3GV )5 !%  	 	GV )5 !%  	 	GV )5 !%  	 !223T2B 223U2C\*W,>?\*W,>?r   c                 D   [         R                  " 5       tp[         R                  " 5       n[        R                  [        5      n[        R                  USSS9  [        U[        SU S35      5        [        R                  USS9n[        R                  USS9nU R                  XQ/5        U R                  Xc/5        [         R                  " U5        [        R                  USS9n[        R                  USS9nU R                  XQ/5        U R                  U/ 5        g )Nr^   Fr   r  r  Tr   )r   r%   r=   r   r   r^   r	   r   r   r   r   rA   r  r,   r  r   r   r   s          r   (test_channel_list_interpreters_destroyed5ChannelTests.test_channel_list_interpreters_destroyed  s   #,,.&&(w'sFU3GV )5 !%  	
 !223T2B 223U2Cy1y1g& 223T2B 223U2Cy1r*r   c                    [         R                  " 5       tp[         R                  " 5       n[         R                  " 5       n[        R                  [        5      n[        R                  USSS9  [        U[        SU S35      5        [        R                  USSS9  [        U[        SU S35      5        [        R                  USS9n[        R                  USS9nU R                  [        U5      S5        U R                  [        U5      S	5        [        R                  USS9  [        R                  USS9n[        R                  USS9nU R                  [        U5      S
5        U R                  [        U5      S	5        [        U[        SU S35      5        [        R                  USS9n[        R                  USS9nU R                  [        U5      S
5        U R                  Xs/5        g )NdataFr   r  r  Tr   ry   r   r   O
            import _interpchannels as _channels
            _channels.release()r   r%   r=   r   r   r^   r	   r   r   r   lenrelease)rA   r  r,   r  r
  r   r   r   s           r   'test_channel_list_interpreters_released4ChannelTests.test_channel_list_interpreters_released  s    $,,.&&(&&(w'sFU3GV )5 !%  	 	sFU3GV )5 !%  	
 !223T2B 223U2C\*A.\*A. 	#D) 223T2B 223U2C\*A.\*A. 	GV )"e $%  	
 !223T2B 223U2C\*A.y1r   c                    [         R                  " 5       tp[         R                  " 5       n[        R                  [        5      n[        R                  USSS9  [        R                  USS9n[        R                  USS9nU R                  [        U5      S5        U R                  [        U5      S5        [        R                  USS9  U R                  [        R                  5         [        R                  USS9  S S S 5        U R                  [        R                  5         [        R                  USS9  S S S 5        g ! , (       d  f       NK= f! , (       d  f       g = f)	Nr^   Fr   Tr   ry   r   r   )r   r%   r=   r   r   r^   r   r   r  r`   r   rO   r  s          r   %test_channel_list_interpreters_closed2ChannelTests.test_channel_list_interpreters_closed  s   #,,.&&(w'sFU3 !223T2B 223U2C\*A.\*A. 	4(y;;<''$'7 =y;;<''%'8 =< =<<<s   +E'E
E
E$c                    [         R                  " 5       tp[         R                  " 5       n[        R                  [        5      n[        R                  USSS9  [        R                  USS9n[        R                  USS9nU R                  [        U5      S5        U R                  [        U5      S5        [        R                  USS9  U R                  [        R                  5         [        R                  USS9  S S S 5        [        R                  USS9nU R                  [        U5      S5        [        U[        SU S	35      5        g ! , (       d  f       NW= f)
Nr^   Fr   Tr   ry   r   M
            import _interpchannels as _channels
            _channels.close(, force=True)
            )r   r%   r=   r   r   r^   r   r   r  r`   r   rO   r	   r   r  s          r   .test_channel_list_interpreters_closed_send_end;ChannelTests.test_channel_list_interpreters_closed_send_end%  s7   #,,.&&(w'sFU3 !223T2B 223U2C\*A.\*A. 	$'y;;<''$'7 = !223U2C\*A. 	GV ) E "%  	 	 =<s   +E
Ec                 P   [         R                  [        5      n/ SQnU Hq  nU R                  U5         [         R	                  XSS9  [        U5      nU R                  XC5        U R                  [        U5      [        U5      5        S S S 5        Ms     g ! , (       d  f       M  = f)N)Nr   r   *   Fr   )	r   r=   r   subTestr^   r   r   r   r{   )rA   r   objectsr   r   s        r   test_allowed_typesChannelTests.test_allowed_typesH  s~    w'
 Cc"s%8!#&  *d3ic3 #" ""s   AB
B%	c                 T   [         R                  [        5      n[        R                  " 5       n[        R                  " U[        UR                  S95        [        U[        S5      5      n[        U5      nU R                  US5        U R                  UR                  5       S5        g )Nr   z
            import _interpchannels as _channels
            print(cid.end)
            _channels.send(cid, b'spam', blocking=False)
            r   r^   )r   r=   r   r   set___main___attrsdictr^   r	   r   r   r   r   rA   r   r:   r   r   s        r   test_run_string_arg_unresolved+ChannelTests.test_run_string_arg_unresolved[  s    w'%%'((#((1CD&& * # 
 #g&f-r   z(disabled until high-level channels existc                 P   [         R                  [        5      n[         R                  USS9n[        R                  " 5       n[        U[        S5      [        UR                  S95      n[        U5      nU R                  US5        U R                  UR                  5       S5        g )NT)_resolvez
            import _interpchannels as _channels
            print(chan.id.end)
            _channels.send(chan.id, b'spam', blocking=False)
            )r   r   r^   )r   r=   r   r   r   r	   r   r*  r^   r   r   r   r+  s        r   test_run_string_arg_resolved)ChannelTests.test_run_string_arg_resolvedm  s    w'##C$#7%%'&& * #
 chh! #g&f-r   c                     [         R                  [        5      nSn[         R                  XSS9  [	        U5      nU R                  X25        U R                  X25        g Nr   Fr   )r   r=   r   r^   r   r   assertIsNot)rA   r   origr   s       r   test_send_recv_main ChannelTests.test_send_recv_main  sM    w's51###r   c                 X    [         R                  " 5       n[        U[        S5      5      ng )Na%  
            import _interpchannels as _channels
            cid = _channels.create(REPLACE)
            orig = b'spam'
            _channels.send(cid, orig, blocking=False)
            obj, _ = _channels.recv(cid)
            assert obj is not orig
            assert obj == orig
            )r   r=   r	   r   )rA   r   r   s      r   test_send_recv_same_interpreter,ChannelTests.test_send_recv_same_interpreter  s(    ""$#v '   r   c                     [         R                  [        5      n[        R                  " 5       n[	        U[        SU S35      5      n[        U5      nU R                  US5        g )Nr	  ', b'spam', blocking=False)
            r   )r   r=   r   r   r	   r   r   r   )rA   r   r   r   r   s        r   %test_send_recv_different_interpreters2ChannelTests.test_send_recv_different_interpreters  sc    w'""$#v +5 !'    #g&r   c                   ^ [         R                  [        5      mU4S jn[        R                  " US9nUR                  5         [         R                  TS5        [        T5      nUR                  5         U R                  US5        g )Nc                  H   > [        T5      n [        R                  TU 5        g r   )r   r   r^   )r   r   s    r   f8ChannelTests.test_send_recv_different_threads.<locals>.f  s    C.CNN3$r   targetr   )
r   r=   r   	threadingThreadstartr^   r   joinr   )rA   rA  tr   r   s       @r    test_send_recv_different_threads-ChannelTests.test_send_recv_different_threads  sc    w'	% A&		sG$n	g&r   c                 H  ^^^ [         R                  [        5      m[        R                  " 5       mS mUUU4S jn[        R
                  " US9nUR                  5         [         R                  TS5        [        T5      nUR                  5         U R                  US5        g )Nc            
      >   > [        T[        ST  ST  S35      5      mg )Nz
                import time
                import _interpchannels as _channels
                while True:
                    try:
                        obj, _ = _channels.recv(z)
                        break
                    except _channels.ChannelEmptyError:
                        time.sleep(0.1)
                assert(obj == b'spam')
                _channels.send(z, b'eggs')
                )r	   r   )r   r   r   s   r   rA  IChannelTests.test_send_recv_different_interpreters_and_threads.<locals>.f  s8    c6 /1
 25 6 
 !$u %+ $ Cr   rC  r      eggs)r   r=   r   r   rE  rF  rG  r^   r   rH  r   )rA   rA  rI  r   r   r   r   s       @@@r   1test_send_recv_different_interpreters_and_threads>ChannelTests.test_send_recv_different_interpreters_and_threads  sv    w'""$	 A&		sG$n	g&r   c                     U R                  [        R                  5         [        R                  SS5        S S S 5        g ! , (       d  f       g = f)Nr   r   )r   r   r   r^   r|   s    r   test_send_not_found ChannelTests.test_send_not_found  s0    y==>NN2w' ?>>s   A  
Ac                     U R                  [        R                  5         [        R                  S5        S S S 5        g ! , (       d  f       g = fr   )r   r   r   r   r|   s    r   test_recv_not_found ChannelTests.test_recv_not_found  s.    y==>NN2 ?>>s	   ?
Ac                     [         R                  [        5      nU R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       g = fr   )r   r=   r   r   r   r   r   s     r   test_recv_emptyChannelTests.test_recv_empty  s>    w'y::;NN3 <;;s   A
A&c                 J   [        5       n[        R                  [        5      n[	        X!5      n[        R                  US SS9  [        R                  USSS9  [        R                  USSS9  [        R                  USSS9  [	        X!5      n[	        X!5      n[	        U5      n[	        X!5      n[	        X!5      nU R                  X15        U R                  US 5        U R                  US5        U R                  US5        U R                  US5        U R                  X5        g )NFr   ry   r   rO  )r   r   r=   r   r   r^   r   r   )	rA   defaultr   obj1obj2obj3obj4obj5obj6s	            r   test_recv_defaultChannelTests.test_recv_default  s    (w'3(sD51sA.sGe4sGe43(3(33(3(d$dD!q!w'w'd$r   c           	         U R                  S5         [        R                  [        5      n[        R                  " 5       n[        R
                  " U[        SU S35      5        [        R                  " U5        U R                  [        SU S35         [        R                  U5        S S S 5        AS S S 5        U R                  S5         [        R                  [        5      n[        R                  " 5       n[        R
                  " U[        SU S35      5        [        R                  USSS	9  [        R                  " U5        [        US
S9  [        USS9  U R                  [        SU S35         [        R                  U5        S S S 5        AS S S 5        g ! , (       d  f       N= f! , (       d  f       GN= f! , (       d  f       N;= f! , (       d  f       g = f)Nrs   zT
                import _interpchannels as _channels
                _channels.send(z+, b'spam', blocking=False)
                zchannel z
 is closedz
still openrO  Fr   Tr   z	 is empty)r#  r   r=   r   r   r)   r   r   assertRaisesRegexr'   r   r^   r   )rA   r   r:   r   s       r   "test_recv_sending_interp_destroyed/ChannelTests.test_recv_sending_interp_destroyed  s   \\(###G,D"))+F$$VV 9  $v &5 .  !!&)''*24&
(CEt$E  $ \\,'##G,D"))+F$$VV 9  $v &5 .  NN45N9!!&)d+e,''*24&	(BDt$D  ('	E E $#2D D ('sI   BF2F!+	F2B,G9G	G!
F/	+F22
G
G	G
G#c                 R   [        S5      n[        R                  [        5      n[        R	                  X!SS9  [        U5      nU R                  X15        U R                  U[        5        U R                  X15        SUSS& U R                  X15        SUSS& U R                  X15        g )Ns   spamspamspamFr   rO        s   ham.)
	bytearrayr   r=   r   send_bufferr   r4  r   
memoryviewr   )rA   bufr   r   s       r   test_send_bufferChannelTests.test_send_buffer  s    (w'c7#"c:."Aa"Aa"r   Fbufferc                  ^ U(       a  [         R                  nO[         R                  n[         R                  [        5      n [
        R                  " 5       nU" XASS9  [
        R                  " 5       n[        U5        [         R                  U5        Xe-
  mTS-  mU4S jnU$ ! [         R                  U5        f = f)NFr      c                  2   > [         R                  " T 5        g r   )r   r   )delays   r   wait,ChannelTests.build_send_waiter.<locals>.wait5  s    JJur   )	r   rm  r^   r=   r   r   	monotonicr   r   )	rA   r   rs  r^   r   startedstoppedrx  rw  s	           @r   build_send_waiterChannelTests.build_send_waiter"  s     ((D>>Dw'	#nn&GE*nn&Gc"!
	 c"s   <B& &B=c                 ,  ^^^ S mSnU R                  U5      m[        R                  [        5      mUUU4S jn[        R
                  " US9nUR                  5         [        R                  TUSS9  UR                  5         U R                  TU5        g )Nr   c                  *   > T" 5         [        T 5      mg r   r   r   receivedrx  s   r   rA  2ChannelTests.test_send_blocking_waiting.<locals>.f>      F ~Hr   rC  Tr   )
r}  r   r=   r   rE  rF  rG  r^   rH  r   rA   r   rA  rI  r   r  rx  s       @@@r   test_send_blocking_waiting'ChannelTests.test_send_blocking_waiting9  sx    %%c*w'	& A&		sC$/	3'r   c                 <  ^^^ S m[        S5      nU R                  USS9m[        R                  [        5      mUUU4S jn[
        R                  " US9nUR                  5         [        R                  TUSS9  UR                  5         U R                  TU5        g )Nr   Trr  c                  *   > T" 5         [        T 5      mg r   r  r  s   r   rA  9ChannelTests.test_send_buffer_blocking_waiting.<locals>.fN  r  r   rC  r   )rl  r}  r   r=   r   rE  rF  rG  rm  rH  r   r  s       @@@r   !test_send_buffer_blocking_waiting.ChannelTests.test_send_buffer_blocking_waitingI  s     %%c$%7w'	& A&		c36	3'r   c                   ^^ S mSn[         R                  [        5      mUU4S jn[        R                  " US9nUR                  5         [         R                  TUSS9  UR                  5         U R                  TU5        g )Nr   c                     > [        T 5      mg r   r  r   r  s   r   rA  2ChannelTests.test_send_blocking_no_wait.<locals>.f]       ~Hr   rC  Tr   )	r   r=   r   rE  rF  rG  r^   rH  r   rA   r   rA  rI  r   r  s       @@r   test_send_blocking_no_wait'ChannelTests.test_send_blocking_no_waitY  sh    w'	& A&		sC$/	3'r   c                   ^^ S m[        S5      n[        R                  [        5      mUU4S jn[        R
                  " US9nUR                  5         [        R                  TUSS9  UR                  5         U R                  TU5        g )Nr   c                     > [        T 5      mg r   r  r  s   r   rA  9ChannelTests.test_send_buffer_blocking_no_wait.<locals>.fk  r  r   rC  Tr   )
rl  r   r=   r   rE  rF  rG  rm  rH  r   r  s       @@r   !test_send_buffer_blocking_no_wait.ChannelTests.test_send_buffer_blocking_no_waitg  sp     w'	& A&		c36	3'r   c           	        ^ SnU R                  S5         [        R                  [        5      mU R	                  [
        5         [        R                  TUSSS9  S S S 5        S S S 5        U R                  S5         [        R                  [        5      mU R	                  [        5         [        R                  TUSSS9  S S S 5        U R	                  [        R                  5         [        T5      n[        [        U5      5        S S S 5        S S S 5        U R                  S5         [        R                  [        5      mU4S	 jn[        R                  " US
9nUR                  5         [        R                  TUSSS9  UR                  5         S S S 5        g ! , (       d  f       GNI= f! , (       d  f       GNS= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   non-blocking with timeoutFr   r   timeouttimeout hitTtimeout not hitc                     > [        T 5        g r   r  r(  s   r   rA  )ChannelTests.test_send_timeout.<locals>.f  
    #r   rC  r   )r#  r   r=   r   r   r;   r^   TimeoutErrorr   r   printr   rE  rF  rG  rH  rA   r   r  rA  rI  r   s        @r   test_send_timeoutChannelTests.test_send_timeoutu  sa   \\56""7+C"":.sC%E / 7
 \\-(""7+C""<0sC$D 1""9#>#>?&s+d8n% @	 ) \\+,""7+C  *AGGINN3dBN?FFH -, /. 76 10??	 )( -,sl   /F/FF/</G$+G'G$) G	G$*A*G5
F,	'F//
F>
G	G$
G!	G$$
G25
Hc           	        ^  U R                     SU l         [	        S5      nU R                  S5         [        R                  [        5      mU R                  [        5         [        R                  TUSSS9  S S S 5        S S S 5        U R                  S5         [        R                  [        5      mU R                  [        5         [        R                  TUSSS9  S S S 5        U R                  [        R                  5         [        T5      n[        [!        U5      5        S S S 5        S S S 5        U R                  S	5         [        R                  [        5      mU4S
 jn["        R$                  " US9nUR'                  5         [        R                  TUSSS9  UR)                  5         S S S 5        g ! [         a    [        R                  " S5      ef = f! , (       d  f       GNm= f! , (       d  f       GNw= f! , (       d  f       GN*= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)NT#temporarily skipped due to refleaksr   r  Fr   r  r  r  c                     > [        T 5        g r   r  r(  s   r   rA  0ChannelTests.test_send_buffer_timeout.<locals>.f  r  r   rC  r   )_has_run_once_timeoutAttributeErrorunittestSkipTestrl  r#  r   r=   r   r   r;   rm  r  r   r   r  r   rE  rF  rG  rH  r  s        @r   test_send_buffer_timeout%ChannelTests.test_send_buffer_timeout  s   
	.&& *.D& \\56""7+C"":.%%c3%L / 7
 \\-(""7+C""<0%%c3s%K 1""9#>#>?&s+d8n% @	 ) \\+,""7+C  *AGGI!!#sT2!FFFH -,3  	K ##$IJJ	K /. 76 10??	 )( -,sw   F: /G0!G8G0/H%H'H% H&H%A*H6:!G
G-	(G00
G?
H	H%
H"	H%%
H36
Ic           	      d  ^^ SnU R                  U5      mU R                  S5         [        R                  [        5      mUU4S jn[
        R                  " US9nUR                  5         U R                  [        R                  5         [        R                  TUSS9  S S S 5        UR                  5         S S S 5        U R                  S5         [        R                  [        5      mUU4S jn[
        R                  " US9nUR                  5         U R                  [        R                  5         [        R                  TUSS	S
9  S S S 5        UR                  5         S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NI= f! , (       d  f       g = f)Nr   without timeoutc                  <   > T" 5         [         R                  T SS9  g NTr   r   r`   r   rx  s   r   rA  6ChannelTests.test_send_closed_while_waiting.<locals>.f      40r   rC  Tr   with timeoutc                  <   > T" 5         [         R                  T SS9  g r  r  r  s   r   rA  r    r  r      r  )r}  r#  r   r=   r   rE  rF  rG  r   rO   r^   rH  rA   r   rA  rI  r   rx  s       @@r   test_send_closed_while_waiting+ChannelTests.test_send_closed_while_waiting  s2   %%c*\\+,""7+C1   *AGGI""9#?#?@sC$7 AFFH - \\.)""7+C1   *AGGI""9#?#?@sC$C AFFH *)	 A@ -,$ A@ *)sI   A$E?E.!E?A$F!6FF!.
E<	8E??
F
F	F!!
F/c           	        ^^  U R                     SU l         [	        S5      nU R                  USS9mU R                  S5         [        R                  [        5      mUU4S jn[        R                  " US9nUR                  5         U R                  [        R                  5         [        R                  TUSS9  S S S 5        UR!                  5         S S S 5        U R                  S	5         [        R                  [        5      mUU4S
 jn[        R                  " US9nUR                  5         U R                  [        R                  5         [        R                  TUSSS9  S S S 5        UR!                  5         S S S 5        g ! [         a    [        R                  " S5      ef = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nm= f! , (       d  f       g = f)NTr  r   rr  r  c                  <   > T" 5         [         R                  T SS9  g r  r  r  s   r   rA  =ChannelTests.test_send_buffer_closed_while_waiting.<locals>.f  r  r   rC  r   r  c                  <   > T" 5         [         R                  T SS9  g r  r  r  s   r   rA  r    r  r   r  r  )_has_run_once_closedr  r  r  rl  r}  r#  r   r=   r   rE  rF  rG  r   rO   rm  rH  r  s       @@r   %test_send_buffer_closed_while_waiting2ChannelTests.test_send_buffer_closed_while_waiting  s   
	-%% )-D% %%c$%7\\+,""7+C1   *AGGI""9#?#?@%%c3%> AFFH - \\.)""7+C1   *AGGI""9#?#?@%%c3r%J AFFH *)1  	K ##$IJJ	K( A@ -,$ A@ *)sU   F
 A$F?'F.=F?.A$G!G)G!
!F+.
F<	8F??
G
G	G!!
G/c                    [         R                  [        5      n[         R                  USSS9  [	        U5        [         R                  U5        U R                  [         R                  5         [         R                  US5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = fNr   Fr   rO  	r   r=   r   r^   r   r`   r   rO   r   r   s     r   test_close_single_user#ChannelTests.test_close_single_user  s    w'sGe4Cy;;<NN3( =y;;<NN3 =< =<<<   .C,C
C
C*c                 l   [         R                  [        5      n[        R                  " 5       n[        R                  " 5       n[        R                  " U[        SU S35      5        [        R                  " U[        SU S35      5        [         R                  U5        [        R                  " U[        SU S35      5      nU R                  UR                  R                  S5        [        R                  " U[        SU S35      5      nU R                  UR                  R                  S5        g )Nr	  r<  r  r  z 
                _channels.send(z, b'spam')
                rO   )
r   r=   r   r   r)   r   r`   r   r{   rF   )rA   r   r   r   excsnaps        r   test_close_multiple_users&ChannelTests.test_close_multiple_users  s(   w'""$""$  f 25 !. ' 	 	  f 25 !. ' 	 	**3 <  #u %8 1  	..0DE**3 <  #u %8 1  	..0DEr   c                 <   [         R                  [        5      n[         R                  USSS9  [	        U5        [         R                  U5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       g = fr3  )r   r=   r   r^   r   r`   r   rO   r   s     r   test_close_multiple_times&ChannelTests.test_close_multiple_times  sd    w'sGe4Cy;;<OOC  =<<   .B
Bc                 R   / SQnU H  u  p#U R                  X#45         [        R                  [        5      n[        R	                  USSS9  [        U5        [        R                  XBUS9  U R                  [        R                  5         [        R	                  US5        S S S 5        U R                  [        R                  5         [        R                  U5        S S S 5        S S S 5        M     g ! , (       d  f       NX= f! , (       d  f       N,= f! , (       d  f       GM  = f)N))FFTF)FT)TTr   Fr   r   rO  )
r#  r   r=   r   r^   r   r`   r   rO   r   )rA   testsr^   r   r   s        r   test_close_emptyChannelTests.test_close_empty"  s      JDtl+&&w/sGe<C T:&&y'C'CDNN30 E&&y'C'CDNN3' E ,+   EDDD ,+s<   A-DC4"'D	DD4
D>D
DD
D&	c                 f   [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  U R	                  [         R
                  5         [         R                  U5        S S S 5        [        U5        [         R                  USSS9  g ! , (       d  f       N/= f)Nr   Fr      hamrO  r   r=   r   r^   r   ChannelNotEmptyErrorr`   r   r   s     r   %test_close_defaults_with_unused_items2ChannelTests.test_close_defaults_with_unused_items5  s~    w'sGe4sFU3y==>OOC  ?CsGe4 ?>s   #B""
B0c                    [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  U R	                  [         R
                  5         [         R                  USS9  S S S 5        [        U5        [         R                  USSS9  [        U5        [        U5        [         R                  USS9  g ! , (       d  f       NY= f)Nr   Fr   r  Tr   rO  r  r   s     r   *test_close_recv_with_unused_items_unforced7ChannelTests.test_close_recv_with_unused_items_unforced?  s    w'sGe4sFU3y==>OOCdO+ ?CsGe4CC$' ?>s   #C
Cc                    [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  [         R	                  USS9  U R                  [         R                  5         [         R                  US5        S S S 5        [        U5        [        U5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       Nb= f! , (       d  f       g = f)Nr   Fr   r  Tr   rO  )	r   r=   r   r^   r`   r   rO   r   r   r   s     r   *test_close_send_with_unused_items_unforced7ChannelTests.test_close_send_with_unused_items_unforcedL  s    w'sGe4sFU3$'y;;<NN3( =CCy;;<NN3 =<	 =< =<s   7C*C;*
C8;
D	c                    [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  U R	                  [         R
                  5         [         R                  USSS9  S S S 5        [        U5        [         R                  USSS9  [        U5        [        U5        [         R                  USS9  g ! , (       d  f       NY= f)	Nr   Fr   r  Tr   rO  r  r  r   s     r   *test_close_both_with_unused_items_unforced7ChannelTests.test_close_both_with_unused_items_unforcedY  s    w'sGe4sFU3y==>OOCdO6 ?CsGe4CC$' ?>s   #C
Cc                    [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  [         R	                  USSS9  U R                  [         R                  5         [         R                  US5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = f)Nr   Fr   r  Tr   rO  r   r=   r   r^   r`   r   rO   r   r   s     r   (test_close_recv_with_unused_items_forced5ChannelTests.test_close_recv_with_unused_items_forcedf      w'sGe4sFU3$d3y;;<NN3( =y;;<NN3 =< =<<<   8C6C&
C#&
C4c                    [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  [         R	                  USSS9  U R                  [         R                  5         [         R                  US5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = f)Nr   Fr   r  Tr   rO  r  r   s     r   (test_close_send_with_unused_items_forced5ChannelTests.test_close_send_with_unused_items_forcedq  r  r  c                    [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  [         R	                  USSSS9  U R                  [         R                  5         [         R                  US5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = f)Nr   Fr   r  Tr   rO  r  r   s     r   (test_close_both_with_unused_items_forced5ChannelTests.test_close_both_with_unused_items_forced|  s    w'sGe4sFU3$T>y;;<NN3( =y;;<NN3 =< =<<<s   9C7C'
C$'
C5c                    [         R                  [        5      n[         R                  U5        U R	                  [         R
                  5         [         R                  US5        S S S 5        U R	                  [         R
                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = fNr   )r   r=   r   r`   r   rO   r^   r   r   s     r   test_close_never_used"ChannelTests.test_close_never_used  s}    w'y;;<NN3( =y;;<NN3 =< =<<<   B+B<+
B9<
C
c                 
   [         R                  [        5      n[         R                  USSS9  [        R                  " 5       n[        R
                  " U[        SU S35      5        U R                  [         R                  5         [         R                  U5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = f)Nr   Fr   r  r  )r   r=   r   r^   r   r)   r   r   rO   r   r`   rA   r   r:   s      r   !test_close_by_unassociated_interp.ChannelTests.test_close_by_unassociated_interp  s    w'sGe4%%'   5 E "1 * 	 y;;<NN3 =y;;<OOC  =< =<<<s   C#C4#
C14
Dc                 ,   [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  [         R                  USSS9  [	        U5        [         R                  USS9  U R                  [         R                  5         [         R                  US5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = f)Nr   Fr   Tr   rO  r  r   s     r   -test_close_used_multiple_times_by_single_user:ChannelTests.test_close_used_multiple_times_by_single_user  s    w'sGe4sGe4sGe4C4(y;;<NN3( =y;;<NN3 =< =<<<s   C4D4
D
Dc                    [         R                  [        5      nU R                  [         R                  5         [         R                  SSS9  S S S 5        [         R                  U5        U R                  [         R                  5         [         R                  USS9  S S S 5        g ! , (       d  f       N`= f! , (       d  f       g = f)Nr   Tr   )r   r=   r   r   r   r   r`   rO   r   s     r   .test_channel_list_interpreters_invalid_channel;ChannelTests.test_channel_list_interpreters_invalid_channel  s    w'y==>''4'8 ? 	y;;<''$'7 =< ?>
 =<s   B(
B9(
B69
Cc                     [         R                  [        5      nU R                  [        5         [         R                  U5        S S S 5        g ! , (       d  f       g = fr   )r   r=   r   r   r   r   r   s     r   +test_channel_list_interpreters_invalid_args8ChannelTests.test_channel_list_interpreters_invalid_args  s:    w'y)'', *))s   A
A)r  r  N)8rF   rG   rH   rI   r   r   r   r   r  r  r  r  r  r  r%  r,  r  skipr0  r6  r9  r=  rJ  rP  rS  rV  rY  rc  rg  rp  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rK   rD   r   r   r   r   p  s   8	D.&+2,@4+.)2V9,!9F4&.$ ]]=>. ?.&$
	'''8( 
%*D#$ 05 .( ( ((2#J4$R	 F0!(&5( (	 	 	  ! 	8-r   r   c                   T    \ rS rSr  S rS rS rS rS rS r	S r
S	 rS
 rS rSrg)ChannelReleaseTestsi  c                    [         R                  [        5      n[         R                  USSS9  [	        U5        [         R                  USSS9  U R                  [         R                  5         [         R                  US5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = fNr   Fr   Tr   rO  	r   r=   r   r^   r   r  r   rO   r   r   s     r   test_single_user$ChannelReleaseTests.test_single_user  s    w'sGe4C#Dt4y;;<NN3( =y;;<NN3 =< =<<<r  c           
         [         R                  [        5      n[        R                  " 5       n[        R                  " 5       n[        R                  " U[        SU S35      5        [        U[        SU SU S35      5      n[        R                  " U[        SU S35      5        U R                  UR                  5       S5        g )	Nr	  r<  zU
            import _interpchannels as _channels
            obj, _ = _channels.recv(z )
            _channels.release(z+)
            print(repr(obj))
            z
            _channels.release(r  zb'spam')	r   r=   r   r   r)   r   r	   r   r   )rA   r   r   r   r   s        r   test_multiple_users'ChannelReleaseTests.test_multiple_users  s    w'""$""$  f 25 !. ' 	 #v +%%(E *"e $'    	  f 2"e $. ' 	 	i0r   c                    [         R                  [        5      n[         R                  USSS9  [	        U5        [         R                  U5        U R                  [         R                  5         [         R                  US5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = fr  r  r   s     r   test_no_kwargs"ChannelReleaseTests.test_no_kwargs  s    w'sGe4C#y;;<NN3( =y;;<NN3 =< =<<<r  c                 <   [         R                  [        5      n[         R                  USSS9  [	        U5        [         R                  USSS9  U R                  [         R                  5         [         R                  USSS9  S S S 5        g ! , (       d  f       g = f)Nr   Fr   Tr   )r   r=   r   r^   r   r  r   rO   r   s     r   test_multiple_times'ChannelReleaseTests.test_multiple_times  sv    w'sGe4C#Dt4y;;<c48 =<<r  c                 P   [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  [         R	                  USSS9  U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       g = f)Nr   Fr   r  Tr   )r   r=   r   r^   r  r   rO   r   r   s     r   test_with_unused_items*ChannelReleaseTests.test_with_unused_items  sw    w'sGe4sFU3#Dt4y;;<NN3 =<<s   8B
B%c                    [         R                  [        5      n[         R                  U5        U R	                  [         R
                  5         [         R                  US5        S S S 5        U R	                  [         R
                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = fr  )r   r=   r   r  r   rO   r^   r   r   s     r   test_never_used#ChannelReleaseTests.test_never_used#  s    w'#y;;<NN3( =y;;<NN3 =< =<<<r  c                    [         R                  [        5      n[         R                  USSS9  [        R                  " 5       n[        R
                  " U[        SU S35      5        [        U5      n[         R                  U5        U R                  [         R                  5         [         R                  US5        S S S 5        U R                  US5        g ! , (       d  f       N!= f)Nr   Fr   r  r  rO  )r   r=   r   r^   r   r)   r   r   r  r   rO   r   )rA   r   r:   r   s       r   test_by_unassociated_interp/ChannelReleaseTests.test_by_unassociated_interp,  s    w'sGe4%%'   5"e $1 * 	 ##y;;<NN3( =g& =<s   'C
C'c           
      J   [         R                  [        5      n[        R                  " 5       n[        R                  " U[        SU SU S35      5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       g = f)NzR
            import _interpchannels as _channels
            obj = _channels.send(z9, b'spam', blocking=False)
            _channels.release(r  )	r   r=   r   r   r)   r   r   rO   r   r  s      r   test_close_if_unassociated.ChannelReleaseTests.test_close_if_unassociated;  s    w'%%'   5""% '"e $1 * 	 y;;<NN3 =<<s   5B
B"c                    [         R                  [        5      n[         R                  US SS9  [	        U5        [         R                  USSS9  [         R                  USS9  [	        U5      nU R                  US5        g )NFr   r   Tr   )r   r=   r   r^   r   r  r   )rA   r   r   s      r   test_partially"ChannelReleaseTests.test_partiallyH  sk    w'sD51CsGe4#D)#g&r   c                 .   [         R                  [        5      n[         R                  USSS9  [         R                  USSS9  [         R                  USSS9  [	        U5        [         R                  USSS9  U R                  [         R                  5         [         R                  US5        S S S 5        U R                  [         R                  5         [         R                  U5        S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = fr  r  r   s     r   'test_used_multiple_times_by_single_user;ChannelReleaseTests.test_used_multiple_times_by_single_userS  s    w'sGe4sGe4sGe4C#Dt4y;;<NN3( =y;;<NN3 =< =<<<s   C5D5
D
DrD   N)rF   rG   rH   rI   r  r  r  r  r  r  r!  r$  r'  r*  rK   rD   r   r   r  r    s>    $"	 1(	 9  ' 	' r   r  c                      ^  \ rS rSrSrU 4S jr\S 5       r\S 5       rS r	SS jr
S rS	 rS
 rS rS rS rSrU =r$ )ChannelCloseFixtureia  Fc                 v  > U R                   (       a  0 nOe[        R                  U5      n[        R                  U5      n[        R                  U5      nUR                  UUR                  UUR                  U0nU(       d  Sn[        TU ]  XX#XE5      n[        5       Ul        [        5       Ul	        Xgl
        U$ )Nr\   )QUICKr/   r7   r@   r>   r?   r   _preppedrp   _state_known)	r5   rX   r:   rb   rc   creatorknownrA   rB   s	           r   r?   ChannelCloseFixture.__new__h  s    99E ))&1F((/E((/EV

E

EE
 GwsG"nr   c                     U R                   $ r   r1  r|   s    r   r   ChannelCloseFixture.state}  s    {{r   c                      U R                   $ ! [         a@    U R                  U R                  5      nU R	                  U5      U l         U R                   s $ f = fr   )_cidr  _get_interpreterr3  _new_channel)rA   r3  s     r   r   ChannelCloseFixture.cid  sP    	99 	++DLL9G))'2DI99	s    AAAc                 J    U R                  U5      nU R                  U5        U$ r   )r;  _prep_interpreterrA   r:   s     r   get_interpreter#ChannelCloseFixture.get_interpreter  s%    &&v.v&r   c                     Uc  U R                   nUS:X  a  U R                  R                  S:X  a  g[        U R                  R                  5      $ )Nr   r^   F)rX   r   rs   boolri   s     r   expect_closed_error'ChannelCloseFixture.expect_closed_error  s@    ;((C&=TZZ..&8DJJ%%&&r   c                 &    U R                  U5        g r   )r?  r@  s     r   prep_interpreter$ChannelCloseFixture.prep_interpreter  s    v&r   c                     X l         g r   r7  )rA   rW   r   s      r   record_action!ChannelCloseFixture.record_action  s    r   c                 ,    [        5         [        5         g r   )r
   r   r|   s    r   clean_upChannelCloseFixture.clean_up  s    r   c                     UR                   S:X  a  [        R                  [        5      $ [        R                  [        5      n[	        UR
                  SU S35        [        U5      U l        U R                  $ )Nr+   z
                import _interpreters
                cid = _xxsubchannels.create()
                # We purposefully send back an int to avoid tying the
                # channel to the other interpreter.
                _xxsubchannels.send(zN, int(cid), blocking=False)
                del _interpreters
                )r@   r   r=   r   r#   r    r   r:  )rA   r3  chs      r   r<   ChannelCloseFixture._new_channel  sj    <<6!##G,,!!'*Bwzz (%
 &(D )$  $BDIyyr   c                     US;   a  U R                   $ US:X  a  U R                  $ US:X  a  U R                  $ Un U R                  U   nU$ ! [         a    [        U5      =oR                  U'    U$ f = f)N)r\   r:   rb   rc   )r:   rb   rc   r2  KeyErrorr/   )rA   r:   r@   s      r   r;  $ChannelCloseFixture._get_interpreter  s    '';;w::w::D?T* M  ?-8->>T*M?s   A #A21A2c                     UR                   U R                  ;   a  g U R                  R                  UR                   5        UR                  S:X  a  g [	        UR                   SU R
                   S35        g )Nr+   a  
            import _interpchannels as channels
            import test.test__interpchannels as helpers
            ChannelState = helpers.ChannelState
            try:
                cid
            except NameError:
                cid = _channels._channel_id(r  )r    r0  addr@   r#   r   r@  s     r   r?  %ChannelCloseFixture._prep_interpreter  sb    99%&))$;;& 699 #- .2XXJ 7 	r   )r:  r2  r0  r1  r   )rF   rG   rH   rI   r/  r?   propertyr   r   rA  rE  rH  rK  rN  r<  r;  r?  rK   rL   rM   s   @r   r-  r-  a  sd    
 E*    
''  r   r-  zend interp other extra creatorz%these tests take several hours to runc                   |    \ rS rSr  S rS rS rS rS rSS.S	 jr	S
 r
S rSS jrS rSS jrS rS rS rSrg)ExhaustiveChannelTestsi  c              #   `  #    / v   U R                  SS5       H$  nUv   U R                  5        H	  nX-   v   M     M&     U R                  SS5       H$  nUv   U R                  5        H	  nX-   v   M     M&     U R                  SS5       H  nUv   U R                  SS5       H(  nX1-   nUv   U R                  5        H	  nXB-   v   M     M*     U R                  SS5       H(  nX1-   nUv   U R                  5        H	  nXB-   v   M     M*     M     U R                  SS5       H  nUv   U R                  SS5       H(  nX1-   nUv   U R                  5        H	  nXB-   v   M     M*     U R                  SS5       H(  nX1-   nUv   U R                  5        H	  nXB-   v   M     M*     M     g 7f)Nr\   rb   rc   )_iter_close_action_sets_iter_post_close_action_sets_iter_use_action_sets)rA   closeactionspostactions
useactionsactionss        r   iter_action_sets'ExhaustiveChannelTests.iter_action_sets  s      !88IL#@@B"00  C J !88'JL#@@B"00  C K 44VWEJ $ < <VW M$3#'#D#D#FK!// $G !N
 !% < <Wg N$3#'#D#D#FK!// $G !O F 44WgFJ $ < <VW M$3#'#D#D#FK!// $G !N
 !% < <Wg N$3#'#D#D#FK!// $G !O Gs   F,F.c              #   8  #    X4n[        SSU5      /v   [        SSU5      /v   [        SSU5      [        SSU5      /v   [        SSU5      /v   [        SSU5      /v   [        SSU5      [        SSU5      /v   U H=  nU H4  nU H+  n[        SSU5      [        SSU5      [        SSU5      /v   M-     M6     M?     U HR  nU HI  nU H@  nU H7  n[        SSU5      [        SSU5      [        SSU5      [        SSU5      /v   M9     MB     MK     MT     g 7f)Nr[   r   r^   rR   )rA   r  r
  interpsr  interp4s         r   r_  ,ExhaustiveChannelTests._iter_use_action_sets*  sg    $ %1 	 %1 	 %1%1 	 %1 	 %1 	 %1%1 	 G"&G%eVW=%eVW=%eVW=   ' #  G"&G#*)%A)%A)%A)%A	  $+  ' # s   DDc           
   #      #    SnX4nS H/  nU(       a  SOSnU H  nU H  n[        XhU5      /v   M     M     M1     S H:  n	S H1  n
U H(  nU H  n[        U	SU5      [        U
SU5      /v   M!     M*     M3     M<     g 7f)Nr   r  ra   r`   r_   r   r^   rg  )rA   r  r
  endsrh  r   opr:   rX   recvopsendopr   r^   s                r   r]  .ExhaustiveChannelTests._iter_close_action_sets[  s     $"E"'WB!C%bv6    " # /F2#D ')&&$?)&&$?  !( $ 3 /s   A<A>c              #   ^   #    S H#  n[        SSU5      /v   [        SSU5      /v   M%     g 7f)N)r\   rc   rb   r[   r   r^   rg  r@  s     r   r^  3ExhaustiveChannelTests._iter_post_close_action_setsn  s=     0FeVV4  eVV4 	 1s   +-c                 8    U H  nU R                  X5        M     g r   )r   )rA   fixrc  rW   s       r   run_actions"ExhaustiveChannelTests.run_actionsw  s    FOOC( r   Tr   c                   UR                  UR                  5      nUR                  UR                  UR                  UR
                  5      nUR                  U5        UR                  S:X  a=  [        UR                  UR                  UUR                  US9nUR                  X&5        g [        R                  [        5      n[!        UR"                  SUR                   S[%        UR                  5       S[%        U5       S[%        UR                  5       SU SU SU S35        ['        [(        R+                  [-        U5      S	5      [/        [-        U5      5      S
9nUR                  X&5        g )Nr+   r   zB
                result = helpers.run_action(
                    z,
                    z!,
                    hideclosed=z7,
                    )
                _channels.send(zW, result.pending.to_bytes(1, 'little'), blocking=False)
                _channels.send(zB, b'X' if result.closed else b'', blocking=False)
                little)ru   rs   )rj   rX   rm   r:   rb   rc   rH  r@   r   r   rW   r   rK  r   r=   r   r#   r    r   rp   r   
from_bytesr   rD  )rA   rt  rW   r   rX   r:   r   r:  s           r   r   !ExhaustiveChannelTests.run_action{  sJ     )&&szz399ciiHV$;;& 		%F f-##G,Dvyy 'WWI &--() *#YK  #))_% &  *| ,  $v &  $v &
# 
 "{4'8(CK-.F f-r   c           
   #   n   #    / SQnU H'  u  p#nS H  nS H  n[        XbX4U5      v   M     M     M)     g 7f)N))r+   r:   rc   )r:   r+   rc   )r  r
  rc   )r  r
  r+   )r\   rb   r3  r   )r-  )rA   interpretersr:   rb   rc   r3  rX   s          r   iter_fixtures$ExhaustiveChannelTests.iter_fixtures  s@     
 %1 F57+C-c5QQ , 8 %1s   35c                $   U(       a  SOSn[        X1R                  S5      nUR                  5       (       d  U R                  XSS9  g U R	                  [
        R                  5         U R                  XSS9  S S S 5        g ! , (       d  f       g = f)Nra   r`   r\   Fr   )rR   rX   rE  r   r   r   rO   )rA   rt  r   rm  r`   s        r   _closeExhaustiveChannelTests._close  sk    #]b''62&&((OOC5O9""9#?#?@u= A@@s   'B
BNc                    Ub  UR                   S:X  Ga  U R                  [        R                  5         [        R	                  UR
                  5        S S S 5        U R                  [        R                  5         [        R                  UR
                  S5        S S S 5        U R                  [        R                  5         [        R                  UR
                  5        S S S 5        U R                  [        R                  5         [        R                  UR
                  SS9  S S S 5        g [        UR                  S5        [        UR                  S5        [        UR                  S5        [        UR                  S5        g ! , (       d  f       GN>= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)	Nr+   r   Tr   zo
                with helpers.expect_channel_closed():
                    _channels.recv(cid)
                z
                with helpers.expect_channel_closed():
                    _channels.send(cid, b'spam', blocking=False)
                zp
                with helpers.expect_channel_closed():
                    _channels.close(cid)
                z|
                with helpers.expect_channel_closed():
                    _channels.close(cid, force=True)
                )
r@   r   r   rO   r   r   r^   r`   r#   r    )rA   rt  r:   s      r   _assert_closed_in_interp/ExhaustiveChannelTests._assert_closed_in_interp  s6   >V[[F2""9#?#?@sww' A""9#?#?@sww0 A""9#?#?@( A""9#?#?@t4 A@ vyy #  vyy #  vyy #  vyy # + A@@@@@@@s/    F;!F F/
G 
F
F,/
F= 
Gc                    U R                  UR                  R                  5        [        UR                  R                  5       H  n[        UR                  5        M     U R                  U5        S H7  nUR                  U5      nUR                  S:X  a  M&  U R                  X5        M9     UR                  S5      nU R                  X5        g )N)r\   rb   r+   fresh)
r   r   rs   rangeru   r   r   r  rA  r@   )rA   rt  r,   r:   s       r   _assert_closed%ExhaustiveChannelTests._assert_closed  s    		(()syy(()A  *%%c*'F((0F{{f$))#6	 ( $$W-%%c2r   c              #     #    SnU R                  5        H  n[        5         U R                  5        H  nUS-  nUS:  a      g U(       a;  US-
  S-  S:X  a
  [        5         [        X$SR                  [	        U5      5      5        O>US-
  S-  S:X  a
  [        SSS9  [        S	SS9  [
        R                  R                  5         X$U4v   M     U(       d  M  [        S
5        M     [        5         g 7f)Nr   ry   r      z({} actions)  rh   .z---)rd  r  r}  r<   r  sysstdoutflush)rA   verboseirc  rt  s        r   _iter_close_tests(ExhaustiveChannelTests._iter_close_tests  s     ,,.GG))+Qt8A{a'!."7"7G"EFA{a'cr*#2&

(8(8(:go% , we! /" 	s   CC0C0c                 N    S[         l        U R                  5        H  u  pnM     g )NT)r-  r/  r  rA   r  rt  rc  s       r   _skim_close_tests(ExhaustiveChannelTests._skim_close_tests  s%    $(!#557OAG  8r   c                 h   U R                  5        H  u  pnU R                  SR                  XU5      5         UR                  UR                  5        U R                  X#5        U R                  USS9  U R                  U5        S S S 5        UR                  5         M     g ! , (       d  f       N#= f)N	{} {}  {}Fr   	r  r#  r<   rH  r:   ru  r  r  rN  r  s       r   
test_close!ExhaustiveChannelTests.test_close  s    #557OAGk00AB$$SZZ0  .Cu-##C( C LLN  8BB   AB##
B1	c                 h   U R                  5        H  u  pnU R                  SR                  XU5      5         UR                  UR                  5        U R                  X#5        U R                  USS9  U R                  U5        S S S 5        UR                  5         M     g ! , (       d  f       N#= f)Nr  Tr   r  r  s       r   test_force_close'ExhaustiveChannelTests.test_force_close  s    #557OAGk00AB$$SZZ0  .Ct,##C( C LLN  8BBr  rD   r   )F)rF   rG   rH   rI   rd  r_  r]  r^  ru  r   r}  r  r  r  r  r  r  r  rK   rD   r   r   r[  r[    s[    & +0Z/b&) 59 .@R>83 ,


r   r[  __main__),collectionsr   
contextlibr  textwrapr   rE  r   r  test.supportr   import_moduler   test.support.interpretersr   test.test__interpretersr   r	   r
   _UNBOUND_CONSTANT_TO_FLAGUNBOUNDr   r   r   r#   r   r/   contextmanagerrP   rR   rp   r   r   r   TestCaser   r   r   r  r-  r	  r[  rF   r+   rD   r   r   <module>r     sz   "  
     &''(9:	 2  
0
01E1E
F %*  $ -/ 
5 *]I6  J + +/#J0CD /#fE:n.>? E& 7; *!!H x    `,X `,JI-8 I-Xb ( b Jn*%:%EG nb 
67{X { 8{|	 zMMO r   