Ë
    Q/æjÿ  ã                   ó´  — 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     ú^/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/nn/parallel/replicate.pyÚ_is_script_moduler      s   € Ûä�f˜eŸi™i×4Ñ4Ó5Ð5ó    c                 óJ   — dd l }t        | |j                  j                  «      S r   )r   r   Ú_CÚScriptMethodr   s     r   Ú_is_script_methodr#   #   s   € Ûä�f˜eŸh™h×3Ñ3Ó4Ð4r   c                  ó>   — dd l } | j                  j                  «       S r   )r   r   r   ©r   s    r   Ú_init_script_moduler&   )   s   € Ûà�9‰9×!Ñ!Ó#Ð#r   c                  óJ   — dd l } | j                  j                  j                  S r   )Útorch.jit._stater   Ú_stateÚ_enabledr%   s    r   Ú_is_jit_enabledr+   /   s   € Ûà�9‰9×Ñ×$Ñ$Ð$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   € Ø�n‰nÓˆÜˆ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ð ¬h´vÑ.>ó ô
 ÔØØ€|Ü‹uˆð 	‡H�HˆVÔÜ˜Ô Ø�‰Ñ& vÓ.Ô/Üñ 
Ù<NÈvÓ<Vô
ó 
ð 	
ð —‘Ó"ò ˆð �D‰=ØÜ# E¨4Õ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‹<˜!ÒØ+˜IŸO™O¨GÐ>°gÒ>ˆMô ˜q¤# mÓ"4´c¸'³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ä�'×$Ñ$Ó&Ó'€FÜ2;¸FÓ2C×D¡J C¨�U˜C‘ZÐD€MÑDÜ/°¸ÀÓH€Lä�7—?‘?Ó$Ó%€GØ%'€JØ)+€NØò 'ˆØ×Ò¡VØ×Ñ˜cÕ"à×!Ñ! #Õ&ð	'ô 3<¸JÓ2G×H¡h c¨3˜˜c™ÐHÐÑHÜ6?ÀÓ6O×P©(¨#¨s˜S #™XÐPÐÑPä3°JÀÐPVÔWÐÜ7Ø˜¨ôÐô �7—?‘?Ó$Ó%€GØ5<Ö(=°ªÐ(=€MÐ(=Ø(*€Nä˜wÓ'ò -‰	ˆˆ6Ø!"ˆ�vÑÜ�|Ó$ò 		-ˆAØ×9Ñ9Ó;ˆGô *5«ˆGÔ&à˜!Ñ×#Ñ# GÕ,ñ		-ð-ô ˜wÓ'ó (H‰	ˆˆ6Ø Ÿ/™/×/Ñ/Ó1ò 		H‰JˆC�Øˆ}Ü˜|Ó,ò 1�AØ+¨AÑ.¨qÑ1�GØ,0�G×$Ñ$ SÒ)ñ1ð ,¨EÑ2�
Ü˜|Ó,ò H�AØ+¨AÑ.¨qÑ1�GÜ˜G S¨-¸Ñ*:¸:Ñ*FÕGñHð		Hð !×,Ñ,×2Ñ2Ó4ò 	A‰JˆC�Øˆ}Ü˜|Ó,ò 4�AØ+¨AÑ.¨qÑ1�GØ/3�G×'Ñ'¨Ò,ñ4ð *¨%Ñ0�	Ü˜|Ó,ò A�AØ+¨AÑ.¨qÑ1�GØ!-¨a¡°Ñ!;�Jô ˜G S¨*Ô5à6@�G×.Ñ.¨sÒ3ñAð	Að Ÿ™×-Ñ-Ó/ò 	H‰HˆC�Øˆ{Ü˜|Ó,ò 1�AØ+¨AÑ.¨qÑ1�GØ,0�G×$Ñ$ SÒ)ñ1ð ×$Ò$©VØ$4�MØ!2°3Ñ!7‘Jà$8�MØ!6°sÑ!;�JÜ˜|Ó,ò H�AØ+¨AÑ.¨qÑ1�GÜ˜G S¨-¸Ñ*:¸:Ñ*FÕGñHò	Hð5(HôT 38¸Ó2EÖF¨QŒD”�M !Ñ$ QÑ'Õ(ÒFÐFùòg <ùó 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  ðÝ #÷÷ ÷ ó Ý *Ý #Ý "ñ Ý&Ý-ð ˆ-€ð6˜fð 6¨ó 6ð5˜fð 5¨ó 5ó$ó%ñ ð ¨x¸¸F¹Ñ/Dð ÐPTó ðD ñØ�e—l‘lÑ#ðà�e˜C §¡Ð-Ñ.Ñ/ðð ðð 
ˆ$ˆu�|‰|Ñ
Ñó	ñ* ˆC�vÔ€ð ñaGØðaGà�e˜C §¡Ð-Ñ.Ñ/ðaGð ðaGð 
ˆ!�Wô	aGr   