
    i<                        d dl mZ d dlmZmZ d dl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   dz  defdZ 	 d"deejB                     dee"ejF                  z     dede$e$ejB                        fdZ% ede      Z&	 d"de&dee"ejF                  z     dede$e&   fdZ'y)#    )OrderedDict)IteratorSequence)castTYPE_CHECKINGTypeVar)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     U/var/www/html/engine/venv/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(   r/   childs       r   r9   r9   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._functionsr?   r   broadcast_coalescedlenapplyrange)r;   r<   r=   r?   tensor_copiesis         r   _broadcast_coalesced_reshaperG   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 )NzJCannot replicate network where python modules are children of ScriptModuleT)r=   r   )r9   RuntimeErrorr
   rB   list
parameters	enumeraterG   buffersrequires_gradappendr,   rD   _replicate_for_data_parallelr   _former_parameters_modulesitemssetattr_parameters_buffersr   rH   )!rJ   r<   r=   xnum_replicasparamsidxparamparam_indicesparam_copiesrP   
buffers_rgbuffers_not_rgbufbuffer_indices_rgbuffer_indices_not_rgbuffer_copies_rgbuffer_copies_not_rgr,   _module_copiesmodule_indicesrF   r   jreplicakeyr:   
module_idx	param_idx
param_copybuffer_copies
buffer_idxs!                                    r   r   r   k   sU   
  (X
 	
 	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   typing_extensionsr	   r   torch._utilsr
   torch.nn.modulesr   torch.nn.parallelr   torch._Cr   r   r   r$   r   __all__r   objectr   r"   r'   r4   boolr9   TensorintdevicerM   rG   rH   r    r   r   <module>r      s@   # . / / $  * # " %&- -6f 6)? 65f 5)? 5$% s6{T/A T D ell#cELL()  
$u||
	* Cv `G`GcELL()`G `G 
!W	`Gr   