Ë
    P/æj¨  ã                   óz  — d dl mZmZ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ÚDictÚListÚ
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    €úe/root/repos/pocs/video-evals/.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                  |Ž  d}| 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 sizeNg        Úoutput)r   Ú	propagater&   r'   r(   r   r   )r   r*   Útotal_size_of_graphr3   s       r!   r   r   2   se   € ð Ðà&Œ	�)Ó×&Ñ&¨Ñ-àÐØ—‘×%Ñ%ò <ˆØ�7‰7�hÒØà
ô +¨9°dÓ;ˆ�ð<ð r#   r3   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)r3   rB   s     r!   r   r   E   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_quantizedrH   Úelement_sizeÚtensorr   )r   r3   Útotal_num_of_elemsÚsubmodule_dictÚ	submoduleÚ
parametersr0   ÚprB   Úoutput_elemÚsize_per_elem_bytesr6   r5   s                r!   r   r   R   s  € ð Ðà‡w�w�-ÒÜ˜i×5Ñ5Ó7Ó8ˆØ" 4§;¡;Ñ/ˆ	Ø×/Ñ/Ó1ˆ
à!ò 	,‰GˆD�!Ø !§'¡'£)Ñ+Ñð	,ô " $Ó'€KØ×#Ñ#×)Ñ)Ó+€KØ˜+Ñ%Ðà×ÒÜ#×;Ñ;Ø�k×'Ñ'ô
ç
‰,‹.ñ 	ô $Ÿl™l¨2°[×5FÑ5FÔG×TÑTÓVÐØ$Ð'9Ñ9€JØ%¨Ñ3€KÜ�k :Ó.Ð.r#   r   )Útypingr   r   r   r   r   rN   Útorch.fx._compatibilityr   Útorch.fx.graphr	   Útorch.fx.graph_moduler
   Útorch.fx.noder   r   r   Útorch.fx.passes.shape_propr   Ú__all__Ústrr   r   ÚTensorr   r   r   r   r#   r!   ú<module>rb      s+  ðç 8Õ 8ã Ý 1Ý  Ý -÷ñ õ
 1ò€ñ  eÔ,ð Øð àð ð ð ð ð	 ð
 ò ó -ð ñ2  eÔ,ô�ó ó -ðñ
  eÔ,àAEñØðØ"*¨4°·±Ñ+=Ñ">ðà	òó -ðñ$  eÔ,ð	˜$ð 	 3ò 	ó -ð	ñ  eÔ,ð/ ð /°4ð /¸Jò /ó -ñ/r#   