Ë
    S²jû  ã                   ó<  — d dl Z d dlmZ d dlmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZ ddgZd	ej                  ee   z  eed
f   z  eeef   z  dej                  dz  fd„Z	 	 ddee   dee   deeeef      dz  deeej*                  z  dz     dz  dee   f
d„Zy)é    N)ÚSequence)ÚAnyÚcast)ÚExceptionWrapper)Ú_get_device_index)ÚModuleÚ	get_a_varÚparallel_applyÚobj.Úreturnc                 óp  — t        | t        j                  «      r| S t        | t        t        f«      r3t        t        | «      D ]   }t        |t        j                  «      sŒ|c S  t        | t        «      rAt        t        | j                  «       «      D ]   }t        |t        j                  «      sŒ|c S  y )N)	Ú
isinstanceÚtorchÚTensorÚlistÚtupleÚmapr	   ÚdictÚitems)r   Úresults     ú_/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/nn/parallel/parallel_apply.pyr	   r	      sŽ   € ô �#”u—|‘|Ô$Øˆ
ä�#œœe�}Ô%Üœ) SÓ)ò 	ˆFÜ˜&¤%§,¡,Õ/Ø’ð	ô �#”tÔÜœ) S§Y¡Y£[Ó1ò 	ˆFÜ˜&¤%§,¡,Õ/Ø’ð	ð ó    ÚmodulesÚinputsÚ
kwargs_tupÚdevicesc                 óx  ‡‡‡‡‡— t        | «      t        |«      k7  r#t        dt        | «      › dt        |«      › �«      ‚|�:t        | «      t        |«      k7  rMt        dt        | «      › dt        |«      › �«      ‚t        t        t        t
        f   i «      ft        | «      z  }|�:t        | «      t        |«      k7  r2t        dt        | «      › dt        |«      › �«      ‚dgt        | «      z  }|D �cg c]  }t        |d«      ‘Œ }}|D �cg c]!  }t        j                  j                  |«      ‘Œ# }}t        j                  j                  «       st        d«      ‚t        j                  j                  «       j                  Št        j                  «       Ši Št        j                  «       t        j                   «       cŠŠ	 	 ddt"        d	t$        d
t
        dt        t        t
        f   dt"        t        j&                  z  dz  dt        j(                  dz  ddfˆˆˆˆˆfd„}t        | «      dkD  r„t+        t-        | ||||d¬«      «      D ���	�
��cg c](  \  }\  }}	}
}}t        j.                  ||||	|
||f¬«      ‘Œ* }}}
}	}}}|D ]  }|j1                  «        Œ |D ]  }|j3                  «        Œ n |d| d   |d   |d   |d   |d   «       g }t5        t        |«      «      D ]8  }‰|   }t7        |t8        «      r|j;                  «        |j=                  |«       Œ: |S c c}w c c}w c c}}}
}	}}w )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                 óH  •— t        j                  ‰
«       |€<t        |«      }|€‰5  t        d| › d�¬«      ‰| <   d d d «       y |j	                  «       }t        |t         j                  «      r|j                  }|€t         j                  j                  |«      }	 t         j                  j                  |«      5  |5  t         j                  j                  ‰	‰¬«      5  t        |t        t        f«      s|f} ||i |¤Ž}d d d «       d d d «       d d d «       ‰5  ‰| <   d d d «       y # 1 sw Y   y xY w# 1 sw Y   Œ6xY w# 1 sw Y   Œ:xY w# 1 sw Y   Œ>xY w# 1 sw Y   y xY w# t        $ r0 ‰5  t        d| › d|› �¬«      ‰| <   d d d «       Y y # 1 sw Y   Y y xY ww xY w)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   Ú_workerz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ñ2àñ2ô —	‘	×"Ñ" ;Ð8HÐ"ÓIñ2ô " %¬$´¨Ô7Ø"˜H�EÙ Ð1¨&Ñ1�÷2÷ 2÷ 2ð ñ $Ø#�˜‘
÷$ð $÷+ð
 ú÷2ð 2ú÷ 2ð 2ú÷ 2ð 2ú÷$ð $ûäò 	Øñ Ü-Ø'¨ s¨+°f°XÐ>ô�˜‘
÷÷ ó úð	ús›   ¨D,ÂE( Â<EÂ?"EÃ!"D8ÄEÄEÄ
E( ÄEÄ#E( Ä,D5Ä8EÄ=EÅE	Å	EÅEÅE( ÅE%Å!E( Å%E( Å(F!Å3FÆ	F!ÆF	ÆF!ÆF!é   )Ú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
      sF  ü€ ô$ ˆ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:Ö;¨aÔ   DÕ)Ð;€GÐ;Ø<CÖD°qŒu× Ñ ×/Ñ/°Õ2ÐD€GÐDÜ×Ñ×)Ñ)Ô+ÜÐ>Ó?Ð?Ü×#Ñ#×7Ñ7Ó9×>Ñ>€KÜ�>‰>Ó€DØ€Gä×ÑÓÜ×!Ñ!Ó#ð #€LÐ"ð -1Ø&*ñ'Üð'äð'ô ð'ô ”Sœ#�X‘ð	'ô
 ”e—l‘lÑ" TÑ)ð'ô —‘˜tÑ#ð'ð 
÷'ñ 'ôR ˆ7ƒ|�aÒô
 ?HÜ�G˜V Z°¸'È$ÔOó?÷	
ó 
ñ ;�Ñ:�F˜E 6¨6°6ô ×ÑØ a¨°¸ÀÈÐ%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   Ã5L(Ä&L-É-L2r<   )rC   Úcollections.abcr   Útypingr   r   r   Útorch._utilsr   Útorch.cuda._utilsr   Útorch.nn.modulesr   Ú__all__r   r   r   r   r	   r?   rG   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   