
    VhK                        d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
 d dlmZ d dlZd dlmZ d dlmZ d dlmZ erd d	lmZ d d
lmZ d dlmZ dgZdeded   fdZdeded   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jF                     dee
e$ejJ                  f      de!de&e&ejF                        fdZ' e	de      Z(	 d"de(dee
e$ejJ                  f      de!de&e(   fdZ)y)#    )OrderedDict)IteratorSequence)castOptionalTYPE_CHECKINGTypeVarUnion)TypeIsN)_get_device_index)Module)comm)ScriptMethod)ScriptModule)EnabledProxy	replicatemodulereturnr   c                 J    dd l }t        | |j                  j                        S Nr   )	torch.jit
isinstancejitr   r   torchs     K/home/dcms/DCMS/lib/python3.12/site-packages/torch/nn/parallel/replicate.py_is_script_moduler      s    feii4455    r   c                 J    dd l }t        | |j                  j                        S r   )r   r   _Cr   r   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_modules6   s    nnS	
r   Tc              3   2   K   | ]  }t        |        y wr-   )r   ).0
descendants     r   	<genexpr>z'_replicatable_module.<locals>.<genexpr>D   s      
.8j)
s   F)
r   r   r)   setaddr   updateallchildren_replicatable_module)r   r*   r1   childs       r   r;   r;   4   s    6 hv.> 
 |u 	HHV &v./ 
<Nv<V
 
 	
 "  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   )	Broadcast)torch.nn.parallel._functionsrA   r   broadcast_coalescedlenapplyrange)r=   r>   r?   rA   tensor_copiesis         r   _broadcast_coalesced_reshaperI   S   s    
 7''99 w<!+IOOG>g>M q#m"4c'lC a!c'l"23 
 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)r?   r   )r;   RuntimeErrorr   rD   list
parameters	enumeraterI   buffersrequires_gradappendr.   rF   _replicate_for_data_parallelr   _former_parameters_modulesitemssetattr_parameters_buffersr   rJ   )!rL   r>   r?   xnum_replicasparamsidxparamparam_indicesparam_copiesrR   
buffers_rgbuffers_not_rgbufbuffer_indices_rgbuffer_indices_not_rgbuffer_copies_rgbuffer_copies_not_rgr.   _module_copiesmodule_indicesrH   r   jreplicakeyr<   
module_idx	param_idx
param_copybuffer_copies
buffer_idxs!                                    r   r   r   k   sW   
  ((
 	

 	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 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Fg < E IP )>t Gs#   N&N&NN%	N+4N0)r   r   )r   r   r-   )F)*collectionsr   collections.abcr   r   typingr   r   r   r	   r
   typing_extensionsr   r   torch._utilsr   torch.nn.modulesr   torch.nn.parallelr   torch._Cr   r   r   r&   r   __all__r   objectr!   r$   r)   r6   boolr;   TensorintdevicerO   rI   rJ   r    r   r   <module>r      sK   # . @ @ $  * # " %&- -6f 6)? 65f 5)? 5$% xF/D PT D ell#eC-./  
$u||
	* Cv aGaGeC-./aG aG 
!W	aGr   