§
    Ÿ²Åj`  ã                   ót   — d dl Z d dl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  G d„ de¦  «        Zd	„ ZdS )
é    N)ÚFakeTensorProp)ÚCapabilityBasedPartitioner)ÚOperatorSupport)ÚCALLABLE_NODE_OPS)Ú_pytreec                   ó2   — e Zd Zdej        j        defd„ZdS )ÚCudaGraphsSupportÚnodeÚreturnc                 óT  ‡— |j         t          vrdS |j        t          j        j        j        j        fv rdS |j        t          j	        fv rdS dŠd„ }ˆfd„}|j
        D ]%}t          j        | ||j        ¦  «        ¦  «         Œ&t          j        | ||j        ¦  «        ¦  «         ‰ S )NFTc                 ó*   — d| v r| d         n| d         S )NÚvalÚfake_result© )Úmetas    úTC:\Projects\Historical\venv\Lib\site-packages\torch/fx/passes/backends/cudagraphs.pyÚmeta_fkz4CudaGraphsSupport.is_node_supported.<locals>.meta_fk   s   € Ø"'¨4 - -�4˜”;�;°T¸-Ô5HÐHó    c                 óh   •— t          | t          j        ¦  «        r| j        j        dk    rdŠd S d S d S )NÚcudaT)Ú
isinstanceÚtorchÚTensorÚdeviceÚtype)ÚtÚfound_not_cudas    €r   Úfind_not_cudaz:CudaGraphsSupport.is_node_supported.<locals>.find_not_cuda   s>   ø€ å˜!�Uœ\Ñ*Ô*ð &¨q¬x¬}ÀÒ/FÐ/FØ!%���ð&ð &Ð/FÐ/Fr   )Úopr   Útargetr   ÚopsÚatenÚembedding_dense_backwardÚdefaultÚoperatorÚgetitemÚall_input_nodesÚpytreeÚ	tree_map_r   )ÚselfÚ
submodulesr
   r   r   Únr   s         @r   Úis_node_supportedz#CudaGraphsSupport.is_node_supported   sÛ   ø€ ØŒ7Õ+Ð+Ð+Ø�5àŒ;�5œ9œ>ÔBÔJÐKÐKÐKØ�5àŒ;�8Ô+Ð,Ð,Ð,Ø�4àˆð	Ið 	Ið 	Ið	&ð 	&ð 	&ð 	&ð 	&ð
 Ô%ð 	=ð 	=ˆAÝÔ˜]¨G¨G°A´F©O¬OÑ<Ô<Ð<Ð<åÔ˜¨¨°´	Ñ(:Ô(:Ñ;Ô;Ð;ð
 "Ð!Ð!r   N)Ú__name__Ú
__module__Ú__qualname__r   ÚfxÚNodeÚboolr-   r   r   r   r	   r	      s:   € € € € € ð"°%´(´-ð "ÀDð "ð "ð "ð "ð "ð "r   r	   c                 óÆ   —  t          | ¦  «        j        |Ž  t          ¦   «         }t          | |d¬¦  «        }|                     ¦   «         }|                     |¦  «        }|S )zÉ
    Partition an FX graph into sub-GraphModules that can be validly run under
    CUDA graphs.  For a subgraph to be runnable under CUDA, all of the operations
    must involve CUDA tensors only/
    T)Úallows_single_node_partition)r   Ú	propagater	   r   Úpropose_partitionsÚfuse_partitions)ÚgmÚinputsÚsupported_opsÚpartitionerÚ
partitionsÚfused_graphs         r   Úpartition_cudagraphsr?   -   sp   € ð !…N�2ÑÔÔ  &Ð)Ð)Ý%Ñ'Ô'€Mõ -Ø
ˆM¸ðñ ô €Kð ×/Ò/Ñ1Ô1€JØ×-Ò-¨jÑ9Ô9€KØÐr   )r%   r   Ú torch.fx.passes.fake_tensor_propr   Ú!torch.fx.passes.infra.partitionerr   Ú torch.fx.passes.operator_supportr   Útorch.fx.passes.tools_commonr   Útorch.utilsr   r(   r	   r?   r   r   r   ú<module>rE      sµ   ðà €€€à €€€Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø HÐ HÐ HÐ HÐ HÐ HØ <Ð <Ð <Ð <Ð <Ð <Ø :Ð :Ð :Ð :Ð :Ð :Ø )Ð )Ð )Ð )Ð )Ð )ð"ð "ð "ð "ð "˜ñ "ô "ð "ðBð ð ð ð r   