§
    �Štjû  ã                   óV  — 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dS )é    N)ÚSequence)ÚAnyÚcast)ÚExceptionWrapper©Ú_get_device_index)ÚModuleÚ	get_a_varÚparallel_applyÚobj.Úreturnc                 óœ  — t          | t          j        ¦  «        r| S t          | t          t          f¦  «        r6t          t          | ¦  «        D ] }t          |t          j        ¦  «        r|c S Œ!t          | t          ¦  «        rHt          t          |                      ¦   «         ¦  «        D ] }t          |t          j        ¦  «        r|c S Œ!d S )N)	Ú
isinstanceÚtorchÚTensorÚlistÚtupleÚmapr
   ÚdictÚitems)r   Úresults     ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/nn/parallel/parallel_apply.pyr
   r
      sÈ   € õ �#•u”|Ñ$Ô$ð Øˆ
å�#��e�}Ñ%Ô%ð Ý�) SÑ)Ô)ð 	ð 	ˆFÝ˜&¥%¤,Ñ/Ô/ð Ø���ðå�#•tÑÔð Ý�) S§Y¢Y¡[¤[Ñ1Ô1ð 	ð 	ˆFÝ˜&¥%¤,Ñ/Ô/ð Ø���ðàˆ4ó    ÚmodulesÚinputsÚ
kwargs_tupÚdevicesc                 ó®  ‡
‡‡‡‡‡— t          | ¦  «        t          |¦  «        k    r/t          dt          | ¦  «        › dt          |¦  «        › �¦  «        ‚|�Pt          | ¦  «        t          |¦  «        k    r/t          dt          | ¦  «        › dt          |¦  «        › �¦  «        ‚n8t          t          t          t
          f         i ¦  «        ft          | ¦  «        z  }|�Pt          | ¦  «        t          |¦  «        k    r/t          dt          | ¦  «        › dt          |¦  «        › �¦  «        ‚ndgt          | ¦  «        z  }d„ |D ¦   «         }d„ |D ¦   «         }t          j                             ¦   «         st          d¦  «        ‚t          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k    raˆ
fd„t'          t)          | ||||d¬¦  «        ¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|D ]}|                     ¦   «          Œn. ‰
d| d         |d         |d         |d         |d         ¦  «         g }t/          t          |¦  «        ¦  «        D ]H}‰|         }	t1          |	t2          ¦  «        r|	                     ¦   «          |                     |	¦  «         ŒI|S )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 c                 ó.   — g | ]}t          |d ¦  «        ‘ŒS )Tr   ©Ú.0Úxs     r   ú
<listcomp>z"parallel_apply.<locals>.<listcomp>F   s#   € Ð;Ð;Ð;¨aÕ   DÑ)Ô)Ð;Ð;Ð;r   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S © )r   ÚacceleratorÚcurrent_streamr    s     r   r#   z"parallel_apply.<locals>.<listcomp>G   s)   € ÐDÐDÐD°q�uÔ ×/Ò/°Ñ2Ô2ÐDÐDÐDr   zNo available accelerator found.ÚiÚmoduleÚinputÚkwargsÚdeviceÚstreamr   c                 ó˜  •— t          j        ‰
¦  «         |€Xt          |¦  «        }|€3‰5  t          d| › d�¬¦  «        ‰| <   d d d ¦  «         n# 1 swxY w Y   d S |                     ¦   «         }t          |t           j        ¦  «        r|j        }|€t           j         	                    |¦  «        }	 t           j         
                    |¦  «        5  |5  t           j                             ‰	‰¬¦  «        5  t          |t          t          f¦  «        s|f} ||i |¤Ž}d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   ‰5  |‰| <   d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r9 ‰5  t          d| › d|› �¬¦  «        ‰| <   d d d ¦  «         Y d S # 1 swxY w Y   Y d S 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,   Úindexr&   r'   Ú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ð4¨Að 4ð 4ð 4ð"ñ "ô "�G˜A‘Jðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 �Ø—\’\‘^”^ˆFÝ�f�eœlÑ+Ô+ð 	"Ø”\ˆFØˆ>ÝÔ&×5Ò5°fÑ=Ô=ˆFð	åÔ!×.Ò.¨vÑ6Ô6ð2ð 2àð2ð 2õ ”	×"Ò" ;Ð8HÐ"ÑIÔIð2ð 2õ " %­$µ¨Ñ7Ô7ð %Ø"˜H�EØ˜ Ð1¨&Ð1Ð1�ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð ð $ð $Ø#�˜‘
ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $øåð 	ð 	ð 	Øð ð Ý-Ø>¨Ð>Ð>°fÐ>Ð>ðñ ô �˜‘
ðð ð ñ ô ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð ð	øøøs×   «AÁAÁAÂ3F ÃEÃ"EÃ7(D+ÄEÄ+D/Ä/EÄ2D/Ä3EÄ6EÅE	ÅEÅ	E	Å
EÅF ÅEÅF Å EÅ!F Å&E9Å,F Å9E=Å=F Æ E=ÆF ÆG	ÆF:Æ,G	Æ:F>	Æ>G	ÇF>	ÇG	ÇG	é   c                 óZ   •— g | ]'\  }\  }}}}}t          j        ‰||||||f¬ ¦  «        ‘Œ(S ))ÚtargetÚargs)Ú	threadingÚThread)r!   r(   r)   r*   r+   r,   r-   r?   s          €r   r#   z"parallel_apply.<locals>.<listcomp>|   s^   ø€ ð 
ð 
ð 
ñ ;�Ñ:�F˜E 6¨6°6õ ÔØ a¨°¸ÀÈÐ%Oðñ ô ð
ð 
ð 
r   T)Ústrictr   ©NN)ÚlenÚAssertionErrorr   r   Ústrr   r   r&   Úis_availableÚcurrent_acceleratorÚtyperD   ÚLockÚis_grad_enabledÚis_autocast_enabledÚintr	   r,   ÚStreamÚ	enumerateÚzipÚstartÚjoinÚranger   r   ÚreraiseÚappend)r   r   r   r   ÚstreamsÚthreadsÚthreadÚoutputsr(   r9   r?   r:   r;   r<   r=   r>   s             @@@@@@r   r   r      sÆ  øøøøøø€ õ$ ˆ7�|„|•s˜6‘{”{Ò"Ð"Ýð2¥S¨¡\¤\ð 2ð 2Ý$'¨¡K¤Kð2ð 2ñ
ô 
ð 	
ð ÐÝˆw‰<Œ<�3˜z™?œ?Ò*Ð*Ý ð>­¨W©¬ð >ð >Ý,/°
©O¬Oð>ð >ñô ð ð +õ �4¥¥S œ>¨2Ñ.Ô.Ð0µ3°w±<´<Ñ?ˆ
ØÐÝˆw‰<Œ<�3˜w™<œ<Ò'Ð'Ý ð8­¨W©¬ð 8ð 8Ý),¨W©¬ð8ð 8ñô ð ð (ð �&�3˜w™<œ<Ñ'ˆØ;Ð;°7Ð;Ñ;Ô;€GØDÐD¸GÐDÑDÔD€GÝÔ×)Ò)Ñ+Ô+ð @ÝÐ>Ñ?Ô?Ð?ÝÔ#×7Ò7Ñ9Ô9Ô>€KÝŒ>ÑÔ€DØ€GåÔÑÔÝÔ!Ñ#Ô#ð #€LÐ"ð -1Ø&*ð'ð 'Ýð'åð'õ ð'õ •S�#�X”ð	'õ
 •e”lÑ" TÑ)ð'õ ”˜tÑ#ð'ð 
ð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'õR ˆ7�|„|�aÒÐð
ð 
ð 
ð 
õ ?HÝ�G˜V Z°¸'È$ÐOÑOÔOñ?ô ?ð	
ñ 
ô 
ˆð ð 	ð 	ˆFØ�LŠL‰NŒNˆNˆNØð 	ð 	ˆFØ�KŠK‰MŒMˆMˆMð	ð 	ˆ��7˜1”:˜v aœy¨*°Q¬-¸À¼ÀWÈQÄZÑPÔPÐPà€GÝ•3�v‘;”;ÑÔð ð ˆØ˜”ˆÝ�fÕ.Ñ/Ô/ð 	Ø�NŠNÑÔÐØ�Š�vÑÔÐÐØ€Nr   rG   )rD   Úcollections.abcr   Útypingr   r   r   Útorch._utilsr   Útorch.cuda._utilsr   Útorch.nn.modulesr	   Ú__all__r   r   r   r   r
   rJ   rQ   r,   r   r%   r   r   ú<module>rd      sq  ðØ Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø #Ð #Ð #Ð #Ð #Ð #ð Ð(Ð
)€ðØ	Œ˜˜Sœ	Ñ	! E¨#¨s¨(¤OÑ	3°d¸3À¸8´nÑ	Dðà
„\�DÑðð ð ð ð( 37Ø:>ð	sð sØ�fÔðsà�SŒMðsð ˜˜c 3˜hœÔ(¨4Ñ/ðsð �c˜EœLÑ(¨4Ñ/Ô0°4Ñ7ð	sð
 
ˆ#„Yðsð sð sð sð sð sr   