ó
    Eñih$  ã                   óX  • S SK r S SKJr  S SKJrJr  S SKrS SKJr  S SK	J
r
  S SKJr  SSKJrJr  Sr " S	 S
\
5      rS\S\S\4S jr " S S5      r\" \S9 SS\R&                  S\\R                  R&                     S-  S\R&                  4S jj5       rS\R&                  S\4S jrg)é    N)ÚIterable)ÚAnyÚNoReturn)Ú_State)ÚDistributedDataParallelé   )Ú_get_registryÚcontractÚ c                   óÌ  ^ • \ rS rSr% \R
                  \S'   SU 4S jjr\4S\	R                  S\\	R                     S\\	R                     S	\SS4
S
 jjrSS jrS\	R                  S\\	R                     SS4S jrSS jrSS jrS\	R                  S\\S4   S\\\4   S\4S jrS\	R                  S\\R0                     S\R0                  S\R0                  4S jrSrU =r$ )Ú_ReplicateStateé   Ú_ddp_weakrefÚreturnNc                 ó   >• [         TU ]  5         [        R                  " 5       U l        SU l        [        R                  " 5       U l        U R                  U l        / U l        SU l	        S U l
        0 U l        / U l        g )NF)ÚsuperÚ__init__ÚnnÚParameterListÚmoduleÚhas_initializedÚ_param_listÚ_orig_moduleÚ_param_namesÚ_no_syncÚ
_init_argsÚ_init_kwargsÚ_comm_hook_args)ÚselfÚ	__class__s    €Úd/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/distributed/_composable/replicate.pyr   Ú_ReplicateState.__init__   sk   ø€ Ü‰ÑÔÜ!#×!1Ò!1Ó!3ˆŒØ%*ˆÔÜ-/×-=Ò-=Ó-?ˆÔð !ŸK™KˆÔØ')ˆÔØ#ˆŒØ26ˆŒØ,.ˆÔØ*,ˆÕó    r   Úignored_modulesÚignored_paramsÚprefixc                 ól  • [        U5      (       a  g X;   a  g U[        :w  a  U S3O[        nUR                  SS9 HF  u  pgXs;  d  M  U R                  R	                  U5        U R
                  R	                  U U 35        MH     UR                  5        H  u  p‰U R                  U	UUU U 3S9  M     g )NÚ.F)Úrecurse)r&   )Ú_is_fully_shardedÚ_ROOT_MODULE_PREFIXÚnamed_parametersr   Úappendr   Únamed_childrenÚ_collect_params)
r   r   r$   r%   r&   Úrecurse_prefixÚnÚpÚnameÚchild_modules
             r!   r/   Ú_ReplicateState._collect_params"   sÍ   € ô ˜V×$Ñ$Øð Ó$Øð #Ô&9Ó9ˆvˆh�a‰LÔ?Rð 	ð ×+Ñ+°EÐ+Ó:‰DˆAØÕ&Ø× Ñ ×'Ñ'¨Ô*Ø×!Ñ!×(Ñ(¨NÐ+;¸A¸3Ð)?Ö@ñ ;ð
 #)×"7Ñ"7Ö"9ÑˆDØ× Ñ ØØØØ(Ð)¨$¨Ð0ð	 !ó ò #:r#   c                 óN   ^ • [         R                  " SS9U 4S j5       nU" 5         g )NT)Ú	recursivec                  ó¬   >• T R                   c   eT R                  " T R                   0 T R                  D6  T R                  5         ST l         0 T l        g )N© )r   Úinitr   Úregister_comm_hook)r   s   €r!   Ú
_lazy_initÚ-_ReplicateState.lazy_init.<locals>._lazy_initC   sI   ø€ à—?‘?Ñ.Ð.Ð.Ø�IŠI�t—‘Ð<¨$×*;Ñ*;Ò<Ø×#Ñ#Ô%Ø ˆDŒOØ "ˆDÕr#   )ÚtorchÚ_disable_dynamo)r   r<   s   ` r!   Ú	lazy_initÚ_ReplicateState.lazy_initB   s'   ø€ Ü	×	Ò	¨Ñ	.ô	#ó 
/ð	#ñ 	�r#   c                 óî  • U R                   (       a  g SU l         Xl        U VVs1 s H  oDR                  5         H  oUiM     M     nnnUR                  5        H4  n[	        U5      (       d  M  UR                  UR                  5       5        M6     SSKJn  U" XS9  U R                  XU5        SU;   a]  US   bA  US   n	[        U	[        R                  5      (       a  U	R                  S:X  a  S US'   OU	/US'   OS US'   UR                  S5        [        U R                  40 UD6U l        ["        R$                  " U R                   5      [&        R)                  U R                  5      l        g s  snnf )NTr   )Ú_localize_dtensor)r%   Ú	device_idÚcpuÚ
device_ids)r   r   Ú
parametersÚmodulesr*   ÚupdateÚ%torch.distributed.tensor.parallel.ddprC   r/   Ú
isinstancer>   ÚdeviceÚtypeÚpopr   r   Ú_ddpÚweakrefÚrefÚ	replicateÚstater   )
r   r   r$   ÚkwargsÚmr2   r%   Ú	submodulerC   rD   s
             r!   r:   Ú_ReplicateState.initM   s6  € ð ××Øà#ˆÔØŒÙ%4ÔM¢_ ¿l¹l¿n¸š!¹n™!¡_ˆÑMØŸ™Ö)ˆIÜ  ×+Ó+Ø×%Ñ% i×&:Ñ&:Ó&<Ö=ñ *õ 	Lá˜&Ò@Ø×Ñ˜V°nÔEà˜&Ó ð
 �kÑ"Ñ.Ø" ;Ñ/�	ä˜i¬¯©×6Ñ6¸9¿>¹>ÈUÓ;Rà+/�F˜<Ò(ð -6¨;�F˜<Ò(à'+��|Ñ$Ø�J‰J�{Ô#ä+¨D×,<Ñ,<ÑGÀÑGˆŒ	ä4;·K²KÀÇ	Á	Ó4JŒ	�‰˜Ÿ™Ó$Õ1ùó; Ns   ¥"E1c                 óš   • U R                    H!  u  pU R                  R                  " U0 UD6  M#     U R                   R                  5         g ©N)r   rO   r;   Úclear)r   Ú	comm_argsÚcomm_kwargss      r!   r;   Ú"_ReplicateState.register_comm_hookw   s>   € Ø&*×&:Ô&:Ñ"ˆIØ�I‰I×(Ò(¨)ÐC°{ÔCñ ';à×Ñ×"Ñ"Õ$r#   c                 ó   • Xl         X l        g rY   )r   r   ©r   ÚargsrT   s      r!   Úrecord_init_argsÚ _ReplicateState.record_init_args|   s   € ØŒØ"Õr#   r`   .rT   c                 ó  • U R                   (       d  U R                  (       a  U R                  5         U R                  (       + U R                  l        U R                  [        l        U R                  R                  " U0 UD6$ rY   )	r   r   r@   r   rO   Úrequire_backward_grad_syncr   Ú_active_ddp_moduleÚ_pre_forward)r   r   r`   rT   s       r!   Úforward_pre_hookÚ _ReplicateState.forward_pre_hook€   sW   € ð �?�?˜d×/×/Ø�N‰NÔØ37·=±=Ô/@ˆ�	‰	Ô,Ø59·Y±YÔÔ2Ø�y‰y×%Ò% tÐ6¨vÑ6Ð6r#   ÚinputÚoutputc                 óN   • S [         l        U R                  R                  U5      $ rY   )r   re   rO   Ú_post_forward)r   r   ri   rj   s       r!   Úforward_post_hookÚ!_ReplicateState.forward_post_hook‰   s"   € ð 6:ÔÔ2Ø�y‰y×&Ñ& vÓ.Ð.r#   )
r   rO   r   r   r   r   r   r   r   r   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rP   rQ   Ú__annotations__r   r+   r   ÚModuleÚsetÚ	ParameterÚstrr/   r@   r:   r;   ra   Útupler   Údictrg   r>   ÚTensorrm   Ú__static_attributes__Ú__classcell__)r    s   @r!   r   r      s!  ø‡ Ø—+‘+Ó÷-ð& *ñà—	‘	ðð ˜RŸY™Y™ðð ˜BŸL™LÑ)ð	ð
 ðð 
õô@	ð(Kà—	‘	ð(Kð ˜RŸY™Y™ð(Kð
 
ô(KôT%ô
#ð7Ø—i‘ið7Ø',¨S°#¨X¡ð7Ø@DÀSÈ#ÀXÁð7à	ô7ð/à—	‘	ð/ð �U—\‘\Ñ"ð/ð —‘ð	/ð
 
�‰÷/ò /r#   r   r`   rT   r   c                  ó   • [        S5      e)NzGDDP does not support deepcopy. Please use state dict for serialization.)ÚAssertionError)r`   rT   s     r!   Úunimplemented_deepcopyr€   “   s   € Ü
ØQóð r#   c                   ó6   • \ rS rSrS rS\SS4S jrS	S jrSrg)
ÚDDPéš   c                 óL   • U R                   S   nUR                  " U/UQ70 UD6$ )z‰
Override ``__new__`` to remove the DDP class and directly construct
the original class for cases like indexing into a container module.
é   )Ú__mro__Ú__new__)Úclsr`   rT   Úorig_clss       r!   r‡   ÚDDP.__new__›   s,   € ð —;‘;˜q‘>ˆØ×Ò Ð:¨4Ò:°6Ñ:Ð:r#   Úrequires_gradient_syncr   Nc                 óB   • U(       + [         R                  U 5      l        g)zá
Sets if the module should sync gradients. This can be used to implement
gradient accumulation without communication.

Args:
    requires_gradient_sync (bool): Whether to reduce gradients for the
        module's parameters.
N)rR   rS   r   )r   r‹   s     r!   Úset_requires_gradient_syncÚDDP.set_requires_gradient_sync¥   s   € ð .DÔ)CŒ	�‰˜ÓÕ&r#   c                 ób   • [         R                  U 5      R                  R                  X45        g rY   )rR   rS   r   r-   r_   s      r!   r;   ÚDDP.register_comm_hook°   s!   € Ü�‰˜Ó×-Ñ-×4Ñ4°d°^ÕDr#   r9   ro   )	rp   rq   rr   rs   r‡   Úboolr�   r;   r|   r9   r#   r!   r‚   r‚   š   s#   † ò;ð	DÀð 	DÈ$ô 	D÷Er#   r‚   )Ú	state_clsr   r$   c                 ó   • [         R                  R                  S5        SU;   aB  [        US   [        [         R
                  45      (       d  [        S[        US   5       35      e[        U 5      (       a  [        S5      eUc  0 nO[        U5      n[        R                  U 5      nU R                  UR                  SS9  UR                  S5      nUb?  UR                  5       nXT:w  a*  SS	KJnJn  U R                  U5        U R'                  U5        U R'                  UR(                  5        UR*                  " X40 UD6  U R,                  nS
[.        0n	[        SUR0                   3[2        U4U	5      n
X l        U $ )zÔReplicates a module

Args:
    module (torch.nn.Module): module to replicate

Example::
    >>> # xdoctest: +REQUIRES(module:torch._C._distributed_c10d)
    >>> module = nn.Linear(3, 3)
    >>> replicate(module)
ztorch.distributed.replicaterD   z6Expected device_id to be int or torch.device, but got zGCannot apply `replicate()` on a Module already managed by `fully_shard`T)Úwith_kwargsÚdevice_meshr   )rC   Ú_reconstruct_dtensorÚ__deepcopy__r‚   )r>   Ú_CÚ_log_api_usage_oncerK   ÚintrL   ÚRuntimeErrorrM   r*   rv   rR   rS   Úregister_forward_pre_hookrg   ÚgetÚ_get_root_meshrJ   rC   r–   Úregister_forward_hookrm   ra   r    r€   rp   r‚   )r   r$   rT   rS   r•   Ú	root_meshrC   r–   rˆ   ÚdctÚnew_clss              r!   rR   rR   ´   st  € ô  
‡H�H× Ñ Ð!>Ô?ð �fÓÜ˜& Ñ-´´U·\±\Ð/B×CÑCÜðÜ  {Ñ 3Ó4Ð5ð7óð ô
 ˜× Ñ ÜØUó
ð 	
ð ÑØ‰ä˜oÓ.ˆä�O‰O˜FÓ#€EØ
×$Ñ$ U×%;Ñ%;ÈÐ$ÑNØ—*‘*˜]Ó+€KØÑØ×.Ñ.Ó0ˆ	ð Ó#÷ð
 ×,Ñ,Ð-AÔBØ×(Ñ(Ð):Ô;à
× Ñ  ×!8Ñ!8Ô9à	×Ò˜6Ñ=°fÒ=ð ×
Ñ
€CØÔ1Ð
2€CÜ�S˜Ÿ™˜Ð'¬#¨s¨°SÓ9€GØÔØ€Mr#   c                 ó*   • [        U 5      nUc  gSU;   $ )z+Check if module is marked with fully_shard.FÚfully_shard)r	   )r   Úregistrys     r!   r*   r*   û   s    € ä˜VÓ$€HØÑØØ˜HÑ$Ð$r#   rY   )rP   Úcollections.abcr   Útypingr   r   r>   Útorch.nnr   Ú#torch.distributed._composable_stater   Útorch.nn.parallelr   r
   r	   r+   r   r€   r‚   ru   rR   r‘   r*   r9   r#   r!   Ú<module>r«      sÉ   ðã Ý $ß  ã Ý Ý 6Ý 5ç -ð Ð ô/�fô /ðD #ð °ð ¸ô ÷Eñ Eñ4 
�OÑ$ð 9=ñCØ�I‰IðCà˜eŸh™hŸo™oÑ.°Ñ5ðCð ‡Y�Yô	Có %ðCðL%˜bŸi™ið %¨Dõ %r#   