+
    –°³j�a  ã                   óª  € ^ RI t ^ RIHt ^ RIt^ RIHt ^ RIHu H	t
 ^ RIHu Ht ^ RIHt ^ RIHt ^ RIHtHtHtHt ^ RIHtHt ^ RIHt ^ RIHtHtHt ^ R	IH t  ^ R
I!H"t" ]PF                  PH                  t$R.t%] PL                  R 4       t'R R lt(R R lt)R R lt*R t+R R lt,R R lt-R R lt.R R lt/R R lt0R R lt1]$PV                  Pd                  ],]$Pf                  Pd                  ]-]$Ph                  Pd                  ]/]$Pj                  Pd                  ]/]$Pl                  Pd                  ]1]$Pn                  Pd                  ]1/t8R  t9R! t:R# )"é    N)Úcast©ÚTensor)Ú
DeviceMesh)ÚDTensorÚPartialÚ	ReplicateÚShard)ÚDTensorSpecÚ
TensorMeta)Ú_MaskPartial)Ú	_skip_dimÚ	ReductionÚreplicate_reduction_dims)Únormalize_dim)Ú	PlacementÚloss_parallelc               #  ó>   "  € \        4        Rx € \        4        R# 5i)ub  
A context manager that enables loss parallelism, where efficient parallelized loss computation
can be performed when the input is sharded on the class dimension. Currently only the cross-entropy
loss is supported.

Within this context manager, one can use :func:`~torch.nn.functional.cross_entropy` or
:class:`~torch.nn.CrossEntropyLoss` as usual, with the following assumptions on the input parameters.
The corresponding ``backward()`` call, if any, also needs to happen under this context manager.

Both one-dimensional and multi-dimensional ``DeviceMesh`` are supported. On a
multi-dimensional mesh, exactly one mesh dim must shard the class dimension â€”
that dim is treated as the "TP" dim and can be in any position (not necessarily
last). The remaining mesh dims may be ``Shard`` (e.g. batch-sharded for DP/CP)
or ``Replicate``.

Args:
    input (:class:`DTensor`):
        Input logits. Assumed to be sharded on the class dimension on exactly
        one mesh dim.
    target (Union[:class:`torch.Tensor`, :class:`DTensor`]):
        Must be ground truth class indices (class probabilities currently not
        supported). Its placements are derived from ``input``'s placements by
        (1) replacing the TP dim's ``Shard(class_dim)`` with ``Replicate`` and
        (2) shifting any other ``Shard(d)`` with ``d > class_dim`` down by one
        (since the class tensor dim is removed from the output)::

            input tensor shape       input placements             target shape      target placements
            ----------------------   --------------------------   ---------------   ------------------------
            (batch, class)           (Shard(0), Shard(1))         (batch,)          (Shard(0), Replicate())
            (batch, class)           (Replicate(), Shard(1))      (batch,)          (Replicate(), Replicate())
            (batch, class, seq)      (Shard(2), Shard(1))         (batch, seq)      (Shard(1), Replicate())
            (batch, class, seq)      (Shard(0), Shard(1))         (batch, seq)      (Shard(0), Replicate())

        A plain :class:`torch.Tensor` is only accepted when the derived target
        placements are all ``Replicate`` (e.g. on a one-dimensional mesh);
        otherwise a :class:`DTensor` must be passed explicitly so that the
        intended sharding is unambiguous.
    weight (Union[:class:`torch.Tensor`, :class:`DTensor`], optional):
        If given, assumed to be replicated across the ``DeviceMesh``.
    label_smoothing:
        Currently not supported.

Returns:
    A :class:`DTensor` whose placements depend on ``reduction``:

    - ``reduction="none"`` â€” per-sample loss; inherits the ``target``
      placements (``Shard`` on batch-parallel dims, ``Replicate`` on TP).
    - ``reduction="sum"`` â€” scalar; ``Replicate`` on the TP dim (the custom
      all-reduce makes each rank's local value globally correct over TP),
      ``Partial("sum")`` on every other ``Shard`` mesh dim so that the
      cross-rank reduction happens lazily on materialization/redistribution,
      and ``Replicate`` on ``Replicate`` mesh dims.
    - ``reduction="mean"`` â€” only supported on a one-dimensional mesh; returns
      a fully replicated :class:`DTensor`.

    On a one-dimensional mesh all three cases simplify to a fully replicated
    :class:`DTensor` (the original behavior).

.. note::
    ``reduction="mean"`` is only supported on a one-dimensional ``DeviceMesh``.
    On a multi-dimensional mesh the per-rank division by ``total_weight`` uses a
    local count, so aggregating across non-TP dims does not yield the correct
    global mean; use ``reduction="sum"`` or ``"none"`` instead and divide by the
    global count yourself if needed.

Example:
    A sharded DTensor is manually created here to showcase the usage.
    In practice, it is usually the output of a TP module.

    >>> # xdoctest: +SKIP("distributed")
    >>> from torch.distributed.tensor.parallel import loss_parallel
    >>> from torch.distributed.device_mesh import init_device_mesh
    >>> ...
    >>> device_mesh = init_device_mesh("cuda", (8,))
    >>> input = torch.randn(4, 16, device="cuda", requires_grad=True)
    >>> dist_input = distribute_tensor(input, device_mesh, placements=[Shard(1)])
    >>> target = torch.randint(16, (4,), device="cuda")
    >>> with loss_parallel():
    >>>     loss = F.cross_entropy(dist_input, target, reduction="mean")
    >>>     loss.backward()
    >>> ...
N)Ú_enable_custom_loss_opsÚ_disable_custom_loss_ops© ó    Úg/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/distributed/tensor/parallel/loss.pyr   r      s   é € ôh Ôã	äÖùs   ‚c                óV   € V ^8„  d   QhR\         \        R3,          R\        R\        /# )é   Ú
placements.ÚdimÚreturn)Útupler   Úint)Úformats   "r   Ú__annotate__r"   ~   s*   € ÷ ñ ¬%´	¸3°Õ*?ð Äcð Ìcñ r   c           
      ó¦  € \        V 4       UUu. uF   w  r#VP                  V4      '       g   K  VNK"  	  ppp\        V4      ^8w  d   \        RV RV  R\        V4       R24      hV^ ,          p\        V 4       FM  w  r#W%8X  d   K  VP                  4       '       d   K%  VP	                  4       '       d   K=  \        RV RV R24      h	  V# u uppi )é   zHloss_parallel() requires exactly one mesh dim to shard tensor dimension z, but got placements z with z such mesh dim(s).zGloss_parallel() expects non-TP mesh dims to be Shard or Replicate, got z at dim Ú.)Ú	enumerateÚis_shardÚlenÚ
ValueErrorÚis_replicate)r   r   ÚiÚpÚshard_mesh_dimsÚmesh_dims   &&    r   Ú_find_all_reduce_mesh_dimr/   ~   sØ   € Ü%.¨zÔ%:ÔNÑ%:™T˜Q¸a¿j¹jÈ¿o—q�qÑ%:€OÑNÜ
ˆ?Ó˜qÔ ÜðØ˜Ð2°:°,¸fÜ�?Ó#Ð$Ð$6ð8ó
ð 	
ð
 ˜qÕ!€HÜ˜*Ö%‰ˆØŒ=ÙØ—
‘
—” §¡× 0Ô 0Üð+Ø+,¨#¨X°a°S¸ð;óð ñ	 &ð €Oùó! Os
   �C¯Cc                óV   € V ^8„  d   QhR\         \        R3,          R\        R\        /# )r   r   .Úmeshr   )r   r   r   r   )r!   s   "r   r"   r"   ’   s-   € ÷ <ñ <Üœi¨˜nÕ-ð<Ü5?ð<äñ<r   c                 ó¾  € \        V \        4      '       d0   V P                  V8X  d   V # \        R V RV P                   R24      h\        V \        P
                  4      '       dc   \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        RV R24      h\        P                  ! WVRR7      # \        R	\        V 4       24      h)
z	Expected z	 but got r%   c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5i©N)r'   )Ú.0r,   s   & r   Ú	<genexpr>Ú#_cast_to_dtensor.<locals>.<genexpr>›   s   é € Ð0¡Z �z‰z�|ˆ|£Zùs   ‚TFzZloss_parallel() requires a DTensor (not a plain torch.Tensor) when the derived placements u¸    contain Shard â€” this happens on a multi-dimensional mesh with a batch-sharded non-TP dim. Wrap the tensor with DTensor.from_local or distribute_tensor to make the sharding explicit.)Údevice_meshr   Ú	run_checkzUnsupported type )Ú
isinstancer   r   ÚRuntimeErrorÚtorchr   Úanyr)   Ú
from_localÚ	TypeErrorÚtype)Útensorr   r1   s   &&&r   Ú_cast_to_dtensorrB   ’   sÐ   € ô �&œ'×"Ò"Ø×Ñ 
Ô*ØˆMä ¨:¨,°iÀ×@QÑ@QÐ?RÐRSÐTÓUÐUÜ	�FœEŸL™L×	)Ò	)ß‹3Ñ0¡ZÓ0�3�3Š3Ñ0¡ZÓ0×0Ò0ô ð/Ø/9¨lð ;1ð2óð ô ×!Ò!Ø°Àuô
ð 	
ô Ð+¬D°«L¨>Ð:Ó;Ð;r   c                ó¬   € V ^8„  d   QhR\         P                  P                  R\        \        R3,          R\
        \        \        3,          R\        /# ©r   Úop_callÚargs.Úkwargsr   )r<   Ú_opsÚ
OpOverloadr   ÚobjectÚdictÚstrr   )r!   s   "r   r"   r"   ­   sR   € ÷ Qñ QÜ�Z‰Z×"Ñ"ðQä
”˜�Õ
ðQô ””f�ÕðQô ñ	Qr   c                 óx  € \         P                  P                  WV4      pVP                  f   \	        R4      h\         P                  P
                  P                  VP                  4      p\        V\        4      '       d   V# \        V\        4      '       d
   V^ ,          # \        R\        V4       R24      h)Nz9op_info.schema should not be None after unwrap_to_op_infozUnexpected tensor meta type: r%   )r   Ú_op_dispatcherÚunwrap_to_op_infoÚschemaÚAssertionErrorÚsharding_propagatorÚ_propagate_tensor_metar:   r   r   r;   r@   )rE   rF   rG   Úop_infoÚtensor_metas   &&&  r   rS   rS   ­   s¢   € ô
 ×$Ñ$×6Ñ6°wÀfÓM€GØ‡~�~ÒÜØGó
ð 	
ô ×(Ñ(×<Ñ<×SÑSØ�‰ó€Kô �+œz×*Ò*ØÐÜ	�K¤×	'Ò	'à˜1�~ÐäÐ:¼4ÀÓ;LÐ:MÈQÐOÓPÐPr   c                 ó.  € V'       d&   V P                   \        P                  8w  d   \        h\        P
                  ! V \        P                  P                  R 7      w  rVV P                  V\        P                  R7      p V P                  4       ^ 8X  d   T pM\\        P                  ! WRR7      p\        P                  ! V\        P                  P                   P"                  W43R7      pW,
          p\        P$                  ! \        P&                  ! V4      VRR7      p	\        P                  ! V	\        P                  P(                  P"                  W43R7      p	\        P*                  ! V	4      p
Wz,
          pV'       g   VP                  V4      pV# ))Útype_promotion_kind)ÚdtypeÚmemory_formatT)Úkeepdim)ÚreduceOpÚgroup)rX   r<   ÚhalfrQ   ÚutilsÚelementwise_dtypesÚELEMENTWISE_TYPE_PROMOTION_KINDÚDEFAULTÚtoÚcontiguous_formatÚnumelÚamaxÚfuncolÚ
all_reduceÚc10dÚReduceOpÚMAXÚnameÚsumÚexpÚSUMÚlog)Úxr   Úhalf_to_floatr1   r.   Úcomputation_dtypeÚresult_dtypeÚshiftedÚx_maxÚshifted_sumexpÚshifted_logsumexpÚresults   &&&&&       r   Ú_log_softmaxry   Å   s$  € ßØ�7‰7”e—j‘jÔ Ü Ð Ü&+×&>Ò&>Ø	œu×DÑD×LÑLô'Ñ#Ðð 	
�‰Ð$´E×4KÑ4KˆÓL€AØ‡w�wƒy�A„~Ø‰ä—
’
˜1¨4Ô0ˆÜ×!Ò!ØœDŸM™M×-Ñ-×2Ñ2¸4Ð:Jô
ˆð •)ˆÜ—Y’YœuŸyšy¨Ó1°3ÀÔE€NÜ×&Ò&Ø¤§¡×!2Ñ!2×!7Ñ!7ÀÐ?Oô€Nô Ÿ	š	 .Ó1ÐØÕ(€FßØ—‘˜<Ó(ˆØ€Mr   c                ó¬   € V ^8„  d   QhR\         P                  P                  R\        \        R3,          R\
        \        \        3,          R\        /# rD   ©r<   rH   rI   r   rJ   rK   rL   )r!   s   "r   r"   r"   à   sL   € ÷ ñ Ü�Z‰Z×"Ñ"ðä
”˜�Õ
ðô ””f�Õðô ñ	r   c                 óÒ  € \        \        V^ ,          4      p\        \        V^,          4      p\        \        V^,          4      pVP                  p\        WCP                  4       4      p\        VP                  V4      p\        WV4      p\        VP                  WEVP                  V4      p	\        VP                  VP                  VR7      p
\        V	V
V	P                  R7      # )r   ©rU   ©Úrequires_grad)r   r   r    ÚboolÚ_specr   r   r/   r   rS   ry   Ú_local_tensorr1   r   r   )rE   rF   rG   rp   r   rq   Úspecr.   Úoutput_tensor_metaÚresÚres_specs   &&&        r   Ú_log_softmax_handlerr‡   à   s»   € ô
 	ŒW�d˜1•gÓ€AÜ
Œs�D˜•GÓ
€CÜœ˜t A�wÓ'€Mà�7‰7€DÜ
˜ŸU™U›WÓ
%€CÜ(¨¯©¸#Ó>€Hä/°¸vÓFÐä
�q—‘¨¸D¿I¹IÀxÓ
P€CäØ�	‰	Ø�‰Ø&ô€Hô àØà×'Ñ'ôð r   c                ó¬   € V ^8„  d   QhR\         P                  P                  R\        \        R3,          R\
        \        \        3,          R\        /# rD   r{   )r!   s   "r   r"   r"     sL   € ÷ 'ñ 'Ü�Z‰Z×"Ñ"ð'ä
”˜�Õ
ð'ô ””f�Õð'ô ñ	'r   c                 ó”   € \        \        V^ ,          4      p\        \        P                  V^,          4      pVP	                  V4      # )r   )r   r   r<   rX   rb   )rE   rF   rG   Úgrad_outputÚinput_dtypes   &&&  r   Ú_log_softmax_backward_handlerrŒ     s7   € ô
 ”w  Q¥Ó(€KÜ”u—{‘{ D¨¥GÓ,€KØ�>‰>˜+Ó&Ð&r   c                óî   € V ^8„  d   QhR\         R\         R\         R,          R\         R,          R\        R\        R\        P                  R	\        R
\        R\        R\
        \         \         3,          /# )r   rp   ÚtargetÚweightNÚlocal_weightÚ	reductionÚignore_indexÚinput_shapeÚchannel_dimr1   r.   r   )r   r    r<   ÚSizer   r   )r!   s   "r   r"   r"     s˜   € ÷ K ñ K ÜðK äðK ô �T�MðK ô ˜4•-ð	K ô
 ðK ô ðK ô —‘ðK ô ðK ô ðK ô ðK ô Œ6”6ˆ>ÕñK r   c
                 ór  aa€ V P                  4       o^oS^8  d   ^ oR VV3R llp
Ve#   V
! V4      pVf   \        hV
! V4      pW,          p \        P                  ! W8g  V^ 4      pVP	                  S4      p\        VSR7      pVP                  WèV	4      p\        P                  ! V SV4      pVP                  VW‰4      pVP                  S4      ) p\        P                  ! W8g  V^ 4      pV\        P                  P                  8X  d   S^8”  d   V P                  RR4      pVV3# Ve~   \        V P                  4      pRVS&   XP!                  V4      p\        P                  ! VSV4      P                  S4      p\        P                  ! W8g  V^ 4      pVP#                  4       pM!W8g  P#                  4       P%                  V 4      pV\        P&                  P                  8X  d   VP#                  4       pVV3# V\        P(                  P                  8X  d   VP#                  4       V,          pVV3# )r$   c                ó0   € V ^8„  d   QhR\         R\         /# )r   r�   r   r   )r!   s   "r   r"   Ú'_nll_loss_forward.<locals>.__annotate__   s   € ÷ 	ñ 	œVð 	¬ñ 	r   c                 ó€   <€ S^8”  d4   ^.S,          pV P                   ^ ,          VS&   V P                  V4      pV# T pV# )r$   )ÚshapeÚview)r�   rš   Úwr”   Ún_dimss   &  €€r   Ú_weight_viewÚ'_nll_loss_forward.<locals>._weight_view   sQ   ø€ Ø�AŒ:àðàõˆEð "(§¡¨a¥ˆE�+ÑØ—‘˜EÓ"ˆAð ˆð ˆAØˆr   ©Úoffset_shapeÚ
offset_dimg        r   éÿÿÿÿ)r   rQ   r<   ÚwhereÚ	unsqueezer   Ú_partition_valueÚgatherÚ_reduce_valueÚsqueezer   ÚNONEÚvalueÚnew_fullÚlistrš   Úexpandrl   rb   rn   ÚMEAN)rp   rŽ   r�   r�   r‘   r’   r“   r”   r1   r.   rž   rœ   Úlocal_wÚsafe_targetÚsafe_target_Úpartial_placementÚsafe_target_partial_Úresult_partialÚresult_reducedrx   Útotal_weightÚ	new_shapeÚwsumr�   s   &&&&&&&f&&             @r   Ú_nll_loss_forwardrº     s  ù€ ð �U‰U‹W€FØ€KØ�„zØˆ÷	ñ 	ð ÒÙ˜Ó ˆØÒÜ Ð Ù˜|Ó,ˆØ�KˆÜ—+’+˜fÑ4°f¸aÓ@€KØ×(Ñ(¨Ó5€Lô %°+È+ÔVÐØ,×=Ñ=Ø˜HóÐô —\’\ ! [Ð2FÓG€Nà&×4Ñ4°^ÀTÓT€NØ×$Ñ$ [Ó1Ð1€Fä�[Š[˜Ñ/°¸Ó;€Fà”I—N‘N×(Ñ(Ô(¨V°a¬ZØ—z‘z " cÓ*ˆØ�|Ð#Ð#àÒÜ˜Ÿ™“Mˆ	Ø!#ˆ	�+Ñà�H‰H�YÓˆÜ�|Š|˜A˜{¨LÓ9×AÑAÀ+ÓNˆÜ�{Š{˜6Ñ1°4¸Ó;ˆØ—x‘x“z‰àÑ.×3Ñ3Ó5×8Ñ8¸Ó;ˆð ”I—M‘M×'Ñ'Ô'Ø—‘“ˆð �<ÐÐð 
”i—n‘n×*Ñ*Ô	*Ø—‘“ Õ,ˆà�<ÐÐr   c                ó¬   € V ^8„  d   QhR\         P                  P                  R\        \        R3,          R\
        \        \        3,          R\        /# rD   r{   )r!   s   "r   r"   r"   ]  sR   € ÷ \ñ \Ü�Z‰Z×"Ñ"ð\ä
”˜�Õ
ð\ô ””f�Õð\ô ñ	\r   c                 óâ  € \        \        V^ ,          4      pV^,          pV^,          p\        \        V^,          4      p\        \        V^,          4      pVP                  4       ^8¼  d   ^M^ pVP                  p	\        V	P                  V4      p
\        \        V	P                  V.4      V4      p\        4       3V	P                  P                  ,          p\        WKV	P                  4      pRpVe½   \        W\V	P                  4      p\        V	P                  P                  4       Uu. uF  qîV
8X  d   \        ^ 4      M	\        4       NK   	  ppVP                  V	P                  V4      P                   pVP"                  ^ ,          VP                   P"                  V,          8w  d   \$        hV\&        P(                  P*                  8X  d   TpMìV\&        P,                  P*                  8X  d?   V	P                  P                  ^8”  d$   \/        RV	P                  P                   R24      h. p\1        V	P                  4       Fi  w  ppWê8X  d   VP3                  \        4       4       K'  VP5                  4       '       d   VP3                  \7        4       4       KX  VP3                  V4       Kk  	  \9        V4      p\;        V4      pWEuV^&   V^&   \=        V \9        V4      V4      p\?        VP                   VP                   Ve   VP                   MRVVVVP"                  VV	P                  V
4
      w  pp\A        V	P                  VVR7      p\        VVVPB                  R7      V3# u upi )r   Nzjloss_parallel() with reduction='mean' is only supported on one-dimensional DeviceMesh; got mesh with ndim=z(. Use reduction='sum' or 'none' instead.r}   r~   )"r   r   r    r   r�   r/   r   r   r   r	   r1   ÚndimrB   Úranger
   Úredistributer‚   rš   rQ   r   rª   r«   r¯   ÚNotImplementedErrorr&   Úappendr'   r   r   r­   rS   rº   r   r   )rE   rF   rG   rp   rŽ   r�   r‘   r’   r”   rƒ   r.   Útarget_placementsÚall_replicate_placementsr�   r+   Úsharded_placementsÚoutput_placementsÚout_placements_listr,   r„   rx   r·   Úout_specs   &&&                    r   Ú_nll_loss_forward_handlerrÈ   ]  sé  € ô
 	ŒW�d˜1•gÓ€AØ�!�W€FØ�!�W€FÜ”S˜$˜q�'Ó"€IÜœ˜T !�WÓ%€Là—u‘u“w !”|‘!¨€KØ�7‰7€DÜ(¨¯©¸+ÓF€Hô "Ü  §¡°;°-Ó@À+óÐô !*£˜~°·	±	·±Õ>ÐÜ˜f¸¿¹ÓC€FØ€LØÒÜ! &ÀDÇIÁIÓNˆô
 AFÀdÇiÁiÇnÁnÔ@Uó
Ù@U¸1˜XœŒE�!ŒH¬9«;Ò6Ñ@Uð 	ð 
ð ×*Ñ*¨4¯9©9Ð6HÓI×WÑWˆØ×Ñ˜aÕ  A§O¡O×$9Ñ$9¸+Õ$FÔFÜ Ð à”I—N‘N×(Ñ(Ô(Ø-Ñð œ	Ÿ™×,Ñ,Ô,°·±·±À!Ô1CÜ%ðBà—9‘9—>‘>Ð"Ð"JðLóð ð 02ÐÜ˜dŸo™oÖ.‰DˆAˆqØŒ}Ø#×*Ñ*¬9«;Ö7Ø—‘—’Ø#×*Ñ*¬7«9Ö5à#×*Ñ*¨1Ö-ñ /ô "Ð"5Ó6Ðô �‹:€DàÐ€Dˆ�GˆT�!‰WÜ/°¼¸t»ÀfÓMÐä,Ø	�‰Ø×ÑØ &Ò 2ˆ×Ò¸ØØØØ	�‰ØØ�	‰	ØóÑ€FˆLô ˜4Ÿ9™9Ð&7ÐEWÔX€Hô 	àØà ×.Ñ.ô	
ð 	ð
ð 
ùòm
s   Ä-$M,c                óÊ   € V ^8„  d   QhR\         R\         R\         R\         R,          R\        R\        R\         R	\        P                  R
\        R\        R\        R\         /# )r   rŠ   rp   rŽ   r�   Nr‘   r’   r·   r“   r”   r1   r.   r   )r   r    r<   r•   r   )r!   s   "r   r"   r"   Ã  s–   € ÷ C5ñ C5ÜðC5äðC5ô ðC5ô �T�Mð	C5ô
 ðC5ô ðC5ô ðC5ô —‘ðC5ô ðC5ô ðC5ô ðC5ô ñC5r   c                 ó
  € VP                  4       ^8  d   ^ M^pV\        P                  P                  8X  d	   W,          p VP	                  V4      p\
        P                  ! W%8g  V^ 4      p\
        P                  ! V4      p\        WxR7      pVP                  V4      P                  4       pVP                  W¹V
4      pVP                  P                  f   \        hVP                  P                  P                  VP                   4      R,
          p\
        P"                  ! VP$                  ^ ,          VP&                  R7      pVP                  4       ^8X  d   WüV&   M…VP                  4       ^8X  d   WüVV3&   MiVP)                  VR4      pVP$                  pVP+                  RVP$                  V,          4      pVVVV3&   VP-                  V4      P)                  VR4      pVP                  4       V P                  4       u;8”  d   ^ 8”  d   M MV P	                  V4      p Ve›   \/        VP                  4       4       Uu. uF  p^NK  	  ppVP$                  ^ ,          VV&   VP+                  V4      p\1        VP$                  4      pRVV&   VP3                  V4      p\
        P4                  ! VW‚4      pV V,          p \
        P                  ! W%8g  V ^ 4      p V\
        P6                  ! V4      ,           V ,          # u upi )r   r    g      ð?)Údevicer£   )r   r   r¯   r«   r¥   r<   r¤   Ú
zeros_liker   r©   Úflattenr¦   Úmask_bufferÚdatarQ   rb   rX   Úarangerš   rË   Ú	transposeÚreshaper›   r¾   r­   r®   r§   rm   )rŠ   rp   rŽ   r�   r‘   r’   r·   r“   r”   r1   r.   r±   Ú
grad_inputr³   Úmasked_safe_targetÚgrad_updateÚ	arange_1dÚgrad_input_tÚintermidate_shapeÚgrad_input_2dÚ_r¸   rœ   Úw_targets   &&&&&&&&&&&             r   Ú"_nll_loss_and_log_softmax_backwardrÜ   Ã  s‚  € ð —u‘u“w ”{‘!¨€KØ”I—N‘N×(Ñ(Ô(Ø!Õ0ˆà×Ñ˜kÓ*€FÜ—+’+˜fÑ4°f¸aÓ@€KÜ×!Ò! !Ó$€Jô %°+ÔVÐØ×%Ñ% kÓ2×:Ñ:Ó<€KØ*×;Ñ;¸KÈxÓXÐà×$Ñ$×)Ñ)Ò1ÜÐØ#×/Ñ/×4Ñ4×7Ñ7¸
×8HÑ8HÓIÈCÕO€KÜ—’Ø× Ñ  Õ#Ð,>×,EÑ,Eô€Ið
 	‡u�uƒw�!„|Ø)4Ð%Ò&Ø	
�‰‹�AŒØ4?�9Ð0Ð0Ò1à!×+Ñ+¨K¸Ó<ˆØ(×.Ñ.ÐØ$×,Ñ,¨R°·±¸Õ1EÓFˆØ7Bˆ�iÐ!3Ð3Ñ4Ø"×'Ñ'Ð(9Ó:×DÑDÀ[ÐRTÓUˆ
à‡~�~Ó˜+Ÿ/™/Ó+Ö/¨a×/Ø!×+Ñ+¨KÓ8ˆàÒÜ % a§e¡e£g¤Ó/¡˜1“Q¡ˆ	Ð/Ø!'§¡¨a¥ˆ	�+ÑØ—‘ 	Ó*ˆô ˜Ÿ™“Mˆ	Ø!#ˆ	�+ÑØ�M‰M˜)Ó$ˆÜ—<’<  ;Ó7ˆØ! HÕ,ˆä—+’+˜fÑ4°kÀ1ÓE€Kð œŸš 1›Õ%¨Õ4Ð4ùò# 0s   ÉL c                ó¬   € V ^8„  d   QhR\         P                  P                  R\        \        R3,          R\
        \        \        3,          R\        /# rD   r{   )r!   s   "r   r"   r"   	  sR   € ÷ Jñ JÜ�Z‰Z×"Ñ"ðJä
”˜�Õ
ðJô ””f�ÕðJô ñ	Jr   c                 ó˜  € \        \        V^ ,          4      p\        \        V^,          4      pV^,          pV^,          p\        \        V^,          4      p\        \        V^,          4      p\        \        V^,          4      p	VP	                  4       ^8¼  d   ^M^ p
VP
                  p\        VP                  V
4      p\        \        VP                  V
.4      V
4      p\        4       3VP                  P                  ,          p\        W]VP                  4      pVe   \        WnVP                  4      pV\        P                  P                   8X  d   VP#                  VP                  V4      p\%        V4      pW1^ &   WVuV^&   V^&   \        WžVP                  4      V^&   \'        V \)        V4      V4      p\+        VP,                  VP,                  VP,                  Ve   VP,                  MRVVV	VP.                  V
VP                  V4      p\1        VP                  VP                  VR7      p\        VVVP2                  R7      # )r   Nr}   r~   )r   r   r    r   r   r�   r/   r   r   r   r	   r1   r½   rB   r   rª   r«   r¿   r­   rS   r   rÜ   r‚   rš   r   r   )rE   rF   rG   rŠ   rp   rŽ   r�   r‘   r’   r·   r”   rƒ   r.   rÂ   rÃ   r„   rx   rÇ   s   &&&               r   Ú_nll_loss_backward_handlerrß   	  sñ  € ô
 ”w  Q¥Ó(€KÜŒW�d˜1•gÓ€AØ�!�W€FØ�!�W€FÜ”S˜$˜q�'Ó"€IÜœ˜T !�WÓ%€LÜœ  Q¥Ó(€Là—u‘u“w !”|‘!¨€KØ�7‰7€DÜ(¨¯©¸+ÓF€Hô "Ü  §¡°;°-Ó@À+óÐô !*£˜~°·	±	·±Õ>ÐÜ˜f¸¿¹ÓC€FØÒÜ! &ÀDÇIÁIÓNˆð ”I—N‘N×(Ñ(Ô(Ø!×.Ñ.¨t¯y©yÐ:KÓLˆô �‹:€Dàˆ�GàÐ€Dˆ�GˆT�!‰Wä˜|ÀtÇyÁyÓQ€Dˆ�GÜ/°¼¸t»ÀfÓMÐä/Ø×!Ñ!Ø	�‰Ø×ÑØ &Ò 2ˆ×Ò¸ØØØØ	�‰ØØ�	‰	Øó€Fô Ø�	‰	Ø�‰Ø&ô€Hô àØà×*Ñ*ôð r   c                  ó`   € \         P                  P                  P                  \        4       R # r4   )r   rN   Ú_custom_op_handlersÚupdateÚcustomized_loss_opsr   r   r   r   r   `  s   € Ü×Ñ×.Ñ.×5Ñ5Ô6IÖJr   c                  ór   € \          F,  p \        P                  P                  P	                  V 4       K.  	  R # r4   )rã   r   rN   rá   Úpop)Ú	custom_ops    r   r   r   d  s&   € ß(ˆ	Ü×Ñ×2Ñ2×6Ñ6°yÖAó )r   );Ú
contextlibÚtypingr   r<   Útorch._prims_commonÚ_prims_commonr^   Ú)torch.distributed._functional_collectivesÚdistributedÚ_functional_collectivesrf   Ú"torch.distributed.distributed_c10dÚdistributed_c10drh   r   Útorch.distributed.device_meshr   Útorch.distributed.tensorr   r   r	   r
   Ú&torch.distributed.tensor._dtensor_specr   r   Ú,torch.distributed.tensor._ops._embedding_opsr   Ú'torch.distributed.tensor._ops._math_opsr   r   r   Ú#torch.distributed.tensor._ops.utilsr   Ú(torch.distributed.tensor.placement_typesr   ÚopsÚatenÚ__all__Úcontextmanagerr   r/   rB   rS   ry   r‡   rŒ   rº   rÈ   rÜ   rß   ÚdefaultÚ_log_softmax_backward_dataÚnll_loss_forwardÚnll_loss2d_forwardÚnll_loss_backwardÚnll_loss2d_backwardrã   r   r   r   r   r   Ú<module>r     s7  ðó Ý ã Ý #ß :Ð :ß 1Ð 1Ý Ý 4ß GÓ Gß JÝ E÷ñ õ
 >Ý >ð ‡y�y‡~�~€ð Ð
€ð ×ÑñWó ðWõ~õ(<õ6Qò0õ6õF'õK õ\\õLC5õLJð\ 	×Ñ×ÑÐ3Ø×#Ñ#×+Ñ+Ð-JØ×Ñ×!Ñ!Ð#<Ø×Ñ×#Ñ#Ð%>Ø×Ñ×"Ñ"Ð$>Ø×Ñ×$Ñ$Ð&@ðÐ òKôBr   