§
    �Štj®  ã                   óH  — d dl mZ d dlmZmZmZ d dlmZ d dlZd dl	m
Z
mZ g d¢Z ede¬¦  «        d	ed
efd„¦   «         Zd	ed
efd„Z edeee¦  «        Ze	 ddej        deeej        z           ded
eej        df         fd„¦   «         Ze	 ddedeeej        z           ded
ee         fd„¦   «         Zdd„Z	 ddeedf         deeef         dz  deeej        z           ded
eeedf         eeeef         df         f         f
d„Zddedeej        z  ded
efd„ZdS )é    )ÚSequence)ÚAnyÚoverloadÚTypeVar)Ú
deprecatedN)ÚGatherÚScatter)ÚscatterÚscatter_kwargsÚgatherzC`is_namedtuple` is deprecated, please use the python checks instead)ÚcategoryÚobjÚreturnc                 ó    — t          | ¦  «        S ©N)Ú_is_namedtuple©r   s    ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/nn/parallel/scatter_gather.pyÚis_namedtupler      s   € õ ˜#ÑÔÐó    c                 ól   — t          | t          ¦  «        ot          | d¦  «        ot          | d¦  «        S )NÚ_asdictÚ_fields)Ú
isinstanceÚtupleÚhasattrr   s    r   r   r      s4   € õ 	�3�ÑÔÐV¥7¨3°	Ñ#:Ô#:ÐV½wÀsÈIÑ?VÔ?Vðr   ÚT.ÚinputsÚtarget_gpusÚdimc                 ó   — d S r   © ©r   r   r    s      r   r
   r
   !   s	   € ð
  #˜sr   c                 ó   — d S r   r"   r#   s      r   r
   r
   )   s	   € ð
 ˆcr   c                 óF   ‡‡‡— ˆˆˆfd„Š	  ‰| ¦  «        }dŠn# dŠw xY w|S )z–Slice tensors into approximately equal chunks and distributes them across given GPUs.

    Duplicates references to objects that are not tensors.
    c                 óä  •‡ — t          ‰ t          j        ¦  «        rt          j        ‰d ‰‰ ¦  «        S t          ‰ ¦  «        r&ˆ fd„t          t          ‰‰ ¦  «        ddiŽD ¦   «         S t          ‰ t          ¦  «        r:t          ‰ ¦  «        dk    r't          t          t          ‰‰ ¦  «        ddiŽ¦  «        S t          ‰ t          ¦  «        r7t          ‰ ¦  «        dk    r$d„ t          t          ‰‰ ¦  «        ddiŽD ¦   «         S t          ‰ t          ¦  «        rKt          ‰ ¦  «        dk    r8ˆ fd„t          t          ‰‰                      ¦   «         ¦  «        ddiŽD ¦   «         S ˆ fd„‰D ¦   «         S )Nc                 ó4   •— g | ]} t          ‰¦  «        |Ž ‘ŒS r"   ©Útype)Ú.0Úargsr   s     €r   ú
<listcomp>z0scatter.<locals>.scatter_map.<locals>.<listcomp>;   s8   ø€ ð ð ð ð ð •�S‘	”	˜4Ð ðð ð r   ÚstrictFr   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r"   )Úlist)r*   Úis     r   r,   z0scatter.<locals>.scatter_map.<locals>.<listcomp>E   s   € ÐOÐOÐO •D˜‘G”GÐOÐOÐOr   c                 ó@   •— g | ]} t          ‰¦  «        |¦  «        ‘ŒS r"   r(   )r*   r0   r   s     €r   r,   z0scatter.<locals>.scatter_map.<locals>.<listcomp>G   s9   ø€ ð ð ð ð ð •�S‘	”	˜!‘”ðð ð r   c                 ó   •— g | ]}‰‘ŒS r"   r"   )r*   Ú_r   s     €r   r,   z0scatter.<locals>.scatter_map.<locals>.<listcomp>L   s   ø€ Ð)Ð)Ð)˜�Ð)Ð)Ð)r   )r   ÚtorchÚTensorr	   Úapplyr   ÚzipÚmapr   Úlenr/   ÚdictÚitems)r   r    Úscatter_mapr   s   `€€€r   r<   zscatter.<locals>.scatter_map7   sž  øø€ Ý�c�5œ<Ñ(Ô(ð 	>Ý”= ¨d°C¸Ñ=Ô=Ð=Ý˜#ÑÔð 	ðð ð ð õ  ¥ [°#Ñ!6Ô!6ÐE¸uÐEÐEðñ ô ð õ
 �c�5Ñ!Ô!ð 	C¥c¨#¡h¤h°¢l lå��S ¨cÑ2Ô2ÐA¸5ÐAÐAÑBÔBÐBÝ�c�4Ñ Ô ð 	P¥S¨¡X¤X°¢\ \àOÐO¥S­#¨k¸3Ñ*?Ô*?Ð%NÈÐ%NÐ%NÐOÑOÔOÐOÝ�c�4Ñ Ô ð 	¥S¨¡X¤X°¢\ \ðð ð ð õ �c +¨s¯yªy©{¬{Ñ;Ô;ÐJÀEÐJÐJðñ ô ð ð
 *Ð)Ð)Ð)˜[Ð)Ñ)Ô)Ð)r   Nr"   )r   r   r    Úresr<   s    `` @r   r
   r
   1   sY   øøø€ ð*ð *ð *ð *ð *ð *ð *ð8Øˆk˜&Ñ!Ô!ˆàˆˆø�dˆÐÐÐÐØ€Jó   Œ šÚkwargsc           	      ó8  — | rt          | ||¦  «        ng }|rt          |||¦  «        ng }t          |¦  «        t          |¦  «        k     rJ|                     d„ t          t          |¦  «        t          |¦  «        z
  ¦  «        D ¦   «         ¦  «         nit          |¦  «        t          | ¦  «        k     rI|                     d„ t          t          |¦  «        t          |¦  «        z
  ¦  «        D ¦   «         ¦  «         t	          |¦  «        t	          |¦  «        fS )z+Scatter with support for kwargs dictionary.c              3   ó   K  — | ]}d V — ŒdS )r"   Nr"   ©r*   r3   s     r   ú	<genexpr>z!scatter_kwargs.<locals>.<genexpr>d   ó3   è è € ð  
ð  
ØˆBð 
ð  
ð  
ð  
ð  
ð  
r   c              3   ó   K  — | ]}i V — Œd S r   r"   rB   s     r   rC   z!scatter_kwargs.<locals>.<genexpr>h   rD   r   )r
   r9   ÚextendÚranger   )r   r?   r   r    Úscattered_inputsÚscattered_kwargss         r   r   r   Z   s@  € ð =CÐJ•w˜v {°CÑ8Ô8Ð8ÈÐØ<BÐJ•w˜v {°CÑ8Ô8Ð8ÈÐÝ
ÐÑÔ�sÐ#3Ñ4Ô4Ò4Ð4Ø×Òð  
ð  
Ý�cÐ"2Ñ3Ô3µcÐ:JÑ6KÔ6KÑKÑLÔLð 
ñ  
ô  
ñ 	
ô 	
ð 	
ð 	
õ 
ÐÑ	Ô	¥ V¡¤Ò	,Ð	,Ø×Òð  
ð  
Ý�cÐ"2Ñ3Ô3µcÐ:JÑ6KÔ6KÑKÑLÔLð 
ñ  
ô  
ñ 	
ô 	
ð 	
õ Ð!Ñ"Ô"¥EÐ*:Ñ$;Ô$;Ð;Ð;r   ÚoutputsÚtarget_devicec                 óF   ‡‡‡— ˆˆˆfd„Š	  ‰| ¦  «        }dŠn# dŠw xY w|S )a™  Gather tensors from different GPUs on a specified device.

    This function is useful for gathering the results of a distributed computation.
    It takes a sequence of objects, one for each GPU, and returns a single object
    on the specified device.

    Args:
        outputs (Any): A sequence of objects (potentially tensors) to gather.
        target_device (Union[int, torch.device]): The device to gather the tensors to.
            Use 'cpu' for CPU to avoid a deprecation warning.
        dim (int, optional): The dimension along which to gather. Default: 0.

    Returns:
        Any: A gathered object (potentially tensor) on the specified device.
    c           
      ó4  •‡ ‡— ‰ d         Št          ‰t          j        ¦  «        rt          j        ‰‰g‰ ¢R Ž S ‰€d S t          ‰t
          ¦  «        rOt          ˆfd„‰ D ¦   «         ¦  «        st          d¦  «        ‚ t          ‰¦  «        ˆˆ fd„‰D ¦   «         ¦  «        S t          ‰¦  «        r:t          ‰¦  «         
                    t          ‰t          ‰ ddiŽ¦  «        ¦  «        S  t          ‰¦  «        t          ‰t          ‰ ddiŽ¦  «        ¦  «        S )Nr   c              3   óX   •K  — | ]$}t          ‰¦  «        t          |¦  «        k    V — Œ%d S r   )r9   )r*   ÚdÚouts     €r   rC   z-gather.<locals>.gather_map.<locals>.<genexpr>†   s4   øè è € Ð;Ð;¨a•s˜3‘x”x¥3 q¡6¤6Ò)Ð;Ð;Ð;Ð;Ð;Ð;r   z+All dicts must have the same number of keysc              3   óL   •‡K  — | ]Š‰ ‰ˆfd „‰D ¦   «         ¦  «        fV — ŒdS )c                 ó    •— g | ]
}|‰         ‘ŒS r"   r"   )r*   rO   Úks     €r   r,   z8gather.<locals>.gather_map.<locals>.<genexpr>.<listcomp>‰   s   ø€ Ð,CÐ,CÐ,C°a¨Q¨q¬TÐ,CÐ,CÐ,Cr   Nr"   )r*   rS   Ú
gather_maprJ   s    @€€r   rC   z-gather.<locals>.gather_map.<locals>.<genexpr>‰   sH   øøè è € ÐSÐSÈ!˜a  Ð,CÐ,CÐ,CÐ,C¸7Ð,CÑ,CÔ,CÑ!DÔ!DÐEÐSÐSÐSÐSÐSÐSr   r-   T)r   r4   r5   r   r6   r:   ÚallÚ
ValueErrorr)   r   Ú_maker8   r7   )rJ   rP   r    rT   rK   s   `@€€€r   rT   zgather.<locals>.gather_map   s)  øøø€ Ø�aŒjˆÝ�c�5œ<Ñ(Ô(ð 	>Ý”< ¨sÐ=°WÐ=Ð=Ð=Ð=Øˆ;Ø�4Ý�c�4Ñ Ô ð 	TÝÐ;Ð;Ð;Ð;°7Ð;Ñ;Ô;Ñ;Ô;ð PÝ Ð!NÑOÔOÐOà•4˜‘9”9ÐSÐSÐSÐSÐSÈsÐSÑSÔSÑSÔSÐSÝ˜#ÑÔð 	På˜‘9”9—?’?¥3 zµ3¸Ð3MÈÐ3MÐ3MÑ#NÔ#NÑOÔOÐOà�t�C‰yŒy�˜Z­¨gÐ)C¸dÐ)CÐ)CÑDÔDÑEÔEÐEr   Nr"   )rJ   rK   r    r=   rT   s    `` @r   r   r   n   s`   øøø€ ð"Fð Fð Fð Fð Fð Fð Fð&Øˆj˜Ñ!Ô!ˆàˆ
ˆ
ø�Tˆ
ÐÐÐÐØ€Jr>   ).)r   )Úcollections.abcr   Útypingr   r   r   Útyping_extensionsr   r4   Útorch.nn.parallel._functionsr   r	   Ú__all__ÚFutureWarningÚboolr   r   r:   r/   r   r   r5   ÚintÚdevicer
   Ústrr   r   r"   r   r   ú<module>rb      s¨  ðà $Ð $Ð $Ð $Ð $Ð $Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø (Ð (Ð (Ð (Ð (Ð (à €€€Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ð 2Ð
1Ð
1€ð €ØIØðñ ô ð�sð ˜tð ð ð ñ	ô ðð
˜ð  ð ð ð ð ð €GˆC��t˜UÑ#Ô#€ð 
ð ð#ð #ØŒLð#à˜# ¤Ñ,Ô-ð#ð 
ð#ð ˆ5Œ<˜ÐÔð	#ð #ð #ñ 
„ð#ð 
ð ðð Øðà˜# ¤Ñ,Ô-ðð 
ðð 
ˆ!„Wð	ð ð ñ 
„ðð&ð &ð &ð &ðZ ð	<ð <Ø�#�s�(ŒOð<à��c�ŒN˜TÑ!ð<ð ˜# ¤Ñ,Ô-ð<ð 
ð	<ð
 ˆ5��c�Œ?˜E $ s¨C x¤.°#Ð"5Ô6Ð6Ô7ð<ð <ð <ð <ð((ð (�Cð (¨¨e¬lÑ(:ð (Àð (ÈSð (ð (ð (ð (ð (ð (r   