U
    Å9%eÕ  ã                   @   sl  d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
 ddlmZmZ d dlZdddgZeedœd	d
„Zeedœdd„ZedeeeƒZe
de jee	ee jf  eee jdf dœdd„ƒZe
deee	ee jf  eee dœdd„ƒZddd„Zdeedf eeeef  ee	ee jf  eeeedf eeeef df f dœdd„Zdee	ee jf eedœdd„ZdS )é    N)	ÚAnyÚDictÚListÚOptionalÚSequenceÚTupleÚTypeVarÚUnionÚoverloadé   )ÚScatterÚGatherÚscatterÚscatter_kwargsÚgather)ÚobjÚreturnc                 C   s   t  d¡ t| ƒS )NzAis_namedtuple is deprecated, please use the python checks instead)ÚwarningsÚwarnÚ_is_namedtuple©r   © r   ú_/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/nn/parallel/scatter_gather.pyÚis_namedtuple   s    
r   c                 C   s   t | tƒot| dƒot| dƒS )NÚ_asdictÚ_fields)Ú
isinstanceÚtupleÚhasattrr   r   r   r   r      s    ÿr   ÚT.)ÚinputsÚtarget_gpusÚdimr   c                 C   s   d S ©Nr   ©r    r!   r"   r   r   r   r      s    c                 C   s   d S r#   r   r$   r   r   r   r      s    c                    s(   ‡ ‡‡fdd„‰zˆ| ƒ}W 5 d‰X |S )zŸ
    Slices tensors into approximately equal chunks and
    distributes them across given GPUs. Duplicates
    references to objects that are not tensors.
    c                    sÞ   t ˆ tjƒrt ˆd ˆˆ ¡S tˆ ƒr@‡ fdd„ttˆˆ ƒŽ D ƒS t ˆ tƒrht	ˆ ƒdkrht
ttˆˆ ƒŽ ƒS t ˆ t
ƒr–t	ˆ ƒdkr–dd„ ttˆˆ ƒŽ D ƒS t ˆ tƒrÌt	ˆ ƒdkrÌ‡ fdd„ttˆˆ  ¡ ƒŽ D ƒS ‡ fdd„ˆD ƒS )Nc                    s   g | ]}t ˆ ƒ|Ž ‘qS r   ©Útype)Ú.0Úargsr   r   r   Ú
<listcomp>-   s     z0scatter.<locals>.scatter_map.<locals>.<listcomp>r   c                 S   s   g | ]}t |ƒ‘qS r   )Úlist©r'   Úir   r   r   r)   1   s     c                    s   g | ]}t ˆ ƒ|ƒ‘qS r   r%   r+   r   r   r   r)   3   s     c                    s   g | ]}ˆ ‘qS r   r   ©r'   Ú_r   r   r   r)   4   s     )r   ÚtorchÚTensorr   Úapplyr   ÚzipÚmapr   Úlenr*   ÚdictÚitemsr   ©r"   Úscatter_mapr!   r   r   r8   )   s     zscatter.<locals>.scatter_mapNr   )r    r!   r"   Úresr   r7   r   r   #   s
    )r    Úkwargsr!   r"   r   c                 C   s¢   | rt | ||ƒng }|r$t |||ƒng }t|ƒt|ƒk r^| dd„ tt|ƒt|ƒ ƒD ƒ¡ n4t|ƒt| ƒk r’| dd„ tt|ƒt|ƒ ƒD ƒ¡ t|ƒt|ƒfS )z*Scatter with support for kwargs dictionaryc                 s   s   | ]
}d V  qdS )r   Nr   r-   r   r   r   Ú	<genexpr>L   s     z!scatter_kwargs.<locals>.<genexpr>c                 s   s   | ]
}i V  qd S r#   r   r-   r   r   r   r;   N   s     )r   r4   ÚextendÚranger   )r    r:   r!   r"   Zscattered_inputsZscattered_kwargsr   r   r   r   B   s    &$)ÚoutputsÚtarget_devicer"   r   c                    s(   ‡ ‡‡fdd„‰zˆ| ƒ}W 5 d‰X |S )zz
    Gathers tensors from different GPUs on a specified device.
    Use 'cpu' for CPU to avoid a deprecation warning.
    c                    s¬   ˆd ‰ t ˆ tjƒr&tjˆˆfˆžŽ S ˆ d kr2d S t ˆ tƒrvt‡ fdd„ˆD ƒƒsZtdƒ‚tˆ ƒ‡‡fdd„ˆ D ƒƒS t	ˆ ƒr–tˆ ƒ 
tˆtˆŽ ƒ¡S tˆ ƒtˆtˆŽ ƒƒS )Nr   c                 3   s   | ]}t ˆ ƒt |ƒkV  qd S r#   )r4   ©r'   Úd)Úoutr   r   r;   ^   s     z-gather.<locals>.gather_map.<locals>.<genexpr>z+All dicts must have the same number of keysc                 3   s(   | ] ‰ ˆ ˆ‡ fd d„ˆD ƒƒfV  qdS )c                    s   g | ]}|ˆ  ‘qS r   r   r@   ©Úkr   r   r)   `   s     z8gather.<locals>.gather_map.<locals>.<genexpr>.<listcomp>Nr   )r'   )Ú
gather_mapr>   rC   r   r;   `   s   ÿ)r   r/   r0   r   r1   r5   ÚallÚ
ValueErrorr&   r   Ú_maker3   r2   )r>   ©r"   rE   r?   )rB   r>   r   rE   W   s    
ÿzgather.<locals>.gather_mapNr   )r>   r?   r"   r9   r   rI   r   r   R   s
    ).).)r   )r   )r   )r/   Útypingr   r   r   r   r   r   r   r	   r
   Z
_functionsr   r   r   Ú__all__Úboolr   r   r5   r*   r   r   r0   ÚintZdevicer   Ústrr   r   r   r   r   r   Ú<module>   s6   ,
 ýü*
# ü
"û