+
    –°³j¡B  ã                   óÖ   € ^ RI t ^ RIHtHt ^ RIHt ^ RIHtHt ^ RI	t	^ RI
Ht ^ RIHtHtHt ^ RIHt ] P&                  ! ]4      tR R ltR	 R
 lt ! R R]4      t ! R R]4      tR# )é    N)ÚabcÚdefaultdict)ÚIterable)ÚAnyÚoverload)Ú_MultiDeviceReplicatorÚ
GradScalerÚOptState)ÚProcessGroupc                óF   € V ^8„  d   QhR\         \        \        3,          /# )é   Úreturn)ÚdictÚstrr   )Úformats   "Úk/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/distributed/fsdp/sharded_grad_scaler.pyÚ__annotate__r      s   € ÷ Añ A¤d¬3´¨8¥nñ Aó    c                  ó*   € R \         P                  R/ /# )ÚstageÚfound_inf_per_device)r
   ÚREADY© r   r   Ú_refresh_per_optimizer_stater      s   € Ø”X—^‘^Ð%;¸RÐ@Ð@r   c                óD   € V ^8„  d   QhR\         P                  R\        /# )r   Útensorr   )ÚtorchÚTensorÚbool)r   s   "r   r   r      s   € ÷ ñ ¤§¡ð ´$ñ r   c                 ó    € V P                   ;'       g<    V P                  P                  R RRRR\        P                  P                  4       39   # )ÚxlaÚcpuÚhpuÚmtiaÚxpu)Úis_cudaÚdeviceÚtyper   Ú_CÚ_get_privateuse1_backend_name)r   s   &r   Ú_is_supported_devicer+      sM   € Ø�>‰>÷ ð ˜VŸ]™]×/Ñ/ØØØØØÜ�‰×.Ñ.Ó0ð4ñ ð r   c                   ó6   a € ] tR t^t o RtV 3R lR ltRtV tR# )Ú_GeneralMultiDeviceReplicatorz{
Lazily serves tensor to request device. This class extends
_MultiDeviceReplicator to allow support for "cpu" as a device.
c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# )r   Úmaster_tensorr   N©r   r   )r   Ú__classdict__s   "€r   r   Ú*_GeneralMultiDeviceReplicator.__annotate__%   s#   ø€ ÷ Hñ H¡e§l¡lð H°tñ Hr   c                ór   € \        V4      '       g   \        R VP                   24      hWn        / V n        R# )úExpected supported device, got N)r+   ÚAssertionErrorr'   ÚmasterÚ_per_device_tensors)Úselfr/   s   &&r   Ú__init__Ú&_GeneralMultiDeviceReplicator.__init__%   s:   € Ü# M×2Ò2Ü Ø1°-×2FÑ2FÐ1GÐHóð ð $ŒØEGˆÖ r   )r7   r6   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r9   Ú__static_attributes__Ú__classdictcell__)r1   s   @r   r-   r-      s   ø‡ € ñ÷
Hö Hr   r-   c                   óN  a a€ ] tR t^.t oRtRRRRRR]P                  P                  3V3R lV 3R lllt]	V3R	 lR
 l4       t
]	V3R lR l4       t
]	V3R lR l4       t
]	V3R lR l4       t
V3R lR lt
RV3R lR lltV3R lR ltV3R lR ltRV3R lR lltRtVtV ;t# )ÚShardedGradScalera©  
ShardedGradScaler helps perform gradient scaling in a shard aware manner. It extends
functionality from GradScaler:
* Supports PyTorch DDP and FSDP implementations
* Support CPU offloaded tensors (as used in fully sharded data parallel[FSDP])
* Supports the custom Mixed Precision loss dtype (fp16, bf16) that FSDP returns
* Sync inf/nan for scaled gradient tensors on any torch.device (where tensors are placed) across
nodes

Example::

    # Creates a ShardedGradScaler once at the beginning of training.
    scaler = ShardedGradScaler()

    for epoch in epochs:
        for input, target in data:
            optimizer.zero_grad()
            output = model(input)
            loss = loss_fn(output, target)

            # Scales loss.  Calls backward() on scaled loss to create scaled gradients.
            scaler.scale(loss).backward()

            # scaler.step() first unscales gradients of the optimizer's params.
            # If gradients don't contain infs/NaNs, optimizer.step() is then called,
            # otherwise, optimizer.step() is skipped.
            scaler.step(optimizer)

            # Updates the scale for next iteration.
            scaler.update()

See :class:`GradScaler` for explanation of scaling/unscaling and more use cases.

Args:
    init_scale (float, optional, default=2.**16):  Initial scale factor.
    growth_factor (float, optional, default=2.0):  Factor by which the scale is multiplied during
        :meth:`update` if no inf/NaN gradients occur for ``growth_interval`` consecutive iterations.
    backoff_factor (float, optional, default=0.5):  Factor by which the scale is multiplied during
        :meth:`update` if inf/NaN gradients occur in an iteration.
    growth_interval (int, optional, default=2000):  Number of consecutive iterations without inf/NaN gradients
        that must occur for the scale to be multiplied by ``growth_factor``.
    enabled (bool, optional):  If ``False``, disables gradient scaling. :meth:`step` simply
        invokes the underlying ``optimizer.step()``, and other methods become no-ops.
        Default: ``True``
    process_group (ProcessGroup, optional, default=torch.distributed.group.WORLD):
        process group for sharding
Úcudag       @g      à?iÐ  Tc                óV   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[RS[RS[R,          R	R/# )
r   r'   Ú
init_scaleÚbackoff_factorÚgrowth_factorÚgrowth_intervalÚenabledÚprocess_groupNr   )r   ÚfloatÚintr   r   )r   r1   s   "€r   r   ÚShardedGradScaler.__annotate___   sj   ø€ ÷ Sñ SáðSñ ðSñ ð	Sñ
 ðSñ ðSñ ðSñ $ dÕ*ðSð 
ñSr   c           	     óŽ   <€ \         SV `  VVVVVVR 7       V P                  '       d   Wpn        \	        \
        4      V n        R# R# ))rF   rG   rH   rI   rJ   N)Úsuperr9   Ú_enabledrK   r   r   Ú_per_optimizer_states)	r8   r'   rF   rG   rH   rI   rJ   rK   Ú	__class__s	   &&&&&&&&€r   r9   ÚShardedGradScaler.__init___   sM   ø€ ô 	‰ÑØØ!Ø)Ø'Ø+Øð 	ô 	
ð �=�=ˆ=Ø!.ÔÜ)4Ô5QÓ)RˆDÖ&ñ r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   Úoutputsr   r0   )r   r1   s   "€r   r   rN   v   s   ø€ ×?Ñ?™UŸ\™\Ð?©e¯l©lÑ?r   c                ó   € R # ©Nr   ©r8   rW   s   &&r   ÚscaleÚShardedGradScaler.scaleu   s   € Ù<?r   c                ón   <€ V ^8„  d   QhRS[ S[P                  ,          RS[ S[P                  ,          /# rV   )Úlistr   r   )r   r1   s   "€r   r   rN   y   s%   ø€ ×KÑK™T¡%§,¡,Õ/ÐK±D¹¿¹Õ4FÑKr   c                ó   € R # rY   r   rZ   s   &&r   r[   r\   x   s   € ÙHKr   c                óv   <€ V ^8„  d   QhRS[ S[P                  R3,          RS[ S[P                  R3,          /# )r   rW   .r   )Útupler   r   )r   r1   s   "€r   r   rN   |   s/   ø€ ×WÑW™U¡5§<¡<°Ð#4Õ5ÐW¹%ÁÇÁÈcÐ@QÕ:RÑWr   c                ó   € R # rY   r   rZ   s   &&r   r[   r\   {   s   € ÙTWr   c                ón   <€ V ^8„  d   QhRS[ S[P                  ,          RS[ S[P                  ,          /# rV   )r   r   r   )r   r1   s   "€r   r   rN      s%   ø€ ×SÑS™X¡e§l¡lÕ3ÐS¹ÁÇÁÕ8NÑSr   c                ó   € R # rY   r   rZ   s   &&r   r[   r\   ~   s   € ÙPSr   c                ó¶   <€ V ^8„  d   QhRS[ P                  S[S[ P                  ,          ,          RS[ P                  S[S[ P                  ,          ,          /# rV   ©r   r   r   )r   r1   s   "€r   r   rN   �   sA   ø€ ÷ /$ñ /$Ù—|‘|¡h©u¯|©|Õ&<Õ<ð/$á	�‰™¡§¡Õ.Õ	.ñ/$r   c                ó  a aa€ S P                   '       g   V# \        V\        P                  4      '       dµ   \	        V4      '       g   \        R VP                   24      hS P                  f   S P                  VP                  4       S P                  f   \        R4      hVS P                  P                  VP                  RR7      ,          pVP                  VP                  4      # . oR VV V3R lloS! V4      # )r4   ú+Expected _scale to be initialized, got NoneT©r'   Únon_blockingc                óx   € V ^8„  d   QhR\         P                  \        \         P                  ,          ,          /# )r   Úvalrf   )r   s   "r   r   Ú-ShardedGradScaler.scale.<locals>.__annotate__˜   s(   € ÷ 	Sñ 	SœUŸ\™\¬H´U·\±\Õ,BÕBñ 	Sr   c                 óÖ  <€ \        V \        P                  4      '       dä   \        V 4      '       g   \	        R V P
                   24      h\        S4      ^ 8X  dg   SP                  f   SP                  V P
                  4       SP                  f   \	        R4      hSP                  \        SP                  4      4       V S^ ,          P                  V P
                  4      ,          pVP                  V P                  4      # \        V \        P                  4      '       d<   \!        SV 4      p\        V \"        \$        34      '       d   \        V 4      ! V4      # V# \'        R4      h)r4   rh   z2outputs must be a Tensor or an iterable of Tensors)Ú
isinstancer   r   r+   r5   r'   ÚlenÚ_scaleÚ_lazy_init_scale_growth_trackerÚappendr-   Úgetr(   Údtyper   r   Úmapr^   ra   Ú
ValueError)rl   Ú
scaled_valÚiteratorÚapply_scaler8   Ústashs   &  €€€r   rz   Ú,ShardedGradScaler.scale.<locals>.apply_scale˜   s  ø€ Ü˜#œuŸ|™|×,Ò,Ü+¨C×0Ò0Ü(Ð+JÈ3Ï:É:È,Ð)WÓXÐXÜ�u“: ”?Ø—{‘{Ò*Ø×<Ñ<¸S¿Z¹ZÔHØ—{‘{Ò*Ü,ØIóð ð —L‘LÔ!>¸t¿{¹{Ó!KÔLØ  5¨¥8§<¡<°·
±
Ó#;Õ;�
ð "—‘ s§y¡yÓ1Ð1Ü˜#œsŸ|™|×,Ò,Ü˜{¨CÓ0�Ü˜c¤D¬% =×1Ò1Ü œ9 XÓ.Ð.Ø�ÜÐQÓRÐRr   )rQ   ro   r   r   r+   r5   r'   rq   rr   Útor(   ru   )r8   rW   Úscaled_outputrz   r{   s   f& @@r   r[   r\   �   sÕ   ú€ ð �}�}ˆ}ØˆNä�gœuŸ|™|×,Ò,Ü'¨×0Ò0Ü$Ð'FÀwÇ~Á~ÐFVÐ%WÓXÐXØ�{‰{Ò"Ø×4Ñ4°W·^±^ÔDØ�{‰{Ò"Ü$Ð%RÓSÐSØ# d§k¡k§n¡nØ—~‘~°Dð '5ó 'õ ˆMð !×%Ñ% g§m¡mÓ4Ð4à57ˆ÷	Sò 	Sñ0 ˜7Ó#Ð#r   c                óÆ   <€ V ^8„  d   QhRS[ P                  P                  RS[ P                  RS[ P                  RS[RS[S[ P                  S[ P                  3,          /# )r   Ú	optimizerÚ	inv_scaleÚ	found_infÚ
allow_fp16r   )r   ÚoptimÚ	Optimizerr   r   r   r'   )r   r1   s   "€r   r   rN   ²   sa   ø€ ÷ 78ñ 78á—;‘;×(Ñ(ð78ñ —<‘<ð78ñ —<‘<ð	78ñ
 ð78ñ 
‰e�l‰l™EŸL™LÐ(Õ	)ñ78r   c                ó  € \        V4      p\        V4      p\        R  4      p\        P                  ! 4       ;_uu_ 4        VP                   EFZ  pVR,           EFH  p	V	P
                  f   K  V'       g5   V	P
                  P                  \        P                  8X  d   \        R4      hV	P
                  P                  '       dŸ   V	P
                  P                  \        P                  J d\   V	P
                  P                  \        P                  4      P                  4       p
V
P                  \        P                  4      V	n        V	P
                  P                  4       pMV	P
                  pW{P                  ,          VP                  ,          P                  V4       EKK  	  EK]  	  VP!                  4        FR  w  rÍVP#                  4        F9  p\        P$                  ! VVP'                  V4      VP'                  V4      4       K;  	  KT  	  RRR4       VP(                  '       g?   V P*                  f   \-        R4      hVP'                  V P*                  P                  4       VP(                  #   + '       g   i     Ll; i)c                  ó    € \        \        4      # rY   )r   r^   r   r   r   Ú<lambda>Ú3ShardedGradScaler._unscale_grads_.<locals>.<lambda>Â   s	   € ¼ÄTÔ9Jr   ÚparamsNz%Attempting to unscale FP16 gradients.rh   )r-   r   r   Úno_gradÚparam_groupsÚgradru   Úfloat16rw   Ú	is_sparser(   Úfloat32ÚcoalesceÚ_valuesr'   rs   ÚitemsÚvaluesÚ*_amp_foreach_non_finite_check_and_unscale_rt   r7   rq   r5   )r8   r€   r�   r‚   rƒ   Úper_device_inv_scaleÚper_device_found_infÚper_device_and_dtype_gradsÚgroupÚparamÚparam_grad_fp32Ú
to_unscaler'   Úper_dtype_gradsÚgradss   &&&&&          r   Ú_unscale_grads_Ú!ShardedGradScaler._unscale_grads_²   sÑ  € ô  =¸YÓGÐÜ<¸YÓGÐô &1Ñ1JÓ%KÐ"Ü�]Š]�_�_Ø"×/Õ/�Ø" 8Ÿ_™_�EØ—z‘zÒ)Ù ß&¨E¯J©J×,<Ñ,<ÄÇÁÔ,MÜ(Ð)PÓQÐQØ—z‘z×+×+Ð+ð
 !Ÿ:™:×+Ñ+¬u¯}©}Ó<à.3¯j©j¯o©o¼e¿m¹mÓ.L×.UÑ.UÓ.W˜OØ)8×)=Ñ)=¼e¿m¹mÓ)L˜EœJØ%*§Z¡Z×%7Ñ%7Ó%9™
à%*§Z¡Z˜
à.×/@Ñ/@ÕAØ"×(Ñ(õç‘f˜Z×(ô) -ñ 0ð. ,F×+KÑ+KÖ+MÑ'�Ø,×3Ñ3Ö5�EÜ×DÒDØØ,×0Ñ0°Ó8Ø,×0Ñ0°Ó8öó 6ñ ,N÷1 ðD $×7×7Ð7Ø�{‰{Ò"Ü$Ð%RÓSÐSØ ×$Ñ$ T§[¡[×%7Ñ%7Ô8Ø#×7Ñ7Ð7÷M �_ús   Á 5I6Á6AI6ÃEI6É6J	c                óL   <€ V ^8„  d   QhRS[ P                  P                  RR/# )r   r€   r   N)r   r„   r…   )r   r1   s   "€r   r   rN   ë   s)   ø€ ÷ 3Jñ 3J¡%§+¡+×"7Ñ"7ð 3J¸Dñ 3Jr   c           	     ó  € V P                   '       g   R # V P                  R4       V P                  \        V4      ,          pVR,          \        P
                  J d   \        R4      hVR,          \        P                  J d   \        R4      hV P                  f   \        R4      hV P                  P                  4       P                  4       P                  4       p\        P                  ! RR\        P                  V P                  P                   R7      pV P#                  WVR4      VR	&   \        P
                  VR&   V P                  \        V4      ,          p. p. p. pVR	,          P%                  4        FÒ  pV P&                  R
8w  d�   VP                   P(                  R
8X  dr   VP+                  V4       VP-                  V P&                  4      pVP+                  V4       VP+                  \.        P0                  ! VRV P2                  R7      4       K   VP+                  \.        P0                  ! VRV P2                  R7      4       KÔ  	  V F  p	V	P5                  4        K  	  V'       d   \        P6                  ! Wg4       R # R # )NÚunscale_r   zMunscale_() has already been called on this optimizer since the last update().z(unscale_() is being called after step().rh   g        )ru   r'   Tr   r"   )Úasync_opr™   )é   )rQ   Ú_check_scale_growth_trackerrR   Úidr
   ÚUNSCALEDÚRuntimeErrorÚSTEPPEDrq   r5   ÚdoubleÚ
reciprocalrL   r   Úfullr�   r'   rŸ   r”   Ú_devicer(   rs   r}   ÚdistÚ
all_reducerK   ÚwaitÚ_foreach_copy_)
r8   r€   Úoptimizer_stater�   r‚   ÚworksÚfound_inf_on_cpusÚfound_inf_on_devicesÚfound_inf_on_deviceÚworks
   &&        r   r£   ÚShardedGradScaler.unscale_ë   s  € Ø�}�}ˆ}Ùà×(Ñ(¨Ô4à×4Ñ4´R¸	³]ÕCˆà˜7Õ#¤x×'8Ñ'8Ó8ÜØ_óð ð ˜WÕ%¬×)9Ñ)9Ó9ÜÐIÓJÐJð �;‰;ÒÜ Ð!NÓOÐOØ—K‘K×&Ñ&Ó(×3Ñ3Ó5×;Ñ;Ó=ˆ	Ü—J’JØ�#œUŸ]™]°4·;±;×3EÑ3Eô
ˆ	ð 37×2FÑ2FØ )¨Tó3
ˆÐ.Ñ/ô $,×#4Ñ#4ˆ˜Ñ ð ×4Ñ4´R¸	³]ÕCˆØˆØÐØ!Ðà(Ð)?Õ@×GÑGÖIˆIØ�|‰|˜uÔ$¨×)9Ñ)9×)>Ñ)>À%Ô)GØ!×(Ñ(¨Ô3Ø&/§l¡l°4·<±<Ó&@Ð#Ø$×+Ñ+Ð,?Ô@Ø—‘Ü—O’OØ+°dÀ$×BTÑBTôöð —‘Ü—O’O I¸ÀD×DVÑDVÔWöñ Jó ˆDØ�I‰IŽKñ çÜ× Ò Ð!2ÖIñ r   c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# )r   r‚   r   Nr0   )r   r1   s   "€r   r   rN      s   ø€ ÷ 2ñ 2±·±ð 2Àñ 2r   c                óÐ  € V P                   e   V P                  f   \        R4      hVP                  4       R8¼  dA   V ;P                   V P                  ,          un         V P                  P                  ^ 4       R# V P                  ^,           pW P                  8X  dA   V ;P                   V P                  ,          un         V P                  P                  ^ 4       R# W n        R# )zÄ
If found_inf is 1.0 (True), then scale is multiplied by backoff_factor and growth_tracker is set to zero.
Otherwise, scale is multiplied by the growth factor when the growth interval is reached.
Nz?Expected _scale and _growth_tracker to be initialized, got Noneg      ð?)rq   Ú_growth_trackerr5   ÚitemÚ_backoff_factorÚfill_Ú_growth_intervalÚ_growth_factor)r8   r‚   Ú
successfuls   && r   Ú_amp_update_scale_cpu_Ú(ShardedGradScaler._amp_update_scale_cpu_   s¬   € ð
 �;‰;Ò $×"6Ñ"6Ò">Ü ØQóð ð �>‰>Ó˜sÔ"Ø�KŠK˜4×/Ñ/Õ/�KØ× Ñ ×&Ñ& qÖ)à×-Ñ-°Õ1ˆJØ×2Ñ2Ô2Ø—’˜t×2Ñ2Õ2•Ø×$Ñ$×*Ñ*¨1Ö-à'1Ö$r   c                óV   <€ V ^8„  d   QhRS[ S[P                  ,          R,          RR/# )r   Ú	new_scaleNr   )rL   r   r   )r   r1   s   "€r   r   rN   5  s1   ø€ ÷ DOñ DO¡©¯©Õ 4°tÕ ;ð DOÀtñ DOr   c           
     ó„  € V P                   '       g   R# V P                  R4      w  r#Ve¾   \        V\        4      '       d   V P                  P                  V4       EMÇRpVP                  P                  V P                  8w  d   \        V4      hVP                  4       ^8w  d   \        V4      hVP                  RJd   \        V4      hV P                  P                  V4       EM=V P                  P                  4        UUu. uF>  pVR,          P                  4        F   pVP                  VP                  RR7      NK"  	  K@  	  ppp\!        V4      ^ 8X  d   \        R4      hV^ ,          p\!        V4      ^8”  d,   \#        ^\!        V4      4       F  p	W‡V	,          ,          pK  	  VP                  P                  R	8X  d   V P%                  V4       MM\&        P(                  ! V P                  V P*                  VV P,                  V P.                  V P0                  4       \3        \4        4      V n        R# u uppi )
a)  
Updates the scale factor.
If any optimizer steps were skipped the scale is multiplied by ``backoff_factor``
to reduce it. If ``growth_interval`` unskipped iterations occurred consecutively,
the scale is multiplied by ``growth_factor`` to increase it.
Passing ``new_scale`` sets the new scale value manually. (``new_scale`` is not
used directly, it's used to fill GradScaler's internal scale tensor. So if
``new_scale`` was a tensor, later in-place changes to that tensor will not further
affect the scale GradScaler uses internally.)
Args:
    new_scale (float or :class:`torch.Tensor`, optional, default=None):  New scale factor.
.. warning::
    :meth:`update` should only be called at the end of the iteration, after ``scaler.step(optimizer)`` has
    been invoked for all optimizers used this iteration.
NÚupdatezpnew_scale should be a float or a 1-element torch.cuda.FloatTensor or torch.FloatTensor with requires_grad=False.Fr   Tri   z,No inf checks were recorded prior to update.r"   )rQ   r¦   ro   rL   rq   r¿   r'   r(   r®   r5   ÚnumelÚrequires_gradÚcopy_rR   r”   r}   rp   ÚrangerÃ   r   Ú_amp_update_scale_r¼   rÁ   r¾   rÀ   r   r   )
r8   rÆ   rq   r¼   ÚreasonÚstater‚   Ú
found_infsÚfound_inf_combinedÚis
   &&        r   rÈ   ÚShardedGradScaler.update5  sâ  € ð" �}�}ˆ}Ùà"&×"BÑ"BÀ8Ó"LÑˆàÒ ä˜)¤U×+Ò+Ø—‘×!Ñ! )Ö,ðBð ð ×#Ñ#×(Ñ(¨D¯L©LÔ8Ü(¨Ó0Ð0Ø—?‘?Ó$¨Ô)Ü(¨Ó0Ð0Ø×*Ñ*°%Ó7Ü(¨Ó0Ð0Ø—‘×!Ñ! )Ö,ð "×7Ñ7×>Ñ>Ô@ôá@�EØ!&Ð'=Õ!>×!EÑ!EÖ!G�Ið —‘ F§M¡MÀ�ÖEá!Gñ FÙ@ð ñ ô �:‹ !Ô#Ü$Ð%SÓTÐTà!+¨A¥ÐÜ�:‹ Ô"Ü˜q¤# j£/Ö2�AØ&°Q­-Õ7Ò&ñ 3ð �}‰}×!Ñ! UÔ*Ø×+Ñ+Ð,>Õ?ä×(Ò(Ø—K‘KØ×(Ñ(Ø&Ø×'Ñ'Ø×(Ñ(Ø×)Ñ)ôô &1Ô1MÓ%NˆÖ"ùó7s   ÄAH<)r¼   rR   rK   g      ð@)TrY   )r;   r<   r=   r>   r?   r¯   r™   ÚWORLDr9   r   r[   rŸ   r£   rÃ   rÈ   r@   rA   Ú__classcell__)rS   r1   s   @@r   rC   rC   .   s´   ù‡ € ñ.ðd Ø#Ø #Ø"Ø#ØØ-1¯Z©Z×-=Ñ-=÷Sõ Sð, ß?ó Ø?àßKó ØKàßWó ØWàßSó ØS÷/$ð /$÷b78ò 78÷r3Jð 3J÷j2ð 2÷*DO÷ DOò DOr   rC   )ÚloggingÚcollectionsr   r   Úcollections.abcr   Útypingr   r   r   Útorch.distributedÚdistributedr¯   Útorch.amp.grad_scalerr   r	   r
   Ú"torch.distributed.distributed_c10dr   Ú	getLoggerr;   Úloggerr   r+   r-   rC   r   r   r   Ú<module>rà      s\   ðã ß (Ý $ß  ã Ý  ß NÑ NÝ ;ð 
×	Ò	˜8Ó	$€õAõôHÐ$:ô HôKO˜
ö KOr   