Ë
    M²j  ã                   ón  — d dl 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j*                     dz  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Ú
NamedTupleN)Ú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(  r£t        |j                  ˆ	fd„«      }t        |j                  ˆ	fd„«      }t        |t        «      st        dt        |«      › �«      ‚t        |t        «      st        dt        |«      › �«      ‚|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 target.
    c                 ó   •— ‰|    S ©N© ©ÚnÚval_maps    €úa/var/www/html/ia-enhanced/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    zExpected tuple, got zExpected dict, got 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ÚAssertionErrorÚtypeÚ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Ô*Ü$Ð';¼DÀ»J¸<Ð%HÓIÐIÜ˜f¤dÔ+Ü$Ð':¼4À»<¸.Ð%IÓJÐJØ%×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   3   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'   r2   s      r   r   r   9   s_   € ð Ðà&Œ	�)Ó×&Ñ&¨Ñ-à—‘×%Ñ%ò <ˆØ�7‰7�hÒØà
ô +¨9°dÓ;ˆ�ð<ð r    r2   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)r2   r@   s     r   r   r   K   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_quantizedrF   Úelement_sizeÚtensorr   )r   r2   Útotal_num_of_elemsÚsubmodule_dictÚ	submoduleÚ
parametersÚ_nameÚpr@   Úoutput_elemÚsize_per_elem_bytesr5   r4   s                r   r   r   X   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   rL   Ú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>rb      s"  ðç "ã Ý 1Ý  Ý -ß /Ñ /Ý 0ò€ñ  eÔ,ð Øð àð ð ð ð ð	 ð
 ò ó -ð ñ:  eÔ,ô�ó ó -ðñ
  eÔ,à>BñØðØ"& u§|¡|Ñ"4°tÑ";ðà	òó -ðñ"  eÔ,ð	˜$ð 	 3ò 	ó -ð	ñ  eÔ,ð/ ð /°4ð /¸Jò /ó -ñ/r    