
    sg                        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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	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jB                  f      dedeeej>                        fdZ" ede      Z#	 dde#deee ejB                  f      dedee#   fdZ$y)    )OrderedDict)
castDictIteratorListOptionalSequenceSetTYPE_CHECKINGTypeVarUnionN)_get_device_index)Module)comm)ScriptModule)EnabledProxy	replicatemodulereturnc                 J    dd l }t        | |j                  j                        S Nr   )	torch.jit
isinstancejitr   r   torchs     N/var/www/html/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r/   )r   ).0
descendants     r   	<genexpr>z'_replicatable_module.<locals>.<genexpr>L   s      
.8j)
s   F)
r   r   r+   setaddr   updateallchildren_replicatable_module)r   r,   r3   childs       r   r=   r=   <   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._functionsrC   r   broadcast_coalescedlenapplyrange)r?   r@   rA   rC   tensor_copiesis         r   _broadcast_coalesced_reshaperK   [   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)rA   r   )r=   RuntimeErrorr   rF   list
parameters	enumeraterK   buffersrequires_gradappendr0   rH   _replicate_for_data_parallelr   _former_parameters_modulesitemssetattr_parameters_buffersr   rL   )!rN   r@   rA   xnum_replicasparamsidxparamparam_indicesparam_copiesrT   
buffers_rgbuffers_not_rgbufbuffer_indices_rgbuffer_indices_not_rgbuffer_copies_rgbuffer_copies_not_rgr0   _module_copiesmodule_indicesrJ   r   jreplicakeyr>   
module_idx	param_idx
param_copybuffer_copies
buffer_idxs!                                    r   r   r   s   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   typingr   r   r   r   r   r	   r
   r   r   r   r   torch._utilsr   torch.nn.modulesr   torch.nn.parallelr   r   r   r(   r   __all__boolr   r#   r&   r+   r=   TensorintdevicerK   rL   r    r   r   <module>r      sC   #    * # " &- -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   