Ë
    ÄÓ^jó‹  ã                   óž  — d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dlm	Z
 d dlm	c mc mZ d dlm	c mc mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lm Z  d dl!m"Z"m#Z#m$Z$m%Z% d dlm&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 	 d dl:m;Z< ej~                  j€                  Z@ ej‚                  eB«      ZCeCjˆ                  ZEdeFddfd„ZGeGeC_D        deHde j’                  d   fd„ZJdej–                  j˜                  deMeHdf   deNeOeHf   fd„ZPdej–                  j˜                  deMeHdf   deNeOeHf   deQfd „ZRdej–                  j˜                  deMeHdf   deNeOeHf   deQfd!„ZSdej–                  j˜                  deMeHdf   deNeOeHf   ddfd"„ZT G d#„ d$«      ZUy# e=$ r
 d dl:m>Z< Y �Œw xY w)%é    N)ÚSequence)Úcast)Úfill_defaults)Ú
LazyString)Úrun_dtensor_rng_op)Ú_are_we_tracing)Ú
DeviceMesh)ÚDTensorSpecÚ
TensorMeta)Úargminmax_handler)ÚOpInfoÚOpSchemaÚOutputShardingÚOutputSpecType)Úis_rng_supported_mesh)Úredistribute_local_tensor)ÚShardingPropagator)Úconvolution_backward_handlerÚconvolution_handler)Ú#_format_implicit_redistribution_msgÚExplicitRedistributionContextÚtry_find_mesh_from_args)ÚPartialÚ	PlacementÚ	Replicate)Úget_active_debug_mode)Úreturn_and_correct_aliasing)Ú_cxx_pytree)Ú_pytreeÚlevelÚreturnc                 óV   — t        | «       t        j                  j                  «        y ©N)Ú_orig_setLevelÚtorchÚ_CÚ_reinit_DTensor_dispatch_logger)r    s    úm/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/distributed/tensor/_dispatch.pyÚ_setLevel_and_reinitr)   7   s   € Ü�5ÔÜ	‡H�H×,Ñ,Õ.ó    Úoutput_specc                 ó\   — t        «       r| €t        j                  «       S ddlm}  |«       S )Nr   )Ú*_ignore_fresh_unbacked_symbols_tls_context)r   Ú
contextlibÚnullcontextÚ%torch.fx.experimental.symbolic_shapesr-   )r+   r-   s     r(   Ú2_ignore_fresh_unbacked_symbols_for_dtensor_tracingr1   ?   s.   € ô Ô Ð 3Ü×%Ñ%Ó'Ð'õñ 6Ó7Ð7r*   Úop_callÚargs.Úkwargsc                 ój  — t        | j                  ||«      \  }}|rt        ‚|\  }}}}|j                  «       t	        |«      k(  rd|j                  «       t	        |«      k(  rH|�|j                  «       |k(  r3t        j                  j                  j                  j                  |«      S t        d«      ‚)Nz%as_strided not supported with DTensor)r   Ú_schemaÚAssertionErrorÚsizeÚtupleÚstrideÚstorage_offsetr%   ÚopsÚatenÚaliasÚdefaultÚRuntimeError)r2   r3   r4   Útensorr8   r:   r;   s          r(   Úas_strided_handlerrB   P   s–   € ô
 ! §¡°$¸Ó?�L€Dˆ&ÙÜÐØ+/Ñ(€FˆD�&˜.à�‰‹œ˜t›Ò$Ø�M‰M‹Oœu V›}Ò,ØÐ# v×'<Ñ'<Ó'>À.Ò'Pä�y‰y�~‰~×#Ñ#×+Ñ+¨FÓ3Ð3Ü
Ð>Ó
?Ð?r*   c                 ó¨   — t        t        j                  |d   «      }t        t        j                  |d   «      }|j                  |j                  k(  S )Nr   é   )r   r%   ÚTensorÚshape)r2   r3   r4   ÚlhsÚrhss        r(   Úis_same_size_handlerrI   b   s?   € ô
 Œu�|‰|˜T !™WÓ
%€CÜ
Œu�|‰|˜T !™WÓ
%€CØ�9‰9˜Ÿ	™	Ñ!Ð!r*   c                 óp   — t        t        j                  |d   «      }|j                  j	                  «       S )Nr   )r   ÚdtensorÚDTensorÚ_local_tensorÚ	is_pinned)r2   r3   r4   rA   s       r(   Úis_pinned_handlerrO   l   s-   € ô
 ”'—/‘/ 4¨¡7Ó+€FØ×Ñ×)Ñ)Ó+Ð+r*   c           	      ót  — t         j                  j                  j                  | ||«      }t	        j
                  t        t        t           |j                  «      |j                  «      }t        t        t        df   |«      } | |i |j                  ¤Ž t        t        t         j                     |d   «      d   }|j                  }|j                  }g }|D ]>  }	t        |	t         «      r|j#                  |	«       Œ%|j#                  t%        d«      «       Œ@ t        t&        j(                  |d   «      }
t+        |t        |«      t-        |
j/                  «       |
j1                  «       |
j2                  ¬«      ¬«      }t        j                  |
|d¬«      }|j5                  «       }|
j7                  |«       y )	N.r   ÚmaxrD   ©rF   r:   Údtype)ÚmeshÚ
placementsÚtensor_metaF)Úlocal_tensorÚspecÚrequires_grad)rK   rL   Ú_op_dispatcherÚunwrap_to_op_infoÚpytreeÚtree_unflattenr   ÚlistÚobjectÚ
local_argsÚargs_tree_specr9   Úlocal_kwargsrU   Údevice_meshÚ
isinstancer   Úappendr   r%   rE   r
   r   r8   r:   rS   Úfull_tensorÚcopy_)r2   r3   r4   Úop_infoÚlocal_tensor_argsÚgrad_dtensorÚgrad_placementsrT   Úfound_inf_placementsÚ	placementÚtarget_tensorrX   Úfound_inf_dtensorÚ	found_infs                 r(   Úfound_inf_reduce_handlerrq   u   s}  € ô
 �o‰o×,Ñ,×>Ñ>¸wÈÈfÓU€GÜ×-Ñ-ÜŒT”&‰\˜7×-Ñ-Ó.Ø×ÑóÐô œU¤6¨3 ;Ñ/Ð1BÓCÐÙÐÐ7 '×"6Ñ"6Ò7äœœWŸ_™_Ñ-¨t°A©wÓ7¸Ñ:€LØ"×-Ñ-€OØ×#Ñ#€Dà,.ÐØ$ò 8ˆ	Ü�i¤Ô+Ø ×'Ñ'¨	Õ2à ×'Ñ'¬°«Õ7ð	8ô œŸ™ t¨A¡wÓ/€MÜØÜÐ-Ó.ÜØ×$Ñ$Ó&Ø ×'Ñ'Ó)Ø×%Ñ%ô
ô€Dô  Ÿ™Ø"ØØôÐð
 "×-Ñ-Ó/€IØ×Ñ˜	Õ"r*   c                   ó®  — e Zd ZdZd"d„Zedefd„«       Zej                  deddfd„«       Zde	j                  j                  d	eed
f   deeef   dededefd„Zde	j                  j                  d	eed
f   dedefd„Zde	j                  j                  d	eed
f   deeef   dededededededefd„Zededededdfd„«       Zde	j                  j                  d	eed
f   deeef   defd„Zde	j                  j                  d	eed
f   deeef   dedef
d„Zedededefd„«       Zde	j                  j                  d e	j:                  dedefd!„Zy)#ÚOpDispatcheraù  
    Op dispatching class instance to handle args/kwargs pre-processing (un-wrapping), sharding
    propagation, redistribute local args, local compute, and post-processing (re-wrapping). It
    also handles any op specific logic if necessary.

    NOTE: Given the runtime overhead of Tensor subclass (__torch_dispatch__), the OpDispatcher
    is designed to minimize the CPU overhead by using the tricks of proper unflattening, faster
    pytree if needed, and leveraging various caching mechanisms implemented in the sharding
    propagation and redistribute modules. The CPU overhead is critical to eager mode performance,
    one need to carefully measure the CPU overhead when making significant changes to the
    OpDispatcher and ShardingPropagator.
    r!   Nc                 óv  — t        «       | _        t        j                  j                  t        j
                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                   h| _        t        j$                  j                  t&        t        j(                  j                  t*        t        j,                  j                  t.        t        j0                  j                  t2        t        j4                  j                  t6        t        j8                  j                  t:        t        j<                  j                  t>        t        j@                  j                  t>        i| _!        y r#   )"r   Úsharding_propagatorr=   Únative_dropoutr?   Únormal_ÚrandÚ	rand_likeÚrandnÚ
randn_likeÚrandint_likeÚ	low_dtypeÚlow_dtype_outÚuniform_Ú	bernoulliÚ
bernoulli_ÚfloatÚ_random_opsÚis_same_sizerI   rN   rO   Úconvolutionr   Úconvolution_backwardr   Ú*_amp_foreach_non_finite_check_and_unscale_rq   Ú
as_stridedrB   Úargminr   ÚargmaxÚ_custom_op_handlers©Úselfs    r(   Ú__init__zOpDispatcher.__init__¯   sQ  € Ü#5Ó#7ˆÔ ô ×Ñ×'Ñ'Ü�L‰L× Ñ Ü�I‰I×ÑÜ�N‰N×"Ñ"Ü�J‰J×ÑÜ�O‰O×#Ñ#Ü×Ñ×%Ñ%Ü×Ñ×'Ñ'Ü×Ñ×+Ñ+Ü�M‰M×!Ñ!Ü�N‰N×"Ñ"Ü�O‰O×!Ñ!ð
ˆÔô ×Ñ×%Ñ%Ô';Ü�N‰N×"Ñ"Ô$5Ü×Ñ×$Ñ$Ô&9Ü×%Ñ%×-Ñ-Ô/KÜ×;Ñ;×CÑCÔE]Ü�O‰O×#Ñ#Ô%7Ü�K‰K×ÑÔ!2Ü�K‰K×ÑÔ!2ð	$
ˆÕ r*   c                 ó>   — t         j                  j                  «       S r#   )r%   r&   Ú'_get_dtensor_allow_implicit_replicationrŒ   s    r(   Ú_allow_implicit_replicationz(OpDispatcher._allow_implicit_replicationÛ   s   € ä�x‰x×?Ñ?ÓAÐAr*   Úvaluec                 ó@   — t         j                  j                  |«      S r#   )r%   r&   Ú'_set_dtensor_allow_implicit_replication)r�   r’   s     r(   r‘   z(OpDispatcher._allow_implicit_replicationß   s   € ä�x‰x×?Ñ?ÀÓFÐFr*   r2   r3   .r4   rh   Ú	try_cachec                 óü  — |j                   €t        d«      ‚	 |r0t        «       s&| j                  j	                  |j                   «      }n%| j                  j                  |j                   «      }t        j                  rNt        j                  t        j                  «      r+t        j                  d|j                   |j                  «       |S # t        $ rw t        j                  j!                  |j#                  «       t        j                  j$                  j&                  «      r% |j(                  |i |¤Ž}|t*        u rt        d ‚|cY S ‚ t,        $ r$}t/        |› d|j                   xs |› �«      |‚d }~ww xY w)Nzwop_info.schema should not be None in sharding propagation. This function should only be called after unwrap_to_op_info.z,sharding_prop MISS (C++ fast path): %s -> %sz"

Sharding propagation failed for )Úschemar7   r   ru   Úpropagate_op_shardingÚ propagate_op_sharding_non_cachedÚloggerÚhandlersÚisEnabledForÚloggingÚDEBUGÚdebugr+   ÚNotImplementedErrorr%   r&   Ú%_dispatch_has_kernel_for_dispatch_keyÚnameÚDispatchKeyÚCompositeImplicitAutogradÚ	decomposeÚNotImplementedÚ	Exceptionr@   )	r�   r2   r3   r4   rh   r•   ÚresultÚoutÚes	            r(   Ú)_propagate_op_sharding_dispatch_slow_pathz6OpDispatcher._propagate_op_sharding_dispatch_slow_pathã   sF  € ð6 �>‰>Ð!Ü ðOóð ð 	ñ ¤Ô!2Ø×1Ñ1×GÑGÈÏÉÓW‘à×1Ñ1×RÑRØ—N‘Nó�ô �Š¤6×#6Ñ#6´w·}±}Ô#EÜ—‘ØBØ—N‘Nà×&Ñ&ô	ð ˆMøÜ"ò 	Ü�x‰x×=Ñ=Ø—‘“¤§¡× 4Ñ 4× NÑ Nôð
 (�g×'Ñ'¨Ð8°Ñ8�Øœ.Ñ(Ü(¨dÐ2Ø’
àÜò 	ÜØ�#Ð9¸'¿.¹.Ò:SÈGÐ9TÐUóàðûð	ús   ™B6C ÃA<E;Å	E;ÅE6Å6E;c                 óT  — |j                   }|€t        d«      ‚|€t        d«      ‚t        «       }|�'|j                  �|j	                  |j                  «       |j
                  }|j                  «       }d }|�r|j                  rW|j                  €t        ‚t        |j                  «      5  | j                  ||j                  |j                  «       d d d «       |j                  r?t        j                  t        t         t"           |j$                  «      |j                  «      n|j$                  }	t        t&        t"        df   |	«      }	|| j(                  v �r|t*        j,                  sNt/        |«      rCt1        «        }
|
st2        j5                  dd¬«       t+        j6                  ||
«      t*        _        t        t8        j:                  |d   «      t        t<        j>                  |	d   «      }}|j@                  jC                  dd «      }|� tE        |t<        jF                  «      st        ‚t*        j,                  �rc|jH                  �sVt*        j,                  jJ                  �r;|€>|jL                  jN                  d	k7  s%t1        «       s�tO        |«      t<        j>                  urft*        j,                  jQ                  |jR                  |¬
«      5  t        |j                  «      5   ||	i |j@                  ¤Ž}d d d «       d d d «       |S tE        t*        j,                  t*        j6                  «      st        ‚t*        j,                  jU                  |jR                  «      \  }}t        |j                  «      5  tW        |||g|	¢­i |j@                  ¤Ž}d d d «       |S t        |j                  «      5   ||	i |j@                  ¤Ž}d d d «       |S |j                  rk|j                  �_|j                  jX                  |k7  rFt        |j                  «      5   |j                  jX                  |	i |j@                  ¤Ž}d d d «       |S t        |j                  «      5   ||	i |j@                  ¤Ž}d d d «       |S |j                  }|jZ                  j\                  }|€d }|S dt^        dt<        j>                  fd„}tE        |t^        «      r
 ||«      }|S tE        |t`        «      rZ|D �cg c]  }|� ||«      nd ‘Œ }}tE        |t         «      st        ‚d |v r'tc        |d   jN                  «      }te        d|› d�«      ‚|S # 1 sw Y   �ŒvxY w# 1 sw Y   �ŒYxY w# 1 sw Y   |S xY w# 1 sw Y   |S xY w# 1 sw Y   |S xY w# 1 sw Y   |S xY w# 1 sw Y   |S xY wc c}w )Nz"output sharding should not be Nonezop_info should never be None.zÿDTensor RNG tracker is being lazily initialized during tracing. RNG states may not be synchronized across ranks, which can lead to silent incorrectness. Please call `torch.manual_seed()` with the same seed on all ranks before compiling DTensor random ops.é   ©Ú
stacklevelr   Ú	generatorÚcuda)r°   rX   r!   c                 ó  — | j                   �h| j                   j                  }| j                   j                  }t        |«      dk(  rt	        j
                  d|¬«      S t	        j                  g |¬«      S t        | › d�«      ‚)Nr   © )rS   z has no tensor metadata.)rV   rF   rS   Úlenr%   ÚzerosrA   r@   )rX   rF   rS   s      r(   Údefault_tensorzJOpDispatcher._dispatch_get_local_results_slow_path.<locals>.default_tensorË  sr   € Ø×'Ñ'Ð3Ø $× 0Ñ 0× 6Ñ 6˜Ø $× 0Ñ 0× 6Ñ 6˜Ü˜u›:¨š?ä#(§;¡;¨r¸Ô#?Ð?ô $)§<¡<°¸%Ô#@Ð@ä*¨d¨VÐ3KÐ+LÓMÐMr*   zreturn type z in DTensor op is not supported)3Úoutput_shardingr7   r   r+   Úrecord_output_placementsÚcompute_meshÚ_is_current_rank_part_of_meshÚneeds_redistributeÚredistribute_schemar1   Úredistribute_local_argsÚ use_val_from_redistribute_schemara   r\   r]   r   r^   r_   r`   r9   rƒ   ÚrandomÚ_rng_trackerr   r   rš   ÚinfoÚOffsetBasedRNGTrackerrK   rL   r%   rE   rb   Úpoprd   Ú	GeneratorÚis_metaÚdistribute_region_enabledÚdeviceÚtypeÚ_distribute_regionÚ_specÚ_compute_rng_offsetsr   Úopr6   Úreturnsr
   r   Ústrr    )r�   r2   r3   rh   r·   Ú
debug_moderT   ÚparticipatingÚlocal_resultsri   Úrun_state_syncÚ	first_argÚfirst_local_argÚmaybe_user_generatorÚstart_offset_incrÚend_offset_incrrX   Úret_listr¶   ÚsÚret_types                        r(   Ú%_dispatch_get_local_results_slow_pathz2OpDispatcher._dispatch_get_local_results_slow_path%  sÕ  € ð "×1Ñ1ˆØÐ"Ü Ð!EÓFÐFØˆ?Ü Ð!?Ó@Ð@ô +Ó,ˆ
ØÐ! o×&AÑ&AÐ&MØ×/Ñ/°×0KÑ0KÔLà×#Ñ#ˆØ×:Ñ:Ó<ˆØˆÚà×1Ò1ð #×6Ñ6Ð>Ü(Ð(ÜGØ#×/Ñ/óñ ð ×0Ñ0ØØ'×;Ñ;Ø'×HÑHô÷ð ×)Ò)ô ×%Ñ%Üœœf™ w×'9Ñ'9Ó:à×*Ñ*ôð ×'Ñ'ð ô !%¤U¬6°3¨;Ñ%7Ð9JÓ KÐØ˜$×*Ñ*Ò*Ü×*Ò*Ô/DÀTÔ/Jô *9Ó):Ð%:�NÙ)ÜŸ™ð^ð ()ð $ô ô +1×*FÑ*FØ˜nó+”FÔ'ô
 œŸ™¨$¨q©'Ó2ÜœŸ™Ð'8¸Ñ';Ó<ð +�	ð (/×';Ñ';×'?Ñ'?ÀÈTÓ'RÐ$à(Ð0Ü!Ð"6¼¿¹ÔHä(Ð(ô ×'Ó'Ø+×3Ó3Ü×+Ñ+×EÓEð -Ð8Ø*×1Ñ1×6Ñ6¸&Ò@ä /Ô 1Ü $ _Ó 5¼U¿\¹\Ñ Iô $×0Ñ0×CÑCØ%ŸO™OÐ7Kð Dó ñ "ô "TØ /× ;Ñ ;ó"ñ "ñ 18Ø%6ð1"Ø:A×:NÑ:Nñ1" ÷"÷"ðJ Ðôu  *Ü"×/Ñ/´×1MÑ1Mô ô #1Ð0ä"×/Ñ/×DÑDÀYÇ_Á_ÓUñ ;Ð)¨?ô PØ+×7Ñ7óñ 	ô -?Ø 1Ø /Ø 'ð-ð "3ò	-ð
 #*×"6Ñ"6ñ-˜M÷	ðf ÐôO LØ'×3Ñ3óñ ñ )0Ø.ð)Ø29×2FÑ2Fñ)˜÷ðN Ðð} $×6Ò6Ø'×;Ñ;ÐGØ'×;Ñ;×>Ñ>À'ÒIô LØ'×3Ñ3óñ ð )O¨×(KÑ(K×(NÑ(NØ.ð)Ø29×2FÑ2Fñ)˜÷ðr Ðôe LØ'×3Ñ3óñ ñ )0Ø.ð)Ø29×2FÑ2Fñ)˜÷ðd ÐðK #×.Ñ.ˆDØ—‘×.Ñ.ˆHàˆ|ð !%�ð> Ðð9N¬ð N¼¿¹ó Nô ˜d¤KÔ0á$2°4Ó$8�Mð Ðô   ¤hÔ/ð OSö%ØIJ¨Q¨]™ qÔ)ÀÑDð%�Mð %ô & m´TÔ:Ü,Ð,Ø˜}Ñ,Ü#& x°¡{×'7Ñ'7Ó#8˜Ü1Ø*¨8¨*Ð4SÐTóð ð Ð÷Oñ ú÷J"ñ "ú÷"ðJ Ðú÷g	ðf Ðú÷OðN Ðú÷sðr Ðú÷eðd Ðüò%sf   Â.(U
ËU$Ë-UÌ U$ÎU1Î<U>Ð'VÑ%VÓ2V%Õ
UÕU!	ÕU$Õ$U.Õ1U;Õ>VÖVÖV"r¹   r·   rÑ   rÐ   Úis_inplace_opÚis_out_variant_opc
                 óÄ  — t        «       }
|
�'|j                  �|
j                  |j                  «       |j                  €«|t        j                  j
                  k(  rŽ|�t        |t        «      st        ‚t        j                  |�t        |«      nd|j                  ¬«      }t        j                  |t        j                  j                   ¬«       t        |j#                  «       «      }|r˜|j                  �‹|j                  }t        |t$        «      st        ‚t        |d   t&        j(                  «      st        ‚|d   j*                  j,                  |j,                  k(  r|d   S ||d   _        t/        ||||d   «      S y|	rët        |j                  t0        «      s|j                  fn|j                  }g }d}|j2                  j4                  D ]d  }|j6                  sŒt9        t&        j(                  ||j:                     «      }t9        t$        ||   «      |_        |j=                  |«       |dz  }Œf t?        |«      dk  rt        d«      ‚t?        |«      dkD  rt1        |«      S |d   S |t        j                  j
                  k7  rt        |«      ‚| jA                  ||j                  «      }|r(|j2                  jC                  «       rt/        ||||«      S |S )zL
        Tail of main dispatching logic, called from C++ fast path.
        NrD   )rÇ   )rÌ   r   z,out variant should have at least one out arg)"r   r+   r¸   r=   Úequalr?   rd   Úboolr7   r%   rA   ÚintÚdevice_typeÚdistÚ
all_reduceÚReduceOpÚMINÚitemr
   rK   rL   rÊ   rU   r   r9   r6   Ú	argumentsÚis_outr   r¢   re   r´   ÚwrapÚ_is_view_op)r�   r2   r3   r4   r¹   r·   rÑ   rÐ   rÜ   rÝ   rÏ   Úrr+   Úoutput_specsÚout_dtsÚspec_idxÚargumentÚout_dtÚrets                      r(   Ú_dispatch_fast_path_python_tailz,OpDispatcher._dispatch_fast_path_python_tailé  st  € ô" +Ó,ˆ
ØÐ! o×&AÑ&AÐ&MØ×/Ñ/°×0KÑ0KÔLà×&Ñ&Ð.Øœ$Ÿ*™*×,Ñ,Ò,ð &Ð-´¸MÌ4Ô1PÜ(Ð(Ü—L‘LØ*7Ð*C”C˜Ô&ÈØ'×3Ñ3ô�ô —‘ ¤d§m¡m×&7Ñ&7Õ8Ü $ Q§V¡V£X£�áà×*Ñ*Ð6Ø-×9Ñ9�Ü! +¬{Ô;Ü(Ð(Ü! $ q¡'¬7¯?©?Ô;Ü(Ð(ð ˜‘7—=‘=×+Ñ+¨{×/EÑ/EÒEØ ™7�Nð !,��Q‘”Ü2°7¸DÀ&È$ÈqÉ'ÓRÐRàÙô " /×"=Ñ"=¼uÔEð !×,Ñ,Ñ.à$×0Ñ0ð ð
 ˆGØˆHØ#ŸO™O×5Ñ5ò "�Ø—?“?Ü!¤'§/¡/°6¸(¿-¹-Ñ3HÓI�FÜ#'¬°\À(Ñ5KÓ#L�F”LØ—N‘N 6Ô*Ø ‘M‘Hð"ô �7‹|˜aÒÜ$Ð%SÓTÐTÜ%(¨£\°AÒ%5”5˜“>ÐE¸7À1¹:ÐEàœ$Ÿ*™*×,Ñ,Ò,Ü$ WÓ-Ð-Ø—)‘)˜M¨?×+FÑ+FÓGˆCÙ §¡×!<Ñ!<Ô!>Ü2°7¸DÀ&È#ÓNÐNà�
r*   Úsuggested_input_schemar¾   c           
      óª  — t        «       }| j                  �)t        t        j                  |j
                  «      «      }n|j
                  }g }t        | j                  «      D �]  \  }}||   }t        |t        «      rÎt        t        j                  | j                  |   «      }	||k7  r�|�|j                  |||«      nt        j                   «       }
t#        j$                  ||t'        t(        | j*                  xs |j,                  «      «       |
5  t/        |	||«      }d d d «       |j1                  «       ŒØ|j1                  |	«       Œê|r|j1                  |«       Œþ|j1                  |«       �Œ |rAt3        t5        | j                  «      t5        |«      «      D ]  }|j1                  ||   «       Œ t        |«      | _        y # 1 sw Y   Œ©xY wr#   )r   ra   r9   r\   Útree_leavesÚargs_schemaÚ	enumerateÚflat_args_schemard   r
   r   r%   rE   r`   Úrecord_redistribute_callsr.   r/   r   Úobserve_redistributionr   r   r—   rÌ   r   re   Úranger´   )rh   rô   r¾   rÏ   Úflatten_args_schema_to_reshardÚnew_local_argsÚiÚarg_specÚreshard_arg_specrW   Úredistribute_contextÚresharded_local_tensors               r(   r½   z$OpDispatcher.redistribute_local_args>  sÓ  € ô +Ó,ˆ
ð ×!Ñ!Ð-Ü-2Ü×"Ñ"Ð#9×#EÑ#EÓFó.Ñ*ð .D×-OÑ-OÐ*à')ˆÜ$ W×%=Ñ%=Ó>ó &	4‰KˆAˆxØ=¸aÑ@ÐÜ˜(¤KÔ0Ü#¤E§L¡L°'×2DÑ2DÀQÑ2GÓH�ØÐ/Ò/ð
 &Ð1ð #×<Ñ<Ø˜xÐ)9ôô (×3Ñ3Ó5ð )ô 2×HÑHØ à(Ü"Ü?Ø#ŸN™NÒGÐ.D×.GÑ.Góô	ð .ñ Ü1JØ(Ø$à,ó	2Ð.÷ð #×)Ñ)Ð*@ÕAà"×)Ñ)¨,Õ7á3ð #×)Ñ)Ð*:Õ;à"×)Ñ)¨(Ö3ðM&	4ñR ,ÜÜ�G×,Ñ,Ó-¬sÐ3QÓ/Róò I�ð ×%Ñ%Ð&DÀQÑ&GÕHðIô
 # >Ó2ˆÕ÷3ð ús   ÄG	Ç	G	c                 ó*   — | j                  |||d«      S )NT)Ú_unwrap_to_op_info_impl)r�   r2   r3   r4   s       r(   r[   zOpDispatcher.unwrap_to_op_info€  s   € ð ×+Ñ+¨G°T¸6À4ÓHÐHr*   Úcreate_schemac           
      óP  ‡— | j                   j                  j                  |d «      }|€&| j                   j                  j                  |d «      }dt        dt
        fd„Š|d uxr |j                  xs t        ˆfd„|D «       «      }|rt        j                  |«      \  }}|}	n|d }}	g }
i }g }i }d }|	D ]â  }t        |t        j                  «      rF|j                  |j                  «       |
j                  |j                  «       |�ŒV|j                   }Œct        |t"        j$                  «      rD|xs t'        ||	«      }|
j                  | j)                  |||«      «       |j                  |«       ŒÁ|
j                  |«       |j                  |«       Œä |j+                  «       D ]�  \  }}t        |t        j                  «      r.|j                  ||<   |j                  ||<   |�ŒA|j                   }ŒNt        |t"        j$                  «      r,|xs t'        ||	«      }| j)                  |||«      ||<   |||<   Œ”|||<   |||<   ŒŸ |€t-        d|› d�«      ‚t/        ||r0t1        ||rt        j2                  |
|«      n
t5        |
«      ||¬«      nd |
t5        |«      ||«      }|S )NÚargr!   c                 óT   — t        | t        t        f«      rt        d„ | D «       «      S y)Nc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr#   )rd   r%   rE   )Ú.0rç   s     r(   ú	<genexpr>zQOpDispatcher._unwrap_to_op_info_impl.<locals>._contains_tensor.<locals>.<genexpr>�  s   è ø€ ÒJ¸dœ: d¬E¯L©L×9ÑJùs   ‚$&F)rd   r^   r9   Úany)r  s    r(   Ú_contains_tensorz>OpDispatcher._unwrap_to_op_info_impl.<locals>._contains_tensor›  s$   € Ü˜#¤¤e˜}Ô-ÜÑJÀcÔJÓJÐJØr*   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr#   r³   )r  r  r  s     €r(   r  z7OpDispatcher._unwrap_to_op_info_impl.<locals>.<genexpr>¢  s   øè ø€ Ò7¨3Ñ! #×&Ñ7ùs   ƒz*found no DeviceMesh from dtensor args for ú!)Úschema_info)ru   Úop_to_schema_infoÚgetÚ)op_to_schema_info_for_single_dim_strategyr_   rà   Úneeds_pytreer  r\   Útree_flattenrd   rK   rL   re   rM   rÊ   rc   r%   rE   r   Ú%_try_replicate_spec_for_scalar_tensorÚitemsr7   r   r   r]   r9   )r�   r2   r3   r4   r  Úruntime_schema_infor  Ú	tree_argsÚ	args_specÚ	args_listr÷   Úkwargs_schemar`   rb   r¹   r  ÚkÚvrh   r  s                      @r(   r  z$OpDispatcher._unwrap_to_op_info_implˆ  sÛ  ø€ ð #×6Ñ6×HÑH×LÑLØ�Tó
Ðð Ð&à×(Ñ(×RÑR×VÑVØ˜Tóð  ð	¤&ð 	¬Tó 	ð   tÐ+ÒPÐ0C×0PÑ0Pò8äÓ7°$Ô7Ó7ð 	ñ ä#)×#6Ñ#6°tÓ#<Ñ ˆI�yØ*3‰Ià#'¨�yˆIà$&ˆØ+-ˆØ#%ˆ
Ø*,ˆØ*.ˆàò 	'ˆCÜ˜#œwŸ™Ô/Ø×!Ñ! #×"3Ñ"3Ô4Ø×"Ñ" 3§9¡9Ô-ØÑ'à#&§?¡?‘LÜ˜C¤§¡Ô.Ø+ò  Ô/FØ˜Yó0�ð ×"Ñ"Ø×>Ñ>Ø  lóôð
 ×!Ñ! #Õ&ð ×"Ñ" 3Ô'Ø×!Ñ! #Õ&ð)	'ð, —L‘L“Nò 	$‰DˆAˆqÜ˜!œWŸ_™_Ô-Ø"#§/¡/�˜Q‘Ø#$§7¡7�˜aÑ ØÑ'à#$§=¡=‘LÜ˜AœuŸ|™|Ô,Ø+ò  Ô/FØ˜Yó0�ð $(×#MÑ#MØØØ ó$�˜aÑ ð
 #$�˜Q’ð $%�˜aÑ Ø"#�˜Q’ð)	$ð, ÐÜ Ø<¸W¸IÀQÐGóð ô Øñ ô Øñ !ô ×)Ñ)¨+°yÔAä˜{Ó+àØ/õ
ð ØÜ�*ÓØØó%
ˆð( ˆr*   ÚresrX   c                 ó"  — t        | t        j                  «      r_|�At        |t        «      st	        d|› d�«      ‚t        j                  | || j                  ¬«      S | j                  dk7  rt	        d«      ‚| S t        | t        t        f«      r|�t        |t        t        f«      st	        d|› d�«      ‚g }t        | |«      D ]*  \  }}|j                  t        j                  ||«      «       Œ, t        | t        «      rt        |«      S |S | S )NzBoutput spec does not match with output! Expected DTensorSpec, got ú.)rY   r   zoutput tensor should be scalar!zAoutput spec does not match with output! Expected list/tuple, got )rd   r%   rE   r
   r7   rK   rL   rY   Úndimr^   r9   Úzipre   rs   rê   )r   rX   Úres_listrª   rÙ   s        r(   rê   zOpDispatcher.wrap÷  s  € ä�cœ5Ÿ<™<Ô(ØÐÜ! $¬Ô4Ü(Ø\Ð]aÐ\bÐbcÐdóð ô —‘ s¨DÀ×@QÑ@QÔRÐRð —8‘8˜q’=Ü(Ð)JÓKÐKØ�
Ü˜œd¤E˜]Ô+ØÐ$¬°D¼4Ä¸-Ô)HÜ$ØWÐX\ÐW]Ð]^Ð_óð ð ˆHÜ˜C ›ò 9‘��1à—‘¤× 1Ñ 1°!°QÓ 7Õ8ð9ô '1°´eÔ&<”5˜“?ÐJÀ(ÐJð ˆJr*   Ú
tensor_argc           	      óv  — |j                  «       dk(  r&|j                  dk(  rt        j                  dd¬«       |j                  «       dk(  s| j                  rTt        |t        «       f|j                  z  t        |j                  |j                  «       |j                  ¬«      ¬«      }|S t        |› d�«      ‚)NrD   záFound a non-scalar tensor with numel=1 and ndim!=0, we are implicitly creating a replicated DTensor for it. However, please consider changing it to a scalar tensor or explicitly create a DTensor under distributed environment.r­   r®   rR   )rV   zó: got mixed torch.Tensor and DTensor, need to convert all torch.Tensor to DTensor before calling distributed operators! Please see https://docs.pytorch.org/docs/main/distributed.tensor.html#mixed-tensor-and-dtensor-operations for more details.)Únumelr#  ÚwarningsÚwarnr‘   r
   r   r   rF   r:   rS   r@   )r�   r2   r&  r¹   Úreplication_specs        r(   r  z2OpDispatcher._try_replicate_spec_for_scalar_tensor  s¾   € ð ×ÑÓ Ò" z§¡¸!Ò';Ü�M‰MðPð õð ×ÑÓ Ò" d×&FÒ&Fä*ØÜ“� ×!2Ñ!2Ñ2Ü&Ø$×*Ñ*Ø%×,Ñ,Ó.Ø$×*Ñ*ôô Ðð   Ðô Ø�)ð %ð %óð r*   )r!   N) Ú__name__Ú
__module__Ú__qualname__Ú__doc__rŽ   Úpropertyrà   r‘   Úsetterr%   Ú_opsÚ
OpOverloadr9   r_   ÚdictrÎ   r   r«   rÛ   r	   r   ró   Ústaticmethodr   r½   r[   r  r   rê   rE   r
   r  r³   r*   r(   rs   rs   ¡   sÌ  „ ñó
ðX ðB¨Tò Bó ðBð !×'Ñ'ðG°ð G¸$ò Gó (ðGð@à—‘×&Ñ&ð@ð �F˜C�KÑ ð@ð �S˜&�[Ñ!ð	@ð
 ð@ð, ð-@ð. 
ó/@ðDBà—‘×&Ñ&ðBð �F˜C�KÑ ðBð ð	Bð
 
óBðHSà—‘×&Ñ&ðSð �F˜C�KÑ ðSð �S˜&�[Ñ!ð	Sð
 !ðSð (ðSð ðSð ðSð ðSð  ðSð 
óSðj ð?3Øð?3à (ð?3ð +/ð?3ð 
ò	?3ó ð?3ðBIà—‘×&Ñ&ðIð �F˜C�KÑ ðIð �S˜&�[Ñ!ð	Ið
 
óIðmà—‘×&Ñ&ðmð �F˜C�KÑ ðmð �S˜&�[Ñ!ð	mð
 ðmð 
ómð^ ð�&ð  ð °6ò ó ðð<" à—‘×&Ñ&ð" ð —L‘Lð" ð !ð	" ð
 
ô" r*   rs   )Vr.   r�   r)  Úcollections.abcr   Útypingr   r%   Útorch.distributedÚdistributedrã   Útorch.distributed.tensor._apirA   Ú_apirK   Ú torch.distributed.tensor._randomÚ_randomr¿   Útorch._library.utilsr   Útorch._loggingr   Útorch._prims.rng_primsr   Ú)torch.distributed._functional_collectivesr   Útorch.distributed.device_meshr	   Ú&torch.distributed.tensor._dtensor_specr
   r   Ú)torch.distributed.tensor._nonlinear_reduxr   Ú#torch.distributed.tensor._op_schemar   r   r   r   r   Ú&torch.distributed.tensor._redistributer   Ú'torch.distributed.tensor._sharding_propr   Ú!torch.distributed.tensor._tp_convr   r   Útorch.distributed.tensor._utilsr   r   r   Ú(torch.distributed.tensor.placement_typesr   r   r   Útorch.utils._debug_moder   Útorch.utils._python_dispatchr   Útorch.utilsr   r\   ÚImportErrorr   r<   r=   Ú	getLoggerr,  rš   ÚsetLevelr$   rá   r)   r_   ÚAbstractContextManagerr1   r2  r3  r9   r4  rÎ   rB   rà   rI   rO   rq   rs   r³   r*   r(   ú<module>rR     s  ðã Û Û Ý $Ý ã Ý  ß /Ó /ß 1Ó 1Ý .Ý %Ý 5Ý EÝ 4ß JÝ G÷ó õ CÝ LÝ F÷÷ñ ÷
 SÑ RÝ 9Ý Dð.Ý1ð ‡y�y‡~�~€Ø	ˆ×	Ñ	˜8Ó	$€ð —‘€ð/ ð /¨ó /ð
 '€„ð8Øð8à×&Ñ& tÑ,ó8ð"@Ø�Z‰Z×"Ñ"ð@à
�˜�Ñ
ð@ð ��f�Ñó@ð$"Ø�Z‰Z×"Ñ"ð"à
�˜�Ñ
ð"ð ��f�Ñð"ð 
ó	"ð,Ø�Z‰Z×"Ñ"ð,à
�˜�Ñ
ð,ð ��f�Ñð,ð 
ó	,ð)#Ø�Z‰Z×"Ñ"ð)#à
�˜�Ñ
ð)#ð ��f�Ñð)#ð 
ó	)#÷XW
 ò W
 øðk ò .ß-Ð-ð.ús   Â.F= Æ=GÇG