ó
    F\hA'  ã                   ó@   • S r SSKJr  SSKJr  SSKJr   " S S5      rg))Ú	TaskGroupé   )Úevents)Ú
exceptions)Útasksc                   ód   • \ rS rSrSrS rS rS rS rS r	SSS	.S
 jr
S\S\4S jrS rS rSrg)r   é   a  Asynchronous context manager for managing groups of tasks.

Example use:

    async with asyncio.TaskGroup() as group:
        task1 = group.create_task(some_coroutine(...))
        task2 = group.create_task(other_coroutine(...))
    print("Both tasks have completed now.")

All tasks are awaited when the context manager exits.

Any exceptions other than `asyncio.CancelledError` raised within
a task will cancel all remaining tasks and wait for them to exit.
The exceptions are then combined and raised as an `ExceptionGroup`.
c                 ó    • SU l         SU l        SU l        S U l        S U l        SU l        [        5       U l        / U l        S U l	        S U l
        g )NF)Ú_enteredÚ_exitingÚ	_abortingÚ_loopÚ_parent_taskÚ_parent_cancel_requestedÚsetÚ_tasksÚ_errorsÚ_base_errorÚ_on_completed_fut©Úselfs    Ú)/usr/lib/python3.13/asyncio/taskgroups.pyÚ__init__ÚTaskGroup.__init__   sN   € ØˆŒØˆŒØˆŒØˆŒ
Ø ˆÔØ(-ˆÔ%Ü“eˆŒØˆŒØˆÔØ!%ˆÕó    c                 ó   • S/nU R                   (       a'  UR                  S[        U R                   5       35        U R                  (       a'  UR                  S[        U R                  5       35        U R                  (       a  UR                  S5        O"U R
                  (       a  UR                  S5        SR                  U5      nSU S3$ )	NÚ ztasks=zerrors=Ú
cancellingÚenteredÚ z
<TaskGroupÚ>)r   ÚappendÚlenr   r   r
   Újoin)r   ÚinfoÚinfo_strs      r   Ú__repr__ÚTaskGroup.__repr__(   s“   € ØˆtˆØ�;�;Ø�K‰K˜&¤ T§[¡[Ó!1Ð 2Ð3Ô4Ø�<�<Ø�K‰K˜'¤# d§l¡lÓ"3Ð!4Ð5Ô6Ø�>�>Ø�K‰K˜Õ%Ø�]�]Ø�K‰K˜	Ô"à—8‘8˜D“>ˆØ˜H˜: QÐ'Ð'r   c              ƒ   ó0  #   • U R                   (       a  [        SU < S35      eU R                  c  [        R                  " 5       U l        [
        R                  " U R                  5      U l        U R                  c  [        SU < S35      eSU l         U $ 7f)Nú
TaskGroup z has already been enteredz! cannot determine the parent taskT)r
   ÚRuntimeErrorr   r   Úget_running_loopr   Úcurrent_taskr   r   s    r   Ú
__aenter__ÚTaskGroup.__aenter__6   s�   é € Ø�=�=ÜØ˜T™HÐ$=Ð>ó@ð @à�:‰:ÑÜ×0Ò0Ó2ˆDŒJÜ!×.Ò.¨t¯z©zÓ:ˆÔØ×ÑÑ$ÜØ˜T™HÐ$EÐFóHð HàˆŒàˆùs   ‚BBc              ƒ   ó¬   #   • S n U R                  X5      I S h  v•N S U l        S U l        S U l        S n$  N! S U l        S U l        S U l        S nf = f7f©N)Ú_aexitr   r   r   )r   ÚetÚexcÚtbs       r   Ú	__aexit__ÚTaskGroup.__aexit__D   s`   é € Øˆð
	ØŸ™ RÓ-×-ð !%ˆDÔØˆDŒLØ#ˆDÔØ‰Cñ .øð !%ˆDÔØˆDŒLØ#ˆDÔØ‰Cüs%   ‚A†8 š6›8 žA¶8 ¸AÁAc              ƒ   ó
  #   • SU l         Ub)  U R                  U5      (       a  U R                  c  X l        Ub"  [        U[        R
                  5      (       a  UnOS nUb!  U R                  (       d  U R                  5         U R                  (       a[  U R                  c  U R                  R                  5       U l	         U R                  I S h  v•N   S U l	        U R                  (       a  M[  U R                  (       a   eU R                  b   U R                  eU R                  (       a   U R                  R                  5       S:X  a  S n Ub  U R                  (       d   UeS nUb:  [        U[        R
                  5      (       d  U R                  R!                  U5        U R                  (       ak  U R                  R#                  5       (       a4  U R                  R                  5         U R                  R%                  5          ['        SU R                  5      S eg  GNQ! [        R
                   a.  nU R                  (       d  UnU R                  5          S nAGNŒS nAff = f! S nf = f! S nf = f! S nf = f! S nf = f7f)NTé    zunhandled errors in a TaskGroup)r   Ú_is_base_errorr   Ú
issubclassr   ÚCancelledErrorr   Ú_abortr   r   r   Úcreate_futurer   r   Úuncancelr   r!   r   ÚcancelÚBaseExceptionGroup)r   r2   r3   Úpropagate_cancellation_errorÚexs        r   r1   ÚTaskGroup._aexitR   s  é € ØˆŒà‰OØ×#Ñ# C×(Ñ(Ø× Ñ Ñ(Ø"Ôà‰>œj¨¬Z×-FÑ-F×GÑGØ+.Ñ(à+/Ð(à‰>Ø—>—>ð —‘”ð �k�kØ×%Ñ%Ñ-Ø)-¯©×)AÑ)AÓ)C�Ô&ð"Ø×,Ñ,×,Ð,ð &*ˆDÔ"ð' �k�k‰kð* —;—;Ðˆà×ÑÑ'ðØ×&Ñ&Ð&ð ×(×(à× Ñ ×)Ñ)Ó+¨qÓ0ð 04Ð,ð	0Ø+Ñ7ÀÇÇðØ6Ð6ð ,0Ð(à‰>¤*¨R´×1JÑ1J×"KÑ"KØ�L‰L×Ñ Ô$à�<�<ð × Ñ ×+Ñ+×-Ñ-Ø×!Ñ!×*Ñ*Ô,Ø×!Ñ!×(Ñ(Ô*ðÜ(Ø5Ø—L‘Lóð ðð ò[ -øÜ×,Ñ,ó "Ø—~—~ð 46Ð0Ø—K‘K”Mÿùð"ûð* ‘ûð  ‘Cûà+/Ñ(ûð$ ‘üs£   ‚B<JÂ?H" ÃHÃH" ÃJÃ- JÄI' Ä1JÅI5 Å!I. Å#B#JÈI< ÈJÈH" È"I$È6#IÉJÉI$É$JÉ'I+É+JÉ.I2É2I5 É5I9É9JÉ<J Ê JN©ÚnameÚcontextc                ó8  • U R                   (       d   UR                  5         [        SU < S35      eU R                  (       a1  U R                  (       d   UR                  5         [        SU < S35      eU R
                  (       a   UR                  5         [        SU < S35      eUc  U R                  R                  XS9nOU R                  R                  XUS9nU R                  R                  U5        UR                  U R                  5         UA$ ! Af = f)zRCreate a new task in this group and return it.

Similar to `asyncio.create_task`.
r)   z has not been enteredz is finishedz is shutting down)rE   rD   )r
   Úcloser*   r   r   r   r   Úcreate_taskÚaddÚadd_done_callbackÚ_on_task_done)r   ÚcororE   rF   Útasks        r   rI   ÚTaskGroup.create_taskµ   sä   € ð
 �}�}Ø�J‰JŒLÜ ¨D©8Ð3HÐIÓJÐJØ�=�= §§Ø�J‰JŒLÜ ¨D©8°<Ð@ÓAÐAØ�>�>Ø�J‰JŒLÜ ¨D©8Ð3DÐEÓFÐFØ‰?Ø—:‘:×)Ñ)¨$Ð)Ð:‰Dà—:‘:×)Ñ)¨$À7Ð)ÐKˆDð 	�‰�‰˜ÔØ×Ñ˜t×1Ñ1Ô2ð	Øñ ø‘ús   ÄD ÄDr3   Úreturnc                 ó\   • [        U[        5      (       d   e[        U[        [        45      $ r0   )Ú
isinstanceÚBaseExceptionÚ
SystemExitÚKeyboardInterrupt)r   r3   s     r   r9   ÚTaskGroup._is_base_errorÙ   s(   € Ü˜#œ}×-Ñ-Ð-Ð-Ü˜#¤
Ô,=Ð>Ó?Ð?r   c                 ó†   • SU l         U R                   H*  nUR                  5       (       a  M  UR                  5         M,     g )NT)r   r   Údoner?   )r   Úts     r   r<   ÚTaskGroup._abortÝ   s+   € ØˆŒà—”ˆAØ—6‘6—8“8Ø—‘–
ò r   c                 ó  • U R                   R                  U5        U R                  bK  U R                   (       d:  U R                  R                  5       (       d  U R                  R	                  S5        UR                  5       (       a  g UR                  5       nUc  g U R                  R                  U5        U R                  U5      (       a  U R                  c  X l
        U R                  R                  5       (       a2  U R                  R                  SU< SU R                   S3UUS.5        g U R                  (       dD  U R                  (       d2  U R!                  5         SU l        U R                  R#                  5         g g g )NTzTask z% has errored out but its parent task z is already completed)ÚmessageÚ	exceptionrN   )r   Údiscardr   rX   Ú
set_resultÚ	cancelledr]   r   r!   r9   r   r   r   Úcall_exception_handlerr   r   r<   r?   )r   rN   r3   s      r   rL   ÚTaskGroup._on_task_doneä   s=  € Ø�‰×Ñ˜DÔ!à×!Ñ!Ñ-°d·k·kØ×)Ñ)×.Ñ.×0Ñ0Ø×&Ñ&×1Ñ1°$Ô7à�>‰>×ÑØà�n‰nÓˆØ‰;Øà�‰×Ñ˜CÔ Ø×Ñ˜s×#Ñ#¨×(8Ñ(8Ñ(@Ø"Ôà×Ñ×!Ñ!×#Ñ#ð �J‰J×-Ñ-Ø" 4¡(ð +#Ø#'×#4Ñ#4Ð"5Ð5JðLà Øñ	/ô ð à�~�~ d×&C×&Cð& �K‰KŒMØ,0ˆDÔ)Ø×Ñ×$Ñ$Õ&ð+ 'Dˆ~r   )
r   r   r
   r   r   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r&   r-   r5   r1   rI   rS   Úboolr9   r<   rL   Ú__static_attributes__© r   r   r   r      sO   † ñò
&ò(òòò`ðF )-°dõ ðH@ -ð @°Dô @òõ2'r   r   N)Ú__all__r   r   r   r   r   rj   r   r   Ú<module>rl      s!   ðð
 €å Ý Ý ÷J'ò J'r   