§
    O�’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< n# e=$ r	 d dl:m>Z< Y nw xY wej?        j@        Z@ ejA        eB¦  «        ZCeCjD        ZEdeFddfd„ZGeGeC_D        deHde jI        d         fd„ZJdejK        jL        deMeHdf         deNeOeHf         fd„ZPdejK        jL        deMeHdf         deNeOeHf         deQfd „ZRdejK        jL        deMeHdf         deNeOeHf         deQfd!„ZSdejK        jL        deMeHdf         deNeOeHf         ddfd"„ZT G d#„ d$¦  «        ZUdS )%é    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                 ó`   — t          | ¦  «         t          j                             ¦   «          d S ©N)Ú_orig_setLevelÚtorchÚ_CÚ_reinit_DTensor_dispatch_logger)r    s    úPC:\Projects\DSCons\.venv\Lib\site-packages\torch\distributed\tensor\_dispatch.pyÚ_setLevel_and_reinitr)   7   s*   € Ý�5ÑÔÐÝ	„H×,Ò,Ñ.Ô.Ð.Ð.Ð.ó    Úoutput_specc                 óh   — 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   ?   sU   € õ ÑÔð ( Ð 3ÝÔ%Ñ'Ô'Ð'ðð ð ð ð ð ð 6Ð5Ñ7Ô7Ð7r*   Úop_callÚargs.Úkwargsc                 óŒ  — t          | j        ||¦  «        \  }}|rt          ‚|\  }}}}|                     ¦   «         t	          |¦  «        k    rh|                     ¦   «         t	          |¦  «        k    rC|�|                     ¦   «         |k    r)t          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ŒO�u V™}œ}Ò,Ð,ØÐ# v×'<Ò'<Ñ'>Ô'>À.Ò'PÐ'PåŒyŒ~Ô#×+Ò+¨FÑ3Ô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˜œ	Ò!Ð!r*   c                 ót   — t          t          j        |d         ¦  «        }|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           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 ]O}	t          |	t           ¦  «        r|                     |	¦  «         Œ-|                     t%          d¦  «        ¦  «         ŒPt          t&          j        |d         ¦  «        }
t+          |t          |¦  «        t-          |
                     ¦   «         |
                     ¦   «         |
j        ¬¦  «        ¬¦  «        }t          j        |
|d¬¦  «        }|                     ¦   «         }|
                     |¦  «         d S )	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Ô,×>Ò>¸wÈÈfÑUÔU€GÝÔ-Ý�T•&Œ\˜7Ô-Ñ.Ô.ØÔñô Ðõ �U¥6¨3 ;Ô/Ð1BÑCÔCÐØ€GÐÐ7 'Ô"6Ð7Ð7Ð7å��Wœ_Ô-¨t°A¬wÑ7Ô7¸Ô:€LØ"Ô-€OØÔ#€Dà,.ÐØ$ð 8ð 8ˆ	Ý�i¥Ñ+Ô+ð 	8Ø ×'Ò'¨	Ñ2Ô2Ð2Ð2à ×'Ò'­°©¬Ñ7Ô7Ð7Ð7å�œ t¨A¤wÑ/Ô/€MÝØÝÐ-Ñ.Ô.ÝØ×$Ò$Ñ&Ô&Ø ×'Ò'Ñ)Ô)ØÔ%ð
ñ 
ô 
ðñ ô €Dõ  œØ"ØØðñ ô Ðð
 "×-Ò-Ñ/Ô/€IØ×Ò˜	Ñ"Ô"Ð"Ð"Ð"r*   c                   ór  — 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dS )#Ú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                 ó(  — 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          j        j        t2          t          j        j        t6          t          j        j        t:          t          j        j        t>          t          j         j        t>          i| _!        d S 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__¯   sî   € Ý#5Ñ#7Ô#7ˆÔ õ ÔÔ'ÝŒLÔ ÝŒIÔÝŒNÔ"ÝŒJÔÝŒOÔ#ÝÔÔ%ÝÔÔ'ÝÔÔ+ÝŒMÔ!ÝŒNÔ"ÝŒOÔ!ð
ˆÔõ ÔÔ%Õ';ÝŒNÔ"Õ$5ÝÔÔ$Õ&9ÝÔ%Ô-Õ/KÝÔ;ÔCÕE]ÝŒOÔ#Õ%7ÝŒKÔÕ!2ÝŒKÔÕ!2ð	$
ˆÔ Ð Ð r*   c                 ó>   — t           j                             ¦   «         S r#   )r%   r&   Ú'_get_dtensor_allow_implicit_replicationrŒ   s    r(   Ú_allow_implicit_replicationz(OpDispatcher._allow_implicit_replicationÛ   s   € åŒx×?Ò?ÑAÔAÐAr*   Úvaluec                 ó@   — t           j                             |¦  «        S r#   )r%   r&   Ú'_set_dtensor_allow_implicit_replication)r�   r’   s     r(   r‘   z(OpDispatcher._allow_implicit_replicationß   s   € åŒx×?Ò?ÀÑFÔFÐFr*   r2   r3   .r4   rh   Ú	try_cachec                 ó¾  — |j         €t          d¦  «        ‚	 |r.t          ¦   «         s | j                             |j         ¦  «        }n| j                             |j         ¦  «        }t          j        rJt                               t          j
        ¦  «        r&t                               d|j         |j        ¦  «         |S # t          $ rj t          j                             |                     ¦   «         t          j        j        j        ¦  «        r" |j        |i |¤Ž}|t*          u rt          d ‚|cY S ‚ t,          $ r!}t/          |› d|j         p|› �¦  «        |‚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ã   sŠ  € ð6 Œ>Ð!Ý ðOñô ð ð 	ð ð ¥Ñ!2Ô!2ð ØÔ1×GÒGÈÌÑWÔW��àÔ1×RÒRØ”Nñô �õ Œð ¥6×#6Ò#6µw´}Ñ#EÔ#Eð Ý—’ØBØ”NàÔ&ñ	ô ð ð ˆMøÝ"ð 	ð 	ð 	ÝŒx×=Ò=Ø—’‘”¥¤Ô 4Ô Nñô ð 
ð
 (�gÔ'¨Ð8°Ð8Ð8�Ø�.Ð(Ð(Ý(¨dÐ2Ø�
�
�
àÝð 	ð 	ð 	ÝØÐUÐU¸'¼.Ð:SÈGÐUÐUñô àðøøøøð	øøøs   ˜B&B? Â?A0EÄ1
EÄ;EÅEc                 óŠ
  ‡— |j         }|€t          d¦  «        ‚|€t          d¦  «        ‚t          ¦   «         }|�!|j        �|                     |j        ¦  «         |j        }|                     ¦   «         }d }|�r|j        r[|j        €t          ‚t          |j        ¦  «        5  |  
                    ||j        |j        ¦  «         d d d ¦  «         n# 1 swxY w Y   |j        r=t          j        t          t           t"                   |j        ¦  «        |j        ¦  «        n|j        }	t          t&          t"          df         |	¦  «        }	|| j        v �r’t*          j        s[t/          |¦  «        rLt1          ¦   «          }
|
st2                               dd¬¦  «         t+          j        ||
¦  «        t*          _        t          t8          j        |d         ¦  «        t          t<          j        |	d         ¦  «        }}|j          !                    dd ¦  «        }|�!tE          |t<          j#        ¦  «        st          ‚t*          j        �re|j$        �s]t*          j        j%        �rK|€9|j&        j'        d	k    s)t1          ¦   «         s”tO          |¦  «        t<          j        uryt*          j         (                    |j)        |¬
¦  «        5  t          |j        ¦  «        5   ||	i |j         ¤Ž}d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   �n.tE          t*          j        t*          j        ¦  «        st          ‚t*          j         *                    |j)        ¦  «        \  }}t          |j        ¦  «        5  tW          |||g|	¢R i |j         ¤Ž}d d d ¦  «         n# 1 swxY w Y   �n—t          |j        ¦  «        5   ||	i |j         ¤Ž}d d d ¦  «         n# 1 swxY w Y   �n\|j        r[|j        �T|j        j,        |k    rDt          |j        ¦  «        5   |j        j,        |	i |j         ¤Ž}d d d ¦  «         n# 1 swxY w Y   nút          |j        ¦  «        5   ||	i |j         ¤Ž}d d d ¦  «         n# 1 swxY w Y   nÀ|j        }|j-        j.        }|€d }n¨dt^          dt<          j        fd„ŠtE          |t^          ¦  «        r ‰|¦  «        }nptE          |t`          ¦  «        r[ˆfd„|D ¦   «         }tE          |t           ¦  «        st          ‚d |v r-tc          |d         j'        ¦  «        }te          d|› d�¦  «        ‚|S )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         �W| 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Ë  ss   € ØÔ'Ð3Ø $Ô 0Ô 6˜Ø $Ô 0Ô 6˜Ý˜u™:œ:¨š?˜?å#(¤;¨r¸Ð#?Ñ#?Ô#?Ð?õ $)¤<°¸%Ð#@Ñ#@Ô#@Ð@å*¨dÐ+LÐ+LÐ+LÑMÔMÐMr*   c                 ó.   •— g | ]}|� ‰|¦  «        nd ‘ŒS r#   r³   )Ú.0Úsr¶   s     €r(   ú
<listcomp>zFOpDispatcher._dispatch_get_local_results_slow_path.<locals>.<listcomp>Ý  s9   ø€ ð %ð %ð %ØIJ¨Q¨]˜˜ qÑ)Ô)Ð)Àð%ð %ð %r*   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_listÚret_typer¶   s                      @r(   Ú%_dispatch_get_local_results_slow_pathz2OpDispatcher._dispatch_get_local_results_slow_path%  så  ø€ ð "Ô1ˆØÐ"Ý Ð!EÑFÔFÐFØˆ?Ý Ð!?Ñ@Ô@Ð@õ +Ñ,Ô,ˆ
ØÐ! oÔ&AÐ&MØ×/Ò/°Ô0KÑLÔLÐLàÔ#ˆØ×:Ò:Ñ<Ô<ˆØˆØñ m	àÔ1ð ð #Ô6Ð>Ý(Ð(ÝGØ#Ô/ñô ð ð ð ×0Ò0ØØ'Ô;Ø'ÔHñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Ô)ð(•Ô%Ý��fœ wÔ'9Ñ:Ô:àÔ*ñô ð ð Ô'ð õ !%¥U­6°3¨;Ô%7Ð9JÑ KÔ KÐØ˜$Ô*Ð*Ñ*ÝÔ*ð Õ/DÀTÑ/JÔ/Jð õ *9Ñ):Ô):Ð%:�NØ)ð ÝŸšð^ð ()ð $ñ ô ð õ +1Ô*FØ˜nñ+ô +•FÔ'õ
 �œ¨$¨q¬'Ñ2Ô2Ý�œÐ'8¸Ô';Ñ<Ô<ð +�	ð (/Ô';×'?Ò'?ÀÈTÑ'RÔ'RÐ$à(Ð0Ý!Ð"6½¼ÑHÔHð 1õ )Ð(õ Ô'ñ0à+Ô3ñ0õ Ô+ÔEñ0ð -Ð8Ø*Ô1Ô6¸&Ò@Ð@å /Ñ 1Ô 1ð Aõ !% _Ñ 5Ô 5½U¼\Ð IÐ Iõ $Ô0×CÒCØ%œOÐ7Kð Dñ ô ð "ð "õ "TØ /Ô ;ñ"ô "ð "ð "ð 18°Ø%6ð1"Ø:AÔ:Nð1"ð 1" ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ùõ  *Ý"Ô/µÔ1Mñ ô  ð 1õ #1Ð0å"Ô/×DÒDÀYÄ_ÑUÔUñ ;Ð)¨?õ PØ+Ô7ñô ð 	ð 	õ -?Ø 1Ø /Ø 'ð-ð "3ð	-ð -ð -ð
 #*Ô"6ð-ð -˜Mð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ùõ LØ'Ô3ñô ð ð ð )0¨Ø.ð)Ø29Ô2Fð)ð )˜ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ùð $Ô6ðà'Ô;ÐGØ'Ô;Ô>À'ÒIÐIõ LØ'Ô3ñô ð ð ð )O¨Ô(KÔ(NØ.ð)Ø29Ô2Fð)ð )˜ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øõ LØ'Ô3ñô ð ð ð )0¨Ø.ð)Ø29Ô2Fð)ð )˜ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð #Ô.ˆDØ”Ô.ˆHàˆ|ð !%��ðN­ð N½¼ð Nð Nð Nð Nõ ˜d¥KÑ0Ô0ð à$2 N°4Ñ$8Ô$8�M�MÝ ¥hÑ/Ô/ð ð%ð %ð %ð %ØNRð%ñ %ô %�Mõ & mµTÑ:Ô:ð -Ý,Ð,Ø˜}Ð,Ð,Ý#& x°¤{Ô'7Ñ#8Ô#8˜Ý1ØT¨8ÐTÐTÐTñô ð ð Ðs�   Â%"CÃCÃCËLËK1Ë%LË1K5	Ë5LË8K5	Ë9LÌLÌLÍ;NÎN#Î&N#Ï OÏOÏ!OÐP=Ð=QÑQÑQ7Ñ7Q;Ñ>Q;r½   r»   rÕ   rÔ   Úis_inplace_opÚis_out_variant_opc
                 ó²  — t          ¦   «         }
|
�!|j        �|
                     |j        ¦  «         |j        €¥|t          j        j        k    r�|�t          |t          ¦  «        st          ‚t          j
        |�t          |¦  «        nd|j        ¬¦  «        }t          j        |t          j        j        ¬¦  «         t          |                     ¦   «         ¦  «        }|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 dS |	rît          |j        t0          ¦  «        s|j        fn|j        }g }d}|j        j        D ]h}|j        r_t9          t&          j        ||j                 ¦  «        }t9          t$          ||         ¦  «        |_        |                     |¦  «         |dz  }Œit?          |¦  «        dk     rt          d¦  «        ‚t?          |¦  «        dk    rt1          |¦  «        n|d         S |t          j        j        k    rt          |¦  «        ‚|                       ||j        ¦  «        }|r+|j         !                    ¦   «         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é  s¼  € õ" +Ñ,Ô,ˆ
ØÐ! oÔ&AÐ&MØ×/Ò/°Ô0KÑLÔLÐLàÔ&Ð.Ø�$œ*Ô,Ò,Ð,ð &Ð-µ¸MÍ4Ñ1PÔ1PÐ-Ý(Ð(Ý”LØ*7Ð*C•C˜Ñ&Ô&Ð&ÈØ'Ô3ðñ ô �õ ” ¥d¤mÔ&7Ð8Ñ8Ô8Ð8Ý $ Q§V¢V¡X¤X¡¤�àð 0	àÔ*Ð6Ø-Ô9�Ý! +­{Ñ;Ô;ð )Ý(Ð(Ý! $ q¤'­7¬?Ñ;Ô;ð )Ý(Ð(ð ˜”7”=Ô+¨{Ô/EÒEÐEØ œ7�Nð !,��Q””Ý2°7¸DÀ&È$ÈqÌ'ÑRÔRÐRà�tØð 	õ " /Ô"=½uÑEÔEð1�Ô,Ð.Ð.à$Ô0ð ð
 ˆGØˆHØ#œOÔ5ð "ð "�Ø”?ð "Ý!¥'¤/°6¸(¼-Ô3HÑIÔI�FÝ#'­°\À(Ô5KÑ#LÔ#L�F”LØ—N’N 6Ñ*Ô*Ð*Ø ‘M�Høå�7‰|Œ|˜aÒÐÝ$Ð%SÑTÔTÐTÝ%(¨¡\¤\°AÒ%5Ð%5•5˜‘>”>�>¸7À1¼:ÐEà�$œ*Ô,Ò,Ð,Ý$ WÑ-Ô-Ð-Ø—)’)˜M¨?Ô+FÑGÔGˆCØð  ¤×!<Ò!<Ñ!>Ô!>ð Ý2°7¸DÀ&È#ÑNÔNÐNà�
r*   Úsuggested_input_schemarÂ   c           	      óì  — t          ¦   «         }| j        �'t          t          j        |j        ¦  «        ¦  «        }n|j        }g }t          | j        ¦  «        D �]5\  }}||         }t          |t          ¦  «        rät          t          j        | j        |         ¦  «        }	||k    r¢|�|                     |||¦  «        nt          j        ¦   «         }
t#          j        ||t'          t(          | j        p|j        ¦  «        ¦  «         |
5  t/          |	||¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     |¦  «         Œð|                     |	¦  «         �Œ|r|                     |¦  «         �Œ |                     |¦  «         �Œ7|rMt3          t5          | j        ¦  «        t5          |¦  «        ¦  «        D ]}|                     ||         ¦  «         Œt          |¦  «        | _        d S 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ÑFÔFñ.ô .Ð*Ð*ð .DÔ-OÐ*à')ˆÝ$ WÔ%=Ñ>Ô>ð &	4ñ &	4‰KˆAˆxØ=¸aÔ@ÐÝ˜(¥KÑ0Ô0ð $4Ý#¥E¤L°'Ô2DÀQÔ2GÑHÔH�ØÐ/Ò/Ð/ð
 &Ð1ð #×<Ò<Ø˜xÐ)9ñô ð õ (Ô3Ñ5Ô5ð )õ 2ÔHØ à(Ý"Ý?Ø#œNÐGÐ.DÔ.Gñô ñ	ô ð ð .ð ð Ý1JØ(Ø$à,ñ	2ô 2Ð.ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð #×)Ò)Ð*@ÑAÔAÐAÐAà"×)Ò)¨,Ñ7Ô7Ð7Ñ7à3ð 4ð #×)Ò)Ð*:Ñ;Ô;Ð;Ñ;à"×)Ò)¨(Ñ3Ô3Ð3Ñ3ð ,ð 	IÝÝ�GÔ,Ñ-Ô-­sÐ3QÑ/RÔ/Rñô ð Ið I�ð ×%Ò%Ð&DÀQÔ&GÑHÔHÐHÐHå" >Ñ2Ô2ˆÔÐÐs   ÄD)Ä)D-	Ä0D-	c                 ó2   — |                       |||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ÔHÐHr*   Úcreate_schemac           
      ód  ‡— | j         j                             |d ¦  «        }|€ | j         j                             |d ¦  «        }dt          dt
          fd„Š|d uo|j        pt          ˆfd„|D ¦   «         ¦  «        }|rt          j	        |¦  «        \  }}|}	n|d }}	g }
i }g }i }d }|	D ]ð}t          |t          j        ¦  «        r>|                     |j        ¦  «         |
                     |j        ¦  «         |€|j        }ŒZt          |t"          j        ¦  «        rR|pt'          ||	¦  «        }|
                     |                      |||¦  «        ¦  «         |                     |¦  «         ŒÆ|
                     |¦  «         |                     |¦  «         Œñ|                     ¦   «         D ]“\  }}t          |t          j        ¦  «        r|j        ||<   |j        ||<   |€|j        }Œ=t          |t"          j        ¦  «        r2|pt'          ||	¦  «        }|                      |||¦  «        ||<   |||<   Œ‰|||<   |||<   Œ”|€t-          d|› d�¦  «        ‚t/          ||r7t1          ||rt          j        |
|¦  «        nt5          |
¦  «        ||¬¦  «        nd |
t5          |¦  «        ||¦  «        }|S )NÚargr!   c                 óp   — t          | t          t          f¦  «        rt          d„ | D ¦   «         ¦  «        S dS )Nc              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r#   )rd   r%   rE   )r¸   rê   s     r(   ú	<genexpr>zQOpDispatcher._unwrap_to_op_info_impl.<locals>._contains_tensor.<locals>.<genexpr>�  s.   è è € ÐJÐJ¸d�: d­E¬LÑ9Ô9ÐJÐJÐJÐJÐJÐJr*   F)rd   r^   r9   Úany)r  s    r(   Ú_contains_tensorz>OpDispatcher._unwrap_to_op_info_impl.<locals>._contains_tensor›  s;   € Ý˜#¥¥e˜}Ñ-Ô-ð KÝÐJÐJÀcÐJÑJÔJÑJÔJÐJØ�5r*   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r#   r³   )r¸   r  r  s     €r(   r  z7OpDispatcher._unwrap_to_op_info_impl.<locals>.<genexpr>¢  s/   øè è € Ð7Ð7¨3Ð!Ð! #Ñ&Ô&Ð7Ð7Ð7Ð7Ð7Ð7r*   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ˆ  sw  ø€ ð #Ô6ÔH×LÒLØ�Tñ
ô 
Ðð Ð&àÔ(ÔR×VÒVØ˜Tñô ð  ð	¥&ð 	­Tð 	ð 	ð 	ð 	ð   tÐ+ÐPÐ0CÔ0Pð8åÐ7Ð7Ð7Ð7°$Ð7Ñ7Ô7Ñ7Ô7ð 	ð ð 	.å#)Ô#6°tÑ#<Ô#<Ñ ˆI�yØ*3ˆIˆIà#'¨�yˆIà$&ˆØ+-ˆØ#%ˆ
Ø*,ˆØ*.ˆàð 	'ð 	'ˆCÝ˜#�wœÑ/Ô/ð 'Ø×!Ò! #Ô"3Ñ4Ô4Ð4Ø×"Ò" 3¤9Ñ-Ô-Ð-ØÐ'à#&¤?�LøÝ˜C¥¤Ñ.Ô.ð 'Ø+ð  Õ/FØ˜Yñ0ô 0�ð ×"Ò"Ø×>Ò>Ø  lñô ñô ð ð
 ×!Ò! #Ñ&Ô&Ð&Ð&ð ×"Ò" 3Ñ'Ô'Ð'Ø×!Ò! #Ñ&Ô&Ð&Ð&à—L’L‘N”Nð 	$ð 	$‰DˆAˆqÝ˜!�Wœ_Ñ-Ô-ð $Ø"#¤/�˜Q‘Ø#$¤7�˜aÑ ØÐ'à#$¤=�LøÝ˜A�uœ|Ñ,Ô,ð $Ø+ð  Õ/FØ˜Yñ0ô 0�ð $(×#MÒ#MØØØ ñ$ô $�˜aÑ ð
 #$�˜Q‘�ð $%�˜aÑ Ø"#�˜Q‘�àÐÝ ØG¸WÐGÐGÐGñô ð õ Øð ð�HØð !ð,•FÔ)¨+°yÑAÔAÐAå˜{Ñ+Ô+àØ/ð
ñ 
ô 
ð 
ð ØÝ�*ÑÔØØñ%
ô 
ˆð( ˆr*   ÚresrX   c                 óp  — t          | t          j        ¦  «        rb|�Dt          |t          ¦  «        st	          d|› d�¦  «        ‚t          j        | || j        ¬¦  «        S | j        dk    rt	          d¦  «        ‚| S t          | t          t          f¦  «        r�|�t          |t          t          f¦  «        st	          d|› d�¦  «        ‚g }t          | |¦  «        D ]3\  }}|                     t                               ||¦  «        ¦  «         Œ4t          | t          ¦  «        rt          |¦  «        n|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÷  sI  € å�c�5œ<Ñ(Ô(ð 	ØÐÝ! $­Ñ4Ô4ð Ý(ØdÐ]aÐdÐdÐdñô ð õ ” s¨DÀÔ@QÐRÑRÔRÐRð ”8˜q’=�=Ý(Ð)JÑKÔKÐKØ�
Ý˜�d¥E˜]Ñ+Ô+ð 	ØÐ$­°D½4Å¸-Ñ)HÔ)HÐ$Ý$Ø_ÐX\Ð_Ð_Ð_ñô ð ð ˆHÝ˜C ™œð 9ð 9‘��1à—’¥× 1Ò 1°!°QÑ 7Ô 7Ñ8Ô8Ð8Ð8å&0°µeÑ&<Ô&<ÐJ•5˜‘?”?�?À(ÐJð ˆJr*   Ú
tensor_argc           	      ó‚  — |                      ¦   «         dk    r!|j        dk    rt          j        dd¬¦  «         |                      ¦   «         dk    s| j        rTt          |t          ¦   «         f|j        z  t          |j        | 	                    ¦   «         |j
        ¬¦  «        ¬¦  «        }nt          |› d�¦  «        ‚|S )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ðPð ðñ ô ð ð ×ÒÑÔ Ò"Ð" dÔ&FÐ"å*ØÝ‘”� Ô!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   ¡   sm  € € € € € ðð ð
ð 
ð 
ð 
ðX ðB¨Tð Bð Bð Bñ „XðBð !Ô'ðG°ð G¸$ð Gð Gð Gñ (Ô'ðGð@à”Ô&ð@ð �F˜C�KÔ ð@ð �S˜&�[Ô!ð	@ð
 ð@ð, ð-@ð. 
ð/@ð @ð @ð @ðDBà”Ô&ðBð �F˜C�KÔ ðBð ð	Bð
 
ðBð Bð Bð BðHSà”Ô&ðSð �F˜C�KÔ ðSð �S˜&�[Ô!ð	Sð
 !ðSð (ðSð ðSð ðSð ðSð  ðSð 
ðSð Sð Sð Sðj ð?3Øð?3à (ð?3ð +/ð?3ð 
ð	?3ð ?3ð ?3ñ „\ð?3ðBIà”Ô&ðIð �F˜C�KÔ ðIð �S˜&�[Ô!ð	Ið
 
ðIð Ið Ið Iðmà”Ô&ðmð �F˜C�KÔ ðmð �S˜&�[Ô!ð	mð
 ðmð 
ðmð mð mð mð^ ð�&ð  ð °6ð ð ð ñ „\ðð<" à”Ô&ð" ð ”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   r4  r5  r9   r6  rÒ   rB   rã   rI   rO   rq   rs   r³   r*   r(   ú<module>rT     s‚  ðà Ð Ð Ð Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø .Ð .Ð .Ð .Ð .Ð .Ø %Ð %Ð %Ð %Ð %Ð %Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø EÐ EÐ EÐ EÐ EÐ EØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð ð ð CÐ BÐ BÐ BÐ BÐ BØ LÐ LÐ LÐ LÐ LÐ LØ FÐ FÐ FÐ FÐ FÐ Fðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø DÐ DÐ DÐ DÐ DÐ Dð.Ø1Ð1Ð1Ð1Ð1Ð1Ð1øØð .ð .ð .Ø-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð.øøøð „y„~€Ø	ˆÔ	˜8Ñ	$Ô	$€ð ”€ð/ ð /¨ð /ð /ð /ð /ð
 '€„ð8Øð8àÔ& tÔ,ð8ð 8ð 8ð 8ð"@ØŒZÔ"ð@à
�˜�Ô
ð@ð ��f�Ôð@ð @ð @ð @ð$"ØŒZÔ"ð"à
�˜�Ô
ð"ð ��f�Ôð"ð 
ð	"ð "ð "ð "ð,ØŒZÔ"ð,à
�˜�Ô
ð,ð ��f�Ôð,ð 
ð	,ð ,ð ,ð ,ð)#ØŒZÔ"ð)#à
�˜�Ô
ð)#ð ��f�Ôð)#ð 
ð	)#ð )#ð )#ð )#ðXW
 ð W
 ð W
 ð W
 ð W
 ñ W
 ô W
 ð W
 ð W
 ð W
 s   Â.B5 Â5CÃC