ó
    F\h^  ã                   óP  • S r SSKrSSKrSSKJr  SSKJrJrJrJ	r	J
r
  SSKJrJr  / SQr " S S	\\R                  5      r\R                  R!                  S
\5      rS rS r\S.S jrS r " S S5      r\" 5       r " S S\5      r " S S\5      r\R8                  " \\5        g)z-Cross-interpreter Channels High Level Module.é    Né   )Ú_crossinterp)ÚChannelErrorÚChannelNotFoundErrorÚChannelClosedErrorÚChannelEmptyErrorÚChannelNotEmptyError)ÚUNBOUND_ERRORÚUNBOUND_REMOVE)ÚUNBOUNDr
   r   ÚcreateÚlist_allÚSendChannelÚRecvChannelr   r   r   ÚItemInterpreterDestroyedc                   ó   • \ rS rSrSrSrg)r   é   z#Raised from get() and get_nowait().© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú9/usr/lib/python3.13/test/support/interpreters/channels.pyr   r      s   † ä-r   r   Úqueuec                 ó`   • U [         L a  [        R                   n [        R                  " U 5      $ ©N)r   r   Úserialize_unbound©Úunbounds    r   Ú_serialize_unboundr#   "   s&   € Ø”'ÒÜ×&Ñ&ˆÜ×)Ò)¨'Ó2Ð2r   c                 ón   • [         R                  " U [        5      nU[         R                  L a  [        nU$ r   )r   Úresolve_unboundr   r   )ÚflagÚresolveds     r   Ú_resolve_unboundr(   (   s-   € Ü×+Ò+¨DÔ2JÓK€HØ”<×'Ñ'Ò'ÜˆØ€Or   )Úunbounditemsc                 óx   • [        U 5      nUu  n[        R                  " U5      n[        U5      [	        X1S9pTXE4$ )a9  Return (recv, send) for a new cross-interpreter channel.

The channel may be used to pass data safely between interpreters.

"unbounditems" sets the default for the send end of the channel.
See SendChannel.send() for supported values.  The default value
is UNBOUND, which replaces the unbound item when received.
©Ú_unbound)r#   Ú	_channelsr   r   r   )r)   r"   Ú	unboundopÚcidÚrecvÚsends         r   r   r   /   s>   € ô ! Ó.€GØ�J€IÜ
×
Ò
˜9Ó
%€CÜ˜SÓ!¤;¨sÑ#Eˆ$Øˆ:Ðr   c            
      ó†   • [         R                  " 5        V Vs/ s H  u  p[        U 5      [        XS94PM     snn $ s  snn f )z4Return a list of (recv, send) for all open channels.r+   )r-   r   r   r   )r/   r"   s     r   r   r   ?   sC   € ô !*× 2Ò 2Ô 4ô6Ú 4‘�ô ˜Óœ{¨3ÑAÓBÙ 4ò6ð 6ùó 6s   ™ =c                   ó~   ^ • \ rS rSrSrSrU 4S jrS rS rS r	S r
S	 r\S
 5       r\S 5       r\S 5       rSrU =r$ )Ú_ChannelEndéE   z/The base class for RecvChannel and SendChannel.Nc                 óø   >• [         TU ]  U 5      nUR                  S:X  a  [        R                  " USSS9nO<UR                  S:X  a  [        R                  " USSS9nO[        UR                  5      eXl        U$ )Nr1   T)r1   Úforcer0   )r0   r7   )ÚsuperÚ__new__Ú_endr-   Ú_channel_idÚNotImplementedErrorÚ_id)Úclsr/   ÚselfÚ	__class__s      €r   r9   Ú_ChannelEnd.__new__J   sj   ø€ Ü‰w‰˜sÓ#ˆØ�9‰9˜ÓÜ×'Ò'¨°$¸dÑC‰CØ�Y‰Y˜&Ó Ü×'Ò'¨°$¸dÑC‰Cä% d§i¡iÓ0Ð0ØŒØˆr   c                 ó^   • [        U 5      R                   S[        U R                  5       S3$ )Nz(id=Ú))Útyper   Úintr=   ©r?   s    r   Ú__repr__Ú_ChannelEnd.__repr__U   s(   € Ü�t“*×%Ñ%Ð& d¬3¨t¯x©x«=¨/¸Ð;Ð;r   c                 ó,   • [        U R                  5      $ r   )Úhashr=   rF   s    r   Ú__hash__Ú_ChannelEnd.__hash__X   s   € Ü�D—H‘H‹~Ðr   c                 óÌ   • [        U [        5      (       a  [        U[        5      (       d  [        $ O[        U[        5      (       d  [        $ UR                  U R                  :H  $ r   )Ú
isinstancer   ÚNotImplementedr   r=   )r?   Úothers     r   Ú__eq__Ú_ChannelEnd.__eq__[   sM   € Ü�dœK×(Ñ(Ü˜e¤[×1Ñ1Ü%Ð%ð 2ä˜E¤;×/Ñ/Ü!Ð!Ø�y‰y˜DŸH™HÑ$Ð$r   c                 ó.   • [        U R                  5      4$ r   )rE   r=   rF   s    r   Ú__getnewargs__Ú_ChannelEnd.__getnewargs__d   s   € Ü�D—H‘H“ÐÐr   c                 ó   • g r   r   rF   s    r   Ú__getstate__Ú_ChannelEnd.__getstate__h   s   € Ør   c                 ó   • U R                   $ r   ©r=   rF   s    r   ÚidÚ_ChannelEnd.idk   s   € à�x‰xˆr   c                 óB   • [         R                  " U R                  5      $ r   )r-   Úget_infor=   rF   s    r   Ú_infoÚ_ChannelEnd._infoo   s   € ä×!Ò! $§(¡(Ó+Ð+r   c                 ó.   • U R                   R                  $ r   )r_   ÚclosedrF   s    r   Ú	is_closedÚ_ChannelEnd.is_closeds   s   € à�z‰z× Ñ Ð r   rZ   )r   r   r   r   r   r:   r9   rG   rK   rQ   rT   rW   Úpropertyr[   r_   rc   r   Ú__classcell__©r@   s   @r   r4   r4   E   se   ø† Ù9à€Dõ	ò<òò%ò òð ñó ðð ñ,ó ð,ð ñ!ó ö!r   r4   c                   óL   • \ rS rSrSrSrS\" 5       SS.S jjr\4S jr	S	 r
S
rg)r   é{   z1The receiving end of a cross-interpreter channel.r0   Ng{®Gáz„?)Ú	_sentinelÚ_delayc                óÆ  • Ub4  [        U5      nUS:  a  [        S5      e[        R                  " 5       U-   n[        R                  " U R
                  U5      u  pVXRL aa  [        R                  " U5        Ub  [        R                  " 5       W:¼  a  [        e[        R                  " U R
                  U5      u  pVXRL a  Ma  Ub  Ub   [        U5      5       e[        U5      $ U$ )zuReturn the next object from the channel.

This blocks until an object has been sent, if none have been
sent already.
r   z"timeout value must be non-negative)
rE   Ú
ValueErrorÚtimer-   r0   r=   ÚsleepÚTimeoutErrorÚreprr(   )r?   Útimeoutrj   rk   ÚendÚobjr.   s          r   r0   ÚRecvChannel.recv€   sÀ   € ð ÑÜ˜'“lˆGØ˜‹{Ü Ð#EÓGÐGÜ—)’)“+ Ñ'ˆCÜ"Ÿš¨¯©°)Ó<‰ˆØÒÜ�JŠJ�vÔØÑ"¤t§y¢y£{°cÓ'9Ü"Ð"Ü&Ÿ^š^¨D¯H©H°iÓ@‰NˆCð	 Ôð
 Ñ Ø‘;Ð)¤ S£	Ó)�;Ü# IÓ.Ð.Øˆ
r   c                 óæ   • U[         L a#  [        R                  " U R                  5      u  p#O#[        R                  " U R                  U5      u  p#Ub  Ub   [	        U5      5       e[        U5      $ U$ )z³Return the next object from the channel.

If none have been sent then return the default if one
is provided or fail with ChannelEmptyError.  Otherwise this
is the same as recv().
)Ú_NOT_SETr-   r0   r=   rq   r(   )r?   Údefaultrt   r.   s       r   Úrecv_nowaitÚRecvChannel.recv_nowait™   sa   € ð ”hÒÜ&Ÿ^š^¨D¯H©HÓ5‰NˆC�ä&Ÿ^š^¨D¯H©H°gÓ>‰NˆCØÑ Ø‘;Ð)¤ S£	Ó)�;Ü# IÓ.Ð.Øˆ
r   c                 óB   • [         R                  " U R                  SS9  g )NT)r0   ©r-   Úcloser=   rF   s    r   r}   ÚRecvChannel.close©   ó   € Ü�Š˜Ÿ™ tÓ,r   r   r   )r   r   r   r   r   r:   Úobjectr0   rw   ry   r}   r   r   r   r   r   r   {   s+   † Ù;à€DðÙ“xØöð2 #+ô õ -r   r   c                   óŽ   ^ • \ rS rSrSrSrSS.U 4S jjr\S 5       rSSS.S	 jjr	SS.S
 jr
SSS.S jjrSS.S jrS rSrU =r$ )r   é­   z/The sending end of a cross-interpreter channel.r1   Nr+   c                óª   >• Uc   [         R                  " U5      nU4n[
        TU ]  X5      nX$l        U$ ! [         a    [        [        5      n N2f = fr   )r-   Úget_channel_defaultsr   r#   r   r8   r9   r,   )r>   r/   r,   Úopr?   r@   s        €r   r9   ÚSendChannel.__new__²   sZ   ø€ ØÑð7Ü×3Ò3°CÓ8�Ø˜5�ô ‰w‰˜sÓ(ˆØ ŒØˆøô	 (ó 7Ü-¬gÓ6’ð7ús   †6 ¶AÁAc                 óX   • U R                   nUR                  =(       d    UR                  $ r   )r_   rb   Úclosing)r?   Úinfos     r   rc   ÚSendChannel.is_closed½   s   € à�z‰zˆØ�{‰{×*˜dŸl™lÐ*r   r!   c                ó„   • Uc  U R                   u  nO[        U5      u  n[        R                  " U R                  XUSS9  g)zkSend the object (i.e. its data) to the channel's receiving end.

This blocks until the object is received.
NT©rr   Úblocking©r,   r#   r-   r1   r=   ©r?   rt   rr   r"   r.   s        r   r1   ÚSendChannel.sendÂ   s6   € ð ‰?ØŸ™‰J‰Iä+¨GÓ4‰JˆIÜ�Š�t—x‘x ¸È4ÓPr   c                ó€   • Uc  U R                   u  nO[        U5      u  n[        R                  " U R                  XSS9$ )z�Send the object to the channel's receiving end.

If the object is immediately received then return True
(else False).  Otherwise this is the same as send().
F©r�   rŽ   ©r?   rt   r"   r.   s       r   Úsend_nowaitÚSendChannel.send_nowaitÏ   s9   € ð ‰?ØŸ™‰J‰Iä+¨GÓ4‰JˆIô �~Š~˜dŸh™h¨ÀÑGÐGr   c                ó„   • Uc  U R                   u  nO[        U5      u  n[        R                  " U R                  XUSS9  g)zdSend the object's buffer to the channel's receiving end.

This blocks until the object is received.
NTrŒ   ©r,   r#   r-   Úsend_bufferr=   r�   s        r   r˜   ÚSendChannel.send_bufferà   s;   € ð ‰?ØŸ™‰J‰Iä+¨GÓ4‰JˆIÜ×Ò˜dŸh™h¨Ø&-¸ó	>r   c                ó€   • Uc  U R                   u  nO[        U5      u  n[        R                  " U R                  XSS9$ )z¦Send the object's buffer to the channel's receiving end.

If the object is immediately received then return True
(else False).  Otherwise this is the same as send().
Fr’   r—   r“   s       r   Úsend_buffer_nowaitÚSendChannel.send_buffer_nowaitî   s9   € ð ‰?ØŸ™‰J‰Iä+¨GÓ4‰JˆIÜ×$Ò$ T§X¡X¨sÈÑNÐNr   c                 óB   • [         R                  " U R                  SS9  g )NT)r1   r|   rF   s    r   r}   ÚSendChannel.closeü   r   r   r   )r   r   r   r   r   r:   r9   re   rc   r1   r”   r˜   r›   r}   r   rf   rg   s   @r   r   r   ­   sh   ø† Ù9à€Dà&*÷ 	ð 	ð ñ+ó ð+ðQØöQð !õHð">Ø ö>ð $(õO÷-ð -r   r   )r   rn   Ú_interpchannelsr-   Ú r   r   r   r   r   r	   r
   r   Ú__all__r   ÚUnboundItemÚ	singletonr   r   r#   r(   r   r   r4   r€   rw   r   r   Ú_register_end_typesr   r   r   Ú<module>r¥      s±   ðÙ 3ã Û #Ý ÷õ ÷ò
€ô.˜|Ø+×DÑDô.ð
 ×
"Ñ
"×
,Ñ
,¨W°hÓ
?€ò3òð #õ ò 6÷0!ñ 0!ñf ‹8€ô/-�+ô /-ôdP-�+ô P-ðh 
× Ò ˜k¨;Õ 7r   