§
    �ŠtjR  ã                   óþ   — U d dl Z d dlmZ d dlZd dlmZ d dlmZ d dlm	Z	  G d„ de¦  «        Z
 G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Zdaeej        dz           dz  ed<   dej        fd„ZdS )é    N)Úchain©Ú_get_device_index)ÚFunction)Úcommc                   ó:   — e Zd Zed„ ¦   «         Zed„ ¦   «         ZdS )Ú	Broadcastc                 óÀ  ‡	— t          d„ |D ¦   «         ¦  «        st          d¦  «        ‚d„ |D ¦   «         }|| _        t          |¦  «        dk    rdS t          |¦  «        | _        |d                              ¦   «         | _        d„ |D ¦   «         | _        t          j	        || j        ¦  «        }|D ];}t          | j        ¦  «        D ]$\  }}|rt          j        ||         ¦  «        ||<   Œ%Œ<g }t          | j        dd …         ¦  «        D ](\  Š	}|s!|                     ˆ	fd„|D ¦   «         ¦  «         Œ) | j        |Ž  t!          t#          j        |¦  «        ¦  «        S )	Nc              3   ó6   K  — | ]}|j         j        d k    V — ŒdS ©ÚcpuN©ÚdeviceÚtype©Ú.0Úis     úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.pyú	<genexpr>z$Broadcast.forward.<locals>.<genexpr>   ó+   è è € Ð:Ð:¨a�1”8”= EÒ)Ð:Ð:Ð:Ð:Ð:Ð:ó    z2Broadcast function not implemented for CPU tensorsc                 ó.   — g | ]}t          |d ¦  «        ‘ŒS ©Tr   ©r   Úxs     r   ú
<listcomp>z%Broadcast.forward.<locals>.<listcomp>   ó#   € ÐGÐGÐG°aÕ(¨¨DÑ1Ô1ÐGÐGÐGr   r   © c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   ©Ú
is_complex)r   Úinps     r   r   z%Broadcast.forward.<locals>.<listcomp>   s"   € Ð?Ð?Ð?°˜CŸNšNÑ,Ô,Ð?Ð?Ð?r   é   c              3   ó(   •K  — | ]}|‰         V — Œd S ©Nr   )r   ÚoutputÚidxs     €r   r   z$Broadcast.forward.<locals>.<genexpr>"   s'   øè è € Ð*MÐ*M¸6¨6°#¬;Ð*MÐ*MÐ*MÐ*MÐ*MÐ*Mr   )ÚallÚAssertionErrorÚtarget_gpusÚlenÚ
num_inputsÚ
get_deviceÚinput_deviceÚcomplex_maskr   Úbroadcast_coalescedÚ	enumerateÚtorchÚview_as_complexÚneeds_input_gradÚextendÚmark_non_differentiableÚtupler   Úfrom_iterable)
Úctxr*   ÚinputsÚoutputsÚdevice_outputsr   r!   Únon_differentiablesÚinput_requires_gradr'   s
            @r   ÚforwardzBroadcast.forward   sœ  ø€ åÐ:Ð:°6Ð:Ñ:Ô:Ñ:Ô:ð 	WÝ Ð!UÑVÔVÐVØGÐG¸;ÐGÑGÔGˆØ%ˆŒÝˆv‰;Œ;˜!ÒÐØ�2Ý˜V™œˆŒØ! !œ9×/Ò/Ñ1Ô1ˆÔà?Ð?¸Ð?Ñ?Ô?ˆÔåÔ*¨6°3´?ÑCÔCˆà%ð 	Qð 	QˆNÝ!*¨3Ô+;Ñ!<Ô!<ð Qð Q‘��:Øð QÝ(-Ô(=¸nÈQÔ>OÑ(PÔ(P�N 1Ñ%øðQð !ÐÝ(1°#Ô2FÀqÀrÀrÔ2JÑ(KÔ(Kð 	Nð 	NÑ$ˆCÐ$Ø&ð NØ#×*Ò*Ð*MÐ*MÐ*MÐ*MÀWÐ*MÑ*MÔ*MÑMÔMÐMøØ#ˆÔ#Ð%8Ð9Ð9Ý•UÔ(¨Ñ1Ô1Ñ2Ô2Ð2r   c                 óF   — t          j        | j        | j        g|¢R Ž }d|z   S )Nr%   )ÚReduceAddCoalescedÚapplyr.   r,   )r9   Úgrad_outputsÚgradss      r   ÚbackwardzBroadcast.backward&   s7   € å"Ô(ØÔ˜cœnð
Ø/;ð
ð 
ð 
ˆð ˜‰Ðr   N©Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr?   rE   r   r   r   r	   r	   
   sH   € € € € € Øð3ð 3ñ „\ð3ð4 ðð ñ „\ðð ð r   r	   c                   ó:   — e Zd Zed„ ¦   «         Zed„ ¦   «         ZdS )rA   c                 ó®  ‡‡‡— ˆfd„t          dt          ‰¦  «        ‰¦  «        D ¦   «         | _        ˆfd„t          ‰¦  «        D ¦   «         }|| _        t	          d„ ‰D ¦   «         ¦  «        Šˆˆfd„t          dt          ‰¦  «        ‰¦  «        D ¦   «         }t          j        ||¦  «        }t	          d„ t          ||¦  «        D ¦   «         ¦  «        }|S )Nc                 óD   •— g | ]}‰|                               ¦   «         ‘ŒS r   ©r-   ©r   r   rD   s     €r   r   z.ReduceAddCoalesced.forward.<locals>.<listcomp>2   s6   ø€ ð 
ð 
ð 
Ø&'ˆE�!ŒH×ÒÑ!Ô!ð
ð 
ð 
r   r   c                 óD   •— g | ]}‰|                               ¦   «         ‘ŒS r   r    rO   s     €r   r   z.ReduceAddCoalesced.forward.<locals>.<listcomp>6   s)   ø€ ÐIÐIÐI°!˜˜aœ×+Ò+Ñ-Ô-ÐIÐIÐIr   c              3   ój   K  — | ].}|                      ¦   «         rt          j        |¦  «        n|V — Œ/d S r%   )r!   r2   Úview_as_real©r   Úgs     r   r   z-ReduceAddCoalesced.forward.<locals>.<genexpr>9   sP   è è € ð  
ð  
Ø?@ Q§\¢\¡^¤^Ð:�EÔ˜qÑ!Ô!Ð!¸ð 
ð  
ð  
ð  
ð  
ð  
r   c                 ó*   •— g | ]}‰||‰z   …         ‘ŒS r   r   )r   r   Úgrads_convertedr,   s     €€r   r   z.ReduceAddCoalesced.forward.<locals>.<listcomp>=   s7   ø€ ð 
ð 
ð 
àð ˜A  J¡Ð.Ô/ð
ð 
ð 
r   c              3   óL   K  — | ]\  }}|rt          j        |¦  «        n|V — Œ d S r%   ©r2   r3   )r   Úrr!   s      r   r   z-ReduceAddCoalesced.forward.<locals>.<genexpr>C   sO   è è € ð 
ð 
á��:ð )3Ð9�EÔ! !Ñ$Ô$Ð$¸ð
ð 
ð 
ð 
ð 
ð 
r   )Úranger+   r*   r/   r7   r   Úreduce_add_coalescedÚzip)r9   Údestinationr,   rD   r/   Úgrads_ÚresultsrV   s     ``   @r   r?   zReduceAddCoalesced.forward0   s)  øøø€ ð
ð 
ð 
ð 
Ý+0°µC¸±J´JÀ
Ñ+KÔ+Kð
ñ 
ô 
ˆŒð JÐIÐIÐIµu¸ZÑ7HÔ7HÐIÑIÔIˆØ'ˆÔåð  
ð  
ØDIð 
ñ  
ô  
ñ 
ô 
ˆð
ð 
ð 
ð 
ð 
å˜1�c /Ñ2Ô2°JÑ?Ô?ð
ñ 
ô 
ˆõ Ô+¨F°KÑ@Ô@ˆåð 
ð 
å!$ W¨lÑ!;Ô!;ð
ñ 
ô 
ñ 
ô 
ˆð
 ˆr   c                 ó6   — dt          j        | j        g|¢R Ž z   S )N©NN)r	   rB   r*   )r9   rC   s     r   rE   zReduceAddCoalesced.backwardJ   s*   € ð
õ ŒO˜CœOÐ;¨lÐ;Ð;Ð;ñ<ð 	<r   NrF   r   r   r   rA   rA   /   sH   € € € € € Øðð ñ „\ðð2 ð<ð <ñ „\ð<ð <ð <r   rA   c                   ó:   — e Zd Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚGatherc                 ó¬  ‡ — t          d„ |D ¦   «         ¦  «        st          d¦  «        ‚|dk    rd‰ _        nt          |d¦  «        }|‰ _        |‰ _        t          d„ |D ¦   «         ¦  «        ‰ _        t          d„ |D ¦   «         ¦  «        r=|dk    r7t          d„ |D ¦   «         ¦  «        }t          j        d	d
¬¦  «         d‰ _	        nd‰ _	        t          ˆ fd„|D ¦   «         ¦  «        ‰ _
        t          |¦  «        dk    o|d                              ¦   «         }t          j        |‰ j        ‰ j        ¦  «        }|rt          j        |¦  «        }|S )Nc              3   ó6   K  — | ]}|j         j        d k    V — ŒdS r   r   r   s     r   r   z!Gather.forward.<locals>.<genexpr>U   r   r   z/Gather function not implemented for CPU tensorsr   Tc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r%   rN   r   s     r   r   z!Gather.forward.<locals>.<genexpr>]   s*   è è € Ð>Ð>°!˜qŸ|š|™~œ~Ð>Ð>Ð>Ð>Ð>Ð>r   c              3   óF   K  — | ]}|                      ¦   «         d k    V — ŒdS ©r   N)Údim©r   Úts     r   r   z!Gather.forward.<locals>.<genexpr>^   s.   è è € Ð,Ð, ˆq�uŠu‰wŒw˜!Š|Ð,Ð,Ð,Ð,Ð,Ð,r   r   c              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS )r#   N)Úviewrj   s     r   r   z!Gather.forward.<locals>.<genexpr>_   s,   è è € Ð5Ð5¨˜1Ÿ6š6 !™9œ9Ð5Ð5Ð5Ð5Ð5Ð5r   zvWas asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.é   )Ú
stacklevelFc              3   óL   •K  — | ]}|                      ‰j        ¦  «        V — Œd S r%   )Úsizeri   )r   r   r9   s     €r   r   z!Gather.forward.<locals>.<genexpr>i   s/   øè è € Ð@Ð@°A §¢ s¤w¡¤Ð@Ð@Ð@Ð@Ð@Ð@r   )r(   r)   Útarget_devicer   ri   r7   Ú
input_gpusÚwarningsÚwarnÚunsqueezed_scalarÚinput_sizesr+   r!   r   Úgatherr2   r3   )r9   rr   ri   r:   r!   r&   s   `     r   r?   zGather.forwardS   s|  ø€ åÐ:Ð:°6Ð:Ñ:Ô:Ñ:Ô:ð 	TÝ Ð!RÑSÔSÐSØ˜EÒ!Ð!Ø %ˆCÔÐå-¨m¸TÑBÔBˆMØ -ˆCÔØˆŒÝÐ>Ð>°vÐ>Ñ>Ô>Ñ>Ô>ˆŒÝÐ,Ð, VÐ,Ñ,Ô,Ñ,Ô,ð 
	*°¸²°ÝÐ5Ð5¨fÐ5Ñ5Ô5Ñ5Ô5ˆFÝŒMð'ð ð	ñ ô ð ð %)ˆCÔ!Ð!à$)ˆCÔ!ÝÐ@Ð@Ð@Ð@¸Ð@Ñ@Ô@Ñ@Ô@ˆŒå˜‘[”[ 1’_Ð?¨°¬×)=Ò)=Ñ)?Ô)?ˆ
å”˜V S¤W¨cÔ.?Ñ@Ô@ˆàð 	3ÝÔ*¨6Ñ2Ô2ˆFàˆr   c                 ó¤   — t                                | j        | j        | j        |¦  «        }| j        rt          d„ |D ¦   «         ¦  «        }d|z   S )Nc              3   ó&   K  — | ]}|d          V — ŒdS rh   r   rS   s     r   r   z"Gather.backward.<locals>.<genexpr>z   s&   è è € Ð#BÐ#B¨Q A a¤DÐ#BÐ#BÐ#BÐ#BÐ#BÐ#Br   ra   )ÚScatterrB   rs   rw   ri   rv   r7   )r9   Úgrad_outputÚscattered_gradss      r   rE   zGather.backwardt   sY   € å!Ÿ-š-ØŒN˜CœO¨S¬W°kñ
ô 
ˆð Ô ð 	CÝ#Ð#BÐ#B°/Ð#BÑ#BÔ#BÑBÔBˆOØ˜oÑ-Ð-r   NrF   r   r   r   rc   rc   R   sI   € € € € € Øðð ñ „\ðð@ ð.ð .ñ „\ð.ð .ð .r   rc   c                   ó:   — e Zd Zed„ ¦   «         Zed„ ¦   «         ZdS )r{   c                 óÌ  — d„ |D ¦   «         }|| _         |j        j        dk    r|                     ¦   «         nd| _        d }t
          j                             ¦   «         r| j        dk    rd„ |D ¦   «         }|                     ¦   «         }t          j
        |||| j         |¦  «        }|rt          d„ |D ¦   «         ¦  «        }|� t          |¦  «        D ]�\  }}	t
          j                             ||         ¦  «        5  t
          j                             ¦   «         }
|
                     ||         ¦  «         |	                     |
¦  «         d d d ¦  «         n# 1 swxY w Y   Œ‘|S )Nc                 ó.   — g | ]}t          |d ¦  «        ‘ŒS r   r   r   s     r   r   z#Scatter.forward.<locals>.<listcomp>�   r   r   r   éÿÿÿÿc                 óP   — g | ]#}t          t          j        |¦  «        ¦  «        ‘Œ$S r   )Ú_get_streamr2   r   )r   r   s     r   r   z#Scatter.forward.<locals>.<listcomp>‡   s*   € ÐSÐSÐS¸V•{¥5¤<°Ñ#7Ô#7Ñ8Ô8ÐSÐSÐSr   c              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S r%   rX   )r   Úos     r   r   z"Scatter.forward.<locals>.<genexpr>Ž   s-   è è € ÐFÐF¸�EÔ1°!Ñ4Ô4ÐFÐFÐFÐFÐFÐFr   )ri   r   r   r-   r.   r2   ÚacceleratorÚis_availabler!   r   Úscatterr7   r1   Údevice_indexÚcurrent_streamÚwait_streamÚrecord_stream)r9   r*   Úchunk_sizesri   ÚinputÚstreamsr!   r;   r   r&   Úmain_streams              r   r?   zScatter.forward   s¬  € àGÐG¸;ÐGÑGÔGˆØˆŒØ16´Ô1BÀeÒ1KÐ1K˜5×+Ò+Ñ-Ô-Ð-ÐQSˆÔØˆÝÔ×)Ò)Ñ+Ô+ð 	T°Ô0@ÀBÒ0FÐ0FàSÐSÀ{ÐSÑSÔSˆGà×%Ò%Ñ'Ô'ˆ
å”,˜u k°;ÀÄÈÑQÔQˆàð 	GÝÐFÐF¸gÐFÑFÔFÑFÔFˆGð ÐÝ& wÑ/Ô/ð 6ð 6‘	��6ÝÔ&×3Ò3°KÀ´NÑCÔCð 6ð 6Ý"'Ô"3×"BÒ"BÑ"DÔ"D�KØ×+Ò+¨G°A¬JÑ7Ô7Ð7Ø×(Ò(¨Ñ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6øð ˆs   Ã=AEÅE	ÅE	c                 óD   — d d d t          j        | j        | j        g|¢R Ž fS r%   )rc   rB   r.   ri   )r9   r|   s     r   rE   zScatter.backward™   s*   € à�T˜4¥¤¨cÔ.>ÀÄÐ!VÈ+Ð!VÐ!VÐ!VÐVÐVr   NrF   r   r   r   r{   r{   ~   sM   € € € € € Øðð ñ „\ðð2 ðWð Wñ „\ðWð Wð Wr   r{   Ú_streamsr   c                 ó  — | j         dk    st          j                             ¦   «         sdS t          j                             ¦   «         j         | j         k    r;t          dt          j                             ¦   «         j         › d| j         › �¦  «        ‚t          €"dgt          j                             ¦   «         z  at          | j                 €&t          j	        | j        ¦  «        t          | j        <   t          | j                 S )zBGet a background stream for copying between CPU and target device.r   Nz"Expected current accelerator type z to match device type )
r   r2   r†   r‡   Úcurrent_acceleratorr)   r’   Údevice_countÚindexÚStream)r   s    r   rƒ   rƒ   ¢   sâ   € ð „{�eÒÐ¥5Ô#4×#AÒ#AÑ#CÔ#CÐØˆtÝÔ×,Ò,Ñ.Ô.Ô3°v´{ÒBÐBÝð2µÔ1B×1VÒ1VÑ1XÔ1XÔ1]ð 2ð 2Ø$*¤Kð2ð 2ñ
ô 
ð 	
õ ÐØ�6�EÔ-×:Ò:Ñ<Ô<Ñ<ˆÝ�”ÔÐ%Ý!&¤¨f¬lÑ!;Ô!;��”ÑÝ�F”LÔ!Ð!r   )rt   Ú	itertoolsr   r2   Útorch._utilsr   Útorch.autogradr   Útorch.nn.parallelr   r	   rA   rc   r{   r’   Úlistr—   Ú__annotations__r   rƒ   r   r   r   ú<module>rž      s_  ðØ €€€€Ø Ð Ð Ð Ð Ð à €€€Ø *Ð *Ð *Ð *Ð *Ð *Ø #Ð #Ð #Ð #Ð #Ð #Ø "Ð "Ð "Ð "Ð "Ð "ð"ð "ð "ð "ð "�ñ "ô "ð "ðJ <ð  <ð  <ð  <ð  <˜ñ  <ô  <ð  <ðF).ð ).ð ).ð ).ð ).ˆXñ ).ô ).ð ).ðXWð Wð Wð Wð Wˆhñ Wô Wð WðB .2€ˆ$ˆuŒ|˜dÑ"Ô
# dÑ
*Ð 1Ð 1Ñ 1ð"˜œð "ð "ð "ð "ð "ð "r   