
    9j[                        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     [/media/conek/DATA/Code/OCR/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} t        |       dk(  rg S |r| D cg c]9  }t        |t        j
                  j                         xr |j                         ; }}t        j                  | |      }|D ]3  }t        |      D ]#  \  }}	|	s	t	        j                  ||         ||<   % 5 |S  |j                  |g|  }
t        dt        |
      t        |             D cg c]  }t        |
||t        |       z           c}S c c}w c c}w )Nr   )	Broadcast)torch.nn.parallel._functionsr?   lenr   r   nnUninitializedParameter
is_complexr   broadcast_coalesced	enumerateview_as_complexapplyrangelist)r;   r<   r=   r?   tcomplex_maskoutputsdevice_outputsirD   tensor_copiess              r   _broadcast_coalesced_reshaperQ   S   s"   
 7
7|q	 
 1ehh==>>Q1<<>Q
 

 **7G<% 	QN!*<!8 Q:(-(=(=nQ>O(PN1%Q	Q
 '	:': 1c-0#g,?
 q1s7|#345
 	


s   >D!!D
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
   rA   rJ   
parametersrF   rQ   buffersrequires_gradappendr,   rI   _replicate_for_data_parallelr   _former_parameters_modulesitemssetattr_parameters_buffersr   rR   )!rT   r<   r=   xnum_replicasparamsidxparamparam_indicesparam_copiesrX   
buffers_rgbuffers_not_rgbufbuffer_indices_rgbuffer_indices_not_rgbuffer_copies_rgbuffer_copies_not_rgr,   _module_copiesmodule_indicesrO   r   jreplicakeyr:   
module_idx	param_idx
param_copybuffer_copies
buffer_idxs!                                    r   r   r   v   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devicerJ   rQ   rR   r    r   r   <module>r      sA   # . / / $  * # " %&- -6f 6)? 65f 5)? 5$% s6{T/A T D 
ell#
cELL()
 
 
$u||
	
@ Cv `G`GcELL()`G `G 
!W	`Gr   