ó
    !Eñiû  ã                   óB  • S SK r S SKJr  S SKJrJr  S SKrS SKJr  S SK	J
r
  S SKJr  SS/rS	\R                  \\   -  \\S
4   -  \\\4   -  S\R                  S-  4S jr  SS\\   S\\   S\\\\4      S-  S\\\R*                  -  S-     S-  S\\   4
S jjrg)é    N)ÚSequence)ÚAnyÚcast)ÚExceptionWrapper)Ú_get_device_index)ÚModuleÚ	get_a_varÚparallel_applyÚobj.Úreturnc                 óª  • [        U [        R                  5      (       a  U $ [        U [        [        45      (       a:  [        [        U 5       H&  n[        U[        R                  5      (       d  M$  Us  $    [        U [        5      (       aH  [        [        U R                  5       5       H&  n[        U[        R                  5      (       d  M$  Us  $    g )N)	Ú
isinstanceÚtorchÚTensorÚlistÚtupleÚmapr	   ÚdictÚitems)r   Úresults     Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/nn/parallel/parallel_apply.pyr	   r	      s“   € ô �#”u—|‘|×$Ñ$Øˆ
ä�#œœe�}×%Ñ%Üœ) SÖ)ˆFÜ˜&¤%§,¡,×/Ó/Ø’ñ *ô �#”t×ÑÜœ) S§Y¡Y£[Ö1ˆFÜ˜&¤%§,¡,×/Ó/Ø’ñ 2ð ó    ÚmodulesÚinputsÚ
kwargs_tupÚdevicesc                 ó®  ^^^^^• [        U 5      [        U5      :w  a#  [        S[        U 5       S[        U5       35      eUb<  [        U 5      [        U5      :w  a#  [        S[        U 5       S[        U5       35      eO*[        [        [        [
        4   0 5      4[        U 5      -  nUb<  [        U 5      [        U5      :w  a#  [        S[        U 5       S[        U5       35      eOS/[        U 5      -  nU Vs/ s H  n[        US5      PM     nnU Vs/ s H"  n[        R                  R                  U5      PM$     nn[        R                  R                  5       (       d  [        S5      e[        R                  R                  5       R                  m[        R                  " 5       m0 m[        R                  " 5       [        R                   " 5       smm  SS["        S	[$        S
[
        S[        [        [
        4   S["        [        R&                  -  S-  S[        R(                  S-  SS4UUUUU4S jjjn[        U 5      S:”  a  [+        [-        XX#USS95       VVV	V
VVs/ s H"  u  nu  p‰p«n[        R.                  " XgX‰X«U4S9PM$     nnn
n	nnnU H  nUR1                  5         M     U H  nUR3                  5         M     OU" SU S   US   US   US   US   5        / n[5        [        U5      5       H>  nTU   n[7        U[8        5      (       a  UR;                  5         UR=                  U5        M@     U$ s  snf s  snf s  snnn
n	nnf )aù  Apply each `module` in :attr:`modules` in parallel on each of :attr:`devices`.

Args:
    modules (Module): modules to be parallelized
    inputs (tensor): inputs to the modules
    devices (list of int or torch.device): CUDA devices

:attr:`modules`, :attr:`inputs`, :attr:`kwargs_tup` (if given), and
:attr:`devices` (if given) should all have same length. Moreover, each
element of :attr:`inputs` can either be a single object as the only argument
to a module, or a collection of positional arguments.
zThe number of modules z& is not equal to the number of inputs Nz* is not equal to the number of kwargs_tup z' is not equal to the number of devices TzNo available accelerator found.ÚiÚmoduleÚinputÚkwargsÚdeviceÚstreamr   c                 ó�  >• [         R                  " T
5        Uc:  [        U5      nUc  T   [        SU  S3S9TU '   S S S 5        g UR	                  5       n[        U[         R                  5      (       a  UR                  nUc  [         R                  R                  U5      n [         R                  R                  U5         U   [         R                  R                  T	TS9   [        U[        [        45      (       d  U4nU" U0 UD6nS S S 5        S S S 5        S S S 5        T   WTU '   S S S 5        g ! , (       d  f       g = f! , (       d  f       N@= f! , (       d  f       NI= f! , (       d  f       NR= f! , (       d  f       g = f! [         a2    T   [        SU  SU 3S9TU '   S S S 5         g ! , (       d  f        g = ff = f)Nzin replica zQ, no device was provided and no tensor input was found; device cannot be resolved)Úwhere)Úenabledz on device )r   Úset_grad_enabledr	   r   Ú
get_devicer   r"   ÚindexÚacceleratorÚcurrent_streamÚdevice_indexÚampÚautocastr   r   Ú	Exception)r   r   r    r!   r"   r#   ÚtÚoutputÚautocast_enabledÚdevice_typeÚgrad_enabledÚlockÚresultss           €€€€€r   Ú_workerÚparallel_apply.<locals>._workerR   s€  ø€ ô 	×Ò˜|Ô,Ø‰>Ü˜%Ó ˆAØ‰yÚÜ!1Ø +¨A¨3ð /4ð 4ñ"�G˜A‘J÷ ð
 Ø—\‘\“^ˆFÜ�fœeŸl™l×+Ñ+Ø—\‘\ˆFØ‰>Ü×&Ñ&×5Ñ5°fÓ=ˆFð	ä×!Ñ!×.Ñ.¨vÕ6ÚÜ—	‘	×"Ñ" ;Ð8HÐ"ÒIô " %¬$´¨×7Ñ7Ø"˜H�EÙ Ð1¨&Ñ1�÷ J÷ ÷ 7ò Ø#�˜‘
÷ �÷+ ”Tð
 ú÷ JÕIú÷ •ú÷ 7Õ6ú÷ •ûäó 	ÚÜ-Ø'¨ s¨+°f°XÐ>ñ�˜‘
÷ ——�úð	ús›   «D4Â#F	 ÃE'ÃEÃ$'EÄEÄE'Ä
F	 Ä%E8Ä+F	 Ä4
EÅ
EÅEÅ
E$	Å E'Å'
E5Å1F	 Å8
FÆF	 ÆF	 Æ	GÆF2Æ(GÆ2
G	Æ<GÇGé   )Ústrict)ÚtargetÚargsr   ©NN)ÚlenÚAssertionErrorr   r   Ústrr   r   r   r*   r+   Úis_availableÚcurrent_acceleratorÚtypeÚ	threadingÚLockÚis_grad_enabledÚis_autocast_enabledÚintr   r"   ÚStreamÚ	enumerateÚzipÚThreadÚstartÚjoinÚranger   r   ÚreraiseÚappend)r   r   r   r   ÚxÚstreamsr7   r   r   r    r!   r"   r#   ÚthreadsÚthreadÚoutputsr1   r2   r3   r4   r5   r6   s                    @@@@@r   r
   r
      sA  ü€ ô$ ˆ7ƒ|”s˜6“{Ó"ÜØ$¤S¨£\ Nð 3$Ü$'¨£K =ð2ó
ð 	
ð ÑÜˆw‹<œ3˜z›?Ó*Ü Ø(¬¨W«¨ð 7,Ü,/°
«OÐ+<ð>óð ð +ô œ4¤¤S ™>¨2Ó.Ð0´3°w³<Ñ?ˆ
ØÑÜˆw‹<œ3˜w›<Ó'Ü Ø(¬¨W«¨ð 7)Ü),¨W«¨ð8óð ð (ð �&œ3˜w›<Ñ'ˆÙ3:Ó;²7¨aÔ   DÖ)±7€GÐ;Ù<CÓDºG°qŒu× Ñ ×/Ñ/°Ö2¹G€GÐDÜ×Ñ×)Ñ)×+Ñ+ÜÐ>Ó?Ð?Ü×#Ñ#×7Ñ7Ó9×>Ñ>€KÜ�>Š>Ó€DØ€Gä×ÒÓÜ×!Ò!Ó#ð #€LÐ"ð -1Ø&*ñ'Üð'äð'ô ð'ô ”Sœ#�X‘ð	'ô
 ”e—l‘lÑ" TÑ)ð'ô —‘˜tÑ#ð'ð 
÷'ô 'ôR ˆ7ƒ|�aÓô
 ?HÜ�G Z¸'È$ÑOô?÷	
ð 
ò?Ñ:�Ñ:�F 6°6ô ×ÒØ¨¸ÈÐ%Oôñ?ð	 	õ 
ó ˆFØ�L‰LŽNñ ãˆFØ�K‰KŽMò ñ 	��7˜1‘:˜v a™y¨*°Q©-¸À¹ÀWÈQÁZÔPà€GÜ”3�v“;ÖˆØ˜‘ˆÜ�fÔ.×/Ñ/Ø�N‰NÔØ�‰�vÖñ	  ð
 €NùòY <ùÚDù÷j
s   Ã<MÄ)MÉ*)Mr=   )rD   Úcollections.abcr   Útypingr   r   r   Útorch._utilsr   Útorch.cuda._utilsr   Útorch.nn.modulesr   Ú__all__r   r   r   r   r	   r@   rH   r"   r
   © r   r   Ú<module>r^      sä   ðÛ Ý $ß ã Ý )Ý /Ý #ð Ð(Ð
)€ðØ	�‰˜˜S™	Ñ	! E¨#¨s¨(¡OÑ	3°d¸3À¸8±nÑ	Dðà
‡\�\�DÑôð( 37Ø:>ñ	sØ�fÑðsà�S‰Mðsð ˜˜c 3˜h™Ñ(¨4Ñ/ðsð �c˜EŸL™LÑ(¨4Ñ/Ñ0°4Ñ7ð	sð
 
ˆ#�Yösr   