o
    ie                     @   sV  d dl Z ddlmZ ddlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ er>d dlZ d dlZ d	gZd
edefddZd
edefddZd#ddZd$ddZd%d
ede
ee  defddZ	d&dee j deeee jf  dede	e	e j  fddZ eded Z!	d&d!e!deeee jf  dede	e! fd"d	Z"dS )'    N   )Module   )comm)
TYPE_CHECKINGDictIteratorListOptionalSequenceSetTypeVarUnioncast_get_device_index)OrderedDict	replicatemodulereturnc                 C      dd l }t| |jjS Nr   )	torch.jit
isinstancejitScriptModuler   torch r   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torch/nn/parallel/replicate.py_is_script_module      r    c                 C   r   r   )r   r   Z_CZScriptMethodr   r   r   r   _is_script_method   r!   r"   torch.jit.ScriptModulec                  C   s   dd l } | j S r   )r   r   r   r   r   r   r   _init_script_module      
r%   torch.jit._state.EnabledProxyc                  C   s   dd l } | jjjS r   )torch.jit._stater   _stateZ_enabledr$   r   r   r   _is_jit_enabled   r&   r*   memoc                 C   s   dt dtt  fdd}t sdS |d u rt }||  t| r2|||  tdd || D S |  D ]}||v r=q6t	||sE dS q6dS )	Nr   r   c                 S   s   |   }t| |S N)modulesnext)r   genr   r   r   descendant_modules-   s   z0_replicatable_module.<locals>.descendant_modulesTc                 s   s    | ]}t |V  qd S r,   )r    ).0Z
descendantr   r   r   	<genexpr>;   s    z'_replicatable_module.<locals>.<genexpr>F)
r   r   r*   setaddr    updateallchildren_replicatable_module)r   r+   r0   childr   r   r   r8   *   s$   

r8   Ftensorsdevicesdetachc                    sb   ddl m} |rt|S tdkr/|j|gR    fddtdt tD S g S )Nr   )	Broadcastr   c                    s    g | ]} ||t   qS r   )len)r1   iZtensor_copiesr:   r   r   
<listcomp>T   s    z0_broadcast_coalesced_reshape.<locals>.<listcomp>)Z
_functionsr=   r   Zbroadcast_coalescedr>   applyrange)r:   r;   r<   r=   r   r@   r   _broadcast_coalesced_reshapeH   s   rD   T)boundnetworkc                    s  t | std|sg S dd |D }t|}t|  }dd t|D }t|||}t|  }g }g }	|D ]}
|
jrE|sE|	|
 q8|		|
 q8dd t|D }dd t|	D }t|||d}t|	|d	d}t| 
 }d
d |D  i }t|D ]\}}|||< t|D ]}| }t |_ | 	| qq~t|D ]\}}|j D ]6\}}|d u rt|D ]} | | }d |j|< qq|| }t|D ]} | | }t|| | |  qq|j D ]?\}}|d u rt|D ]} | | }d |j|< qq|| }t|D ]} | | }|| | }t||| ||j|< q
q|j D ]K\}}
|
d u rIt|D ]} | | }d |j|< q8q+|
jrW|sW|}||
 }n|}||
 }t|D ]} | | }t|||| |  qaq+q fddt|D S )NzKCannot replicate network where python modules are childrens of ScriptModulec                 S   s   g | ]}t |d qS )Tr   )r1   xr   r   r   rA   i       zreplicate.<locals>.<listcomp>c                 S      i | ]\}}||qS r   r   )r1   idxparamr   r   r   
<dictcomp>m   rI   zreplicate.<locals>.<dictcomp>c                 S   rJ   r   r   r1   rK   bufr   r   r   rM   y   rI   c                 S   rJ   r   r   rN   r   r   r   rM   z   rI   )r<   Tc                 S   s   g | ]}g qS r   r   )r1   _r   r   r   rA      s    c                    s   g | ]}t t | d  qS )r   )r   rE   )r1   jZmodule_copiesr   r   rA      s    )r8   RuntimeErrorr>   list
parameters	enumeraterD   buffersZrequires_gradappendr-   rC   Z_replicate_for_data_parallelr   Z_former_parametersZ_modulesitemssetattr_parameters_buffers)rG   r;   r<   Znum_replicasparamsZparam_indicesZparam_copiesrW   Z
buffers_rgZbuffers_not_rgrO   Zbuffer_indices_rgZbuffer_indices_not_rgZbuffer_copies_rgZbuffer_copies_not_rgr-   Zmodule_indicesr?   r   rQ   Zreplicakeyr9   Z
module_idxrL   Z	param_idxZ
param_copyZbuffer_copiesZ
buffer_idxr   rR   r   r   ]   s   



)r   r#   )r   r'   r,   )F)#r   r-   r    r   typingr   r   r   r	   r
   r   r   r   r   r   Ztorch._utilsr   collectionsr   r   r(   __all__boolr    r"   r%   r*   r8   ZTensorintZdevicerD   rE   r   r   r   r   r   <module>   sH    0

 !
