
    '}he                        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Zd
edefdZddZddZdd
ede
ee      defdZ	 ddee j:                     deeee j>                  f      dede	e	e j:                        fdZ  ede      Z!	 dde!deeee j>                  f      dede	e!   fdZ"y)    N   )Module   )comm)
TYPE_CHECKINGDictIteratorListOptionalSequenceSetTypeVarUnioncast)_get_device_index)OrderedDict	replicatemodulereturnc                 J    dd l }t        | |j                  j                        S Nr   )	torch.jit
isinstancejitScriptModuler   torchs     Z/var/www/html/test/engine/venv/lib/python3.12/site-packages/torch/nn/parallel/replicate.py_is_script_moduler      s    feii4455    c                 J    dd l }t        | |j                  j                        S r   )r   r   _CScriptMethodr   s     r   _is_script_methodr$      s    fehh3344r    c                  >    dd l } | j                  j                         S r   )r   r   r   r   s    r   _init_script_moduler'      s    99!!##r    c                  J    dd l } | j                  j                  j                  S r   )torch.jit._stater   _state_enabledr&   s    r   _is_jit_enabledr,      s    99$$$r    memoc                 F   dt         dt        t            fd}t               sy|
t               }|j	                  |        t        |       r/|j                   ||              t        d  ||       D              S | j                         D ]  }||v rt        ||      r y y)Nr   r   c                 <    | j                         }t        |       |S N)modulesnext)r   gens     r   descendant_modulesz0_replicatable_module.<locals>.descendant_modules-   s    nnS	
r    Tc              3   2   K   | ]  }t        |        y wr0   )r   ).0
descendants     r   	<genexpr>z'_replicatable_module.<locals>.<genexpr>;   s      = %Z0 =s   F)
r   r	   r,   setaddr   updateallchildren_replicatable_module)r   r-   r4   childs       r   r>   r>   *   s    6 hv.> 
 |u 	HHV &v./ =!3F!;= = 	= "  D=#E40 r    tensorsdevicesdetachc           	         ddl m} |rt        j                  | |      S t	        |       dkD  rO |j
                  |g|  }t        dt	        |      t	        |             D cg c]  }|||t	        |       z     c}S g S c c}w )Nr   )	Broadcastr   )
_functionsrD   r   broadcast_coalescedlenapplyrange)r@   rA   rB   rD   tensor_copiesis         r   _broadcast_coalesced_reshaperL   H   s    
 &''99 w<!+IOOG>g>M"1c-&8#g,GI "!AG$45 I I IIs   !A>T)boundnetworkc           	      j   t        |       st        d      |sg S |D cg c]  }t        |d       }}t        |      }t	        | j                               }t        |      D ci c]  \  }}||
 }}}t        |||      }	t	        | j                               }
g }g }|
D ]3  }|j                  r|s|j                  |       #|j                  |       5 t        |      D ci c]  \  }}||
 }}}t        |      D ci c]  \  }}||
 }}}t        |||      }t        ||d      }t	        | j                               }|D cg c]  }g  }}i }t        |      D ]M  \  }}|||<   t        |      D ]5  }|j                         }t               |_        ||   j                  |       7 O t        |      D ]  \  }}|j                   j#                         D ]_  \  }}|(t        |      D ]  }||   |   }d |j                   |<    0||   }t        |      D ]  }||   |   }t%        ||||   |           a |j&                  j#                         D ]p  \  }}|(t        |      D ]  }||   |   }d |j&                  |<    0||   }t        |      D ].  }||   |   }|	|   |   }t%        |||       ||j                  |<   0 r |j(                  j#                         D ]w  \  }}|(t        |      D ]  }||   |   }d |j(                  |<    0|j                  r
|s|}||   } n|}||   } t        |      D ]  }||   |   }t%        ||||   |            y  t        |      D cg c]  }t+        t,        ||   d          c}S c c}w c c}}w c c}}w c c}}w c c}w c c}w )NzKCannot replicate network where python modules are childrens of ScriptModuleT)rB   r   )r>   RuntimeErrorr   rG   list
parameters	enumeraterL   buffersrequires_gradappendr1   rI   _replicate_for_data_parallelr   _former_parameters_modulesitemssetattr_parameters_buffersr   rM   )!rO   rA   rB   xnum_replicasparamsidxparamparam_indicesparam_copiesrU   
buffers_rgbuffers_not_rgbufbuffer_indices_rgbuffer_indices_not_rgbuffer_copies_rgbuffer_copies_not_rgr1   _module_copiesmodule_indicesrK   r   jreplicakeyr?   
module_idx	param_idx
param_copybuffer_copies
buffer_idxs!                                    r   r   r   ]   sS   
  ( 7 8 	8 	3:;a D);G;w<L'$$&'F2;F2CDJCUCZDMD/HL7??$%G%'J)+N 'Vc"!!#&	' 3<J2GHhc3cHH6?6OP(#sS#XPP3JPVW7X\]7??$%G5<(=(=M(=(*Nw' -	6!"v|$ 		-A99;G *5G&!##G,		-- w' (H	6 ////1 		HJC}|, 1A+A.q1G,0G$$S)1 ,E2
|, HA+A.q1GGS-*::*FGH		H !,,224 	AJC}|, 4A+A.q1G/3G'',4 *%0	|, AA+A.q1G!-a!;J GS*56@G..s3A	A --/ 	HHC{|, 1A+A.q1G,0G$$S)1 $$V$4M!23!7J$8M!6s!;J|, HA+A.q1GGS-*::*FGH	H5(HT 382EFQDM!$Q'(FFc < E IP )>t Gs#   N&N&NN%	N+4N0)r   ztorch.jit.ScriptModule)r   ztorch.jit._state.EnabledProxyr0   )F)#r   r1   r    r   typingr   r   r	   r
   r   r   r   r   r   r   torch._utilsr   collectionsr   r   r)   __all__boolr   r$   r'   r,   r>   TensorintdevicerL   rM   r    r    r   <module>r      s7      e e e * #-6f 6 6
5f 5 5
$
% xF/D PT B ell#eC-./  
$u||
	$ Cv ]G]GeC-./]G ]G 
!W	]Gr    