Ë
    f^(h|  ã                   ór  — d dl mZmZm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mZmZ d dlmZ g d¢Z ed	¬
«      de
dedededef
d„«       Z ed	¬
«       G d„ de«      «       Z ed	¬
«      	 dde
deeej,                        ddfd„«       Z ed	¬
«      dedefd„«       Z ed	¬
«      de
dedefd„«       Zy)é    )ÚAnyÚ
NamedTupleÚOptionalN)Úcompatibility)ÚGraph)ÚGraphModule)Úmap_argÚNodeÚTarget)Ú	ShapeProp)Úreplace_target_nodes_withÚ
size_bytesÚget_size_of_all_nodesÚget_tensor_metaÚget_size_of_nodeF)Úis_backward_compatibleÚ	fx_moduleÚold_opÚ
old_targetÚnew_opÚ
new_targetc                 óÀ  ‡	— t        «       }i Š	| j                  j                  D ]±  }|j                  |k(  rˆ|j                  |k(  ryt        |j                  ˆ	fd„«      }t        |j                  ˆ	fd„«      }t        |t        «      sJ ‚t        |t        «      sJ ‚|j                  |||||j                  «      ‰	|<   Œš|j                  |ˆ	fd„«      ‰	|<   Œ³ || _        y)z’Modifies all nodes in fx_module.graph.nodes which match the specified op code and target,
    and updates them to match the new op code and targetc                 ó   •— ‰|    S ©N© ©ÚnÚval_maps    €ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/fx/passes/graph_manipulation.pyú<lambda>z+replace_target_nodes_with.<locals>.<lambda>#   s   ø€ °¸±
€ ó    c                 ó   •— ‰|    S r   r   r   s    €r   r    z+replace_target_nodes_with.<locals>.<lambda>$   s   ø€ °G¸A±J€ r!   c                 ó   •— ‰|    S r   r   r   s    €r   r    z+replace_target_nodes_with.<locals>.<lambda>+   s   ø€ ÀÈÁ
€ r!   N)r   ÚgraphÚnodesÚopÚtargetr	   ÚargsÚkwargsÚ
isinstanceÚtupleÚdictÚcreate_nodeÚnameÚ	node_copy)
r   r   r   r   r   Ú	new_graphÚnoder(   r)   r   s
            @r   r   r      sÊ   ø€ ô “€IØ "€GØ—‘×%Ñ%ò 
LˆØ�7‰7�fÒ §¡°
Ò!:Ü˜4Ÿ9™9Ó&:Ó;ˆDÜ˜TŸ[™[Ó*>Ó?ˆFÜ˜d¤EÔ*Ð*Ð*Ü˜f¤dÔ+Ð+Ð+Ø%×1Ñ1Ø˜
 D¨&°$·)±)óˆG�DŠMð &×/Ñ/°Ó6JÓKˆG�DŠMð
Lð  €I…Or!   c                   ó"   — e Zd ZU eed<   eed<   y)r   Úoutput_sizeÚ
total_sizeN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__r   r!   r   r   r   /   s   … àÓØ„Or!   r   r(   Úreturnc                 ó²   — |� t        | «      j                  |Ž  | j                  j                  D ]$  }|j                  dk(  r yt        | |«      |_        Œ& y)zÈGiven a fx graph module, update each node with its total size (weights + bias + output)
    and its output_size(output). For a non-module node, the total size is the output size.
    return total sizeNÚoutput)r   Ú	propagater$   r%   r&   r   r   )r   r(   r1   s      r   r   r   5   s_   € ð Ðà&Œ	�)Ó×&Ñ&¨Ñ-à—‘×%Ñ%ò <ˆØ�7‰7�hÒØà
ô +¨9°dÓ;ˆ�ð<ð r!   r1   c                 ó^   — | j                   j                  d«      }|st        d| › d�«      ‚|S )NÚtensor_metazNode zQ has no tensor metadata associated with it! Check that shape propagation has run.)ÚmetaÚgetÚRuntimeError)r1   r?   s     r   r   r   G   s=   € à—)‘)—-‘- Ó.€KáÜØ�D�6ð 4ð 5ó
ð 	
ð
 Ðr!   c                 ó$  — d}|j                   dk(  rUt        | j                  «       «      }||j                     }|j	                  «       }|D ]  \  }}||j                  «       z  }Œ t        |«      }|j                  j                  «       }	||	z  }|j                  r0t        j                  g |j                  ¬«      j                  «       }
n/t        j                  g |j                  ¬«      j                  «       }
|
|z  }|
|	z  }t        ||«      S )zŠGiven a node with node.dtype and node.shape, return its total size and its output size.
    total_size = weights + bias + output_size
    r   Úcall_module)Údtype)r&   r,   Únamed_modulesr'   Únamed_parametersÚnumelr   ÚshapeÚis_quantizedÚtorchÚ_empty_affine_quantizedrE   Úelement_sizeÚtensorr   )r   r1   Útotal_num_of_elemsÚsubmodule_dictÚ	submoduleÚ
parametersÚ_nameÚpr?   Úoutput_elemÚsize_per_elem_bytesr4   r3   s                r   r   r   T   s  € ð Ðà‡w�w�-ÒÜ˜i×5Ñ5Ó7Ó8ˆØ" 4§;¡;Ñ/ˆ	Ø×/Ñ/Ó1ˆ
à"ò 	,‰HˆE�1Ø !§'¡'£)Ñ+Ñð	,ô " $Ó'€KØ×#Ñ#×)Ñ)Ó+€KØ˜+Ñ%Ðà×ÒÜ#×;Ñ;Ø�k×'Ñ'ô
ç
‰,‹.ñ 	ô $Ÿl™l¨2°[×5FÑ5FÔG×TÑTÓVÐØ$Ð'9Ñ9€JØ%¨Ñ3€KÜ�k :Ó.Ð.r!   r   )Útypingr   r   r   rK   Útorch.fx._compatibilityr   Útorch.fx.graphr   Útorch.fx.graph_moduler   Útorch.fx.noder	   r
   r   Útorch.fx.passes.shape_propr   Ú__all__Ústrr   r   ÚlistÚTensorr   r   r   r   r!   r   ú<module>ra      s%  ðç ,Ñ ,ã Ý 1Ý  Ý -ß /Ñ /Ý 0ò€ñ  eÔ,ð Øð àð ð ð ð ð	 ð
 ò ó -ð ñ2  eÔ,ô�ó ó -ðñ
  eÔ,àAEñØðØ"*¨4°·±Ñ+=Ñ">ðà	òó -ðñ"  eÔ,ð	˜$ð 	 3ò 	ó -ð	ñ  eÔ,ð/ ð /°4ð /¸Jò /ó -ñ/r!   