Ë
    S²j®  ã                   ó"  — 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y)é    )Ú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/ia-enhanced/venv/lib/python3.12/site-packages/torch/nn/parallel/scatter_gather.pyÚis_namedtupler      s   € ô ˜#ÓÐó    c                 óZ   — t        | t        «      xr t        | d«      xr t        | d«      S )NÚ_asdictÚ_fields)Ú
isinstanceÚtupleÚhasattrr   s    r   r   r      s+   € ô 	�3œÓÒV¤7¨3°	Ó#:ÒV¼wÀsÈIÓ?Vðr   ÚT.ÚinputsÚtarget_gpusÚdimc                  ó   — y r   © ©r   r   r    s      r   r
   r
   !   s   € ð
  #r   c                  ó   — y r   r"   r#   s      r   r
   r
   )   s   € ð
 r   c                 ó>   ‡‡‡— ˆˆˆfd„Š	  ‰| «      }dŠ|S # dŠw xY w)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/t        t        ‰| «      ddiŽD �cg c]  } t        | «      |Ž ‘Œ c}S t        | t        «      r,t        | «      dkD  rt        t        t        ‰| «      ddiŽ«      S t        | t        «      r:t        | «      dkD  r,t        t        ‰| «      ddiŽD �cg c]  }t        |«      ‘Œ c}S t        | t        «      rNt        | «      dkD  r@t        t        ‰| j                  «       «      ddiŽD �cg c]  } t        | «      |«      ‘Œ c}S ‰D �cg c]  }| ‘Œ c}S c c}w c c}w c c}w c c}w )NÚstrictFr   )r   ÚtorchÚTensorr	   Úapplyr   ÚzipÚmapÚtyper   ÚlenÚlistÚdictÚitems)r   ÚargsÚiÚ_r    Úscatter_mapr   s       €€€r   r5   zscatter.<locals>.scatter_map7   sQ  ø€ Ü�cœ5Ÿ<™<Ô(Ü—=‘= ¨d°C¸Ó=Ð=Ü˜#Ôô  ¤ [°#Ó!6ÐE¸uÑEöð ð ”�S“	˜4Ò òð ô
 �cœ5Ô!¤c¨#£h°¢läœœS ¨cÓ2ÐA¸5ÑAÓBÐBÜ�cœ4Ô ¤S¨£X°¢\ä%(¬#¨k¸3Ó*?Ð%NÈÑ%NÖO ”D˜•GÒOÐOÜ�cœ4Ô ¤S¨£X°¢\ô œc +¨s¯y©y«{Ó;ÐJÀEÑJöð ð ”�S“	˜!•òð ð
 )Ö)˜’Ò)Ð)ùò#ùò Pùòùò
 *s   ÁE"ÃE'Ä7E,Å	E1Nr"   )r   r   r    Úresr5   s    `` @r   r
   r
   1   s*   ú€ ö*ð8Ù˜&Ó!ˆàˆØ€Jøð ‰úó   Œ ˜Úkwargsc           	      ó¨  — | rt        | ||«      ng }|rt        |||«      ng }t        |«      t        |«      k  r7|j                  d„ t        t        |«      t        |«      z
  «      D «       «       nMt        |«      t        | «      k  r6|j                  d„ t        t        |«      t        |«      z
  «      D «       «       t	        |«      t	        |«      fS )z+Scatter with support for kwargs dictionary.c              3   ó    K  — | ]  }d –— Œ y­w)r"   Nr"   ©Ú.0r4   s     r   ú	<genexpr>z!scatter_kwargs.<locals>.<genexpr>d   ó   è ø€ ò  
ØŒBñ 
ùó   ‚c              3   ó    K  — | ]  }i –— Œ y ­wr   r"   r;   s     r   r=   z!scatter_kwargs.<locals>.<genexpr>h   r>   r?   )r
   r.   ÚextendÚranger   )r   r8   r   r    Úscattered_inputsÚscattered_kwargss         r   r   r   Z   sÎ   € ñ =C”w˜v {°CÔ8ÈÐÙ<B”w˜v {°CÔ8ÈÐÜ
ÐÓœsÐ#3Ó4Ò4Ø×Ññ  
ÜœcÐ"2Ó3´cÐ:JÓ6KÑKÓLô 
õ 	
ô 
ÐÓ	¤ V£Ò	,Ø×Ññ  
ÜœcÐ"2Ó3´cÐ:JÓ6KÑKÓLô 
ô 	
ô Ð!Ó"¤EÐ*:Ó$;Ð;Ð;r   ÚoutputsÚtarget_devicec                 ó>   ‡‡‡— ˆˆˆfd„Š	  ‰| «      }dŠ|S # dŠw xY w)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           
      óÆ  •‡ ‡— ‰ d   Št        ‰t        j                  «      rt        j                  ‰‰g‰ ¢­Ž S ‰€y t        ‰t
        «      r:t        ˆfd„‰ D «       «      st        d«      ‚ t        ‰«      ˆˆ fd„‰D «       «      S t        ‰«      r-t        ‰«      j                  t        ‰t        ‰ ddiŽ«      «      S  t        ‰«      t        ‰t        ‰ ddiŽ«      «      S )Nr   c              3   óL   •K  — | ]  }t        ‰«      t        |«      k(  –— Œ y ­wr   )r.   )r<   ÚdÚouts     €r   r=   z-gather.<locals>.gather_map.<locals>.<genexpr>†   s   øè ø€ Ò;¨a”s˜3“x¤3 q£6Õ)Ñ;ùs   ƒ!$z+All dicts must have the same number of keysc           	   3   ó^   •K  — | ]  }| ‰‰D �cg c]  }||   ‘Œ	 c}«      f–— Œ! y c c}w ­wr   r"   )r<   ÚkrJ   Ú
gather_maprE   s      €€r   r=   z-gather.<locals>.gather_map.<locals>.<genexpr>‰   s-   øè ø€ ÒSÈ!˜a¡¸7Ö,C°a¨Q¨q«TÒ,CÓ!DÔEÑSùÒ,Cùs   ƒ-�(›-r'   T)r   r(   r)   r   r*   r0   ÚallÚ
ValueErrorr-   r   Ú_maker,   r+   )rE   rK   r    rN   rF   s   `@€€€r   rN   zgather.<locals>.gather_map   sÁ   ú€ Ø�a‰jˆÜ�cœ5Ÿ<™<Ô(Ü—<‘< ¨sÐ=°WÒ=Ð=Øˆ;ØÜ�cœ4Ô ÜÓ;°7Ô;Ô;Ü Ð!NÓOÐOà”4˜“9ÔSÈsÔSÓSÐSÜ˜#Ôä˜“9—?‘?¤3 z´3¸Ð3MÈÑ3MÓ#NÓOÐOàŒt�C‹yœ˜Z¬¨gÐ)C¸dÑ)CÓDÓEÐEr   Nr"   )rE   rF   r    r6   rN   s    `` @r   r   r   n   s+   ú€ ö"Fð&Ù˜Ó!ˆàˆ
Ø€Jøð ‰
úr7   ).)r   )Úcollections.abcr   Útypingr   r   r   Útyping_extensionsr   r(   Útorch.nn.parallel._functionsr   r	   Ú__all__ÚFutureWarningÚboolr   r   r0   r/   r   r   r)   ÚintÚdevicer
   Ústrr   r   r"   r   r   ú<module>r\      sË  ðå $ß )Ñ )Ý (ã ß 8ò 2€ñ ØIØôð�sð ˜tò ó	ðð
˜ð  ó ñ ˆC��t˜UÓ#€ð 
ð ñ#Ø�L‰Lð#à˜# §¡Ñ,Ñ-ð#ð 
ð#ð ˆ5�<‰<˜ÐÑò	#ó 
ð#ð 
ð ñØðà˜# §¡Ñ,Ñ-ðð 
ðð 
ˆ!�Wò	ó 
ðó&ðZ ñ	<Ø�#�s�(‰Oð<à��c�‰N˜TÑ!ð<ð ˜# §¡Ñ,Ñ-ð<ð 
ð	<ð
 ˆ5��c�‰?˜E $ s¨C x¡.°#Ð"5Ñ6Ð6Ñ7ó<ñ((�Cð (¨¨e¯l©lÑ(:ð (Àð (ÈSô (r   