+
    –°³j#  ã                   ó8  a € R t0 t ^ RIt^ RIHtHt ^ RIHt ^ RIt^ RIH	t	 ^ RI
HtHt ^ RIHtHt ^ RIHt ^RIHt ^R	IHt . t] ^ k ]]]],          ]R,          ]3,          t]]]],          ]R,          ]]	3,          t]P6                  3R
 ltRR R lltR# )é    N)ÚCallableÚIterable)ÚAny)Ú
QConfigAny)ÚMatchAllNodeÚPattern)ÚGraphÚNode)Útype_before_parametrizations)Ú_is_observed_standalone_module)ÚQuantizeHandlerc                óÞ  a € \        V\        4      '       d,   VvrEV\        J d   \        V4      ^8w  d   \	        R4      h. pMTp. p\        V\
        4      '       d   \        V\        4      '       d   R# W8X  d   R# \        V\        4      '       d   \        VP                  4      V8”  d   R# \        V\
        4      '       db   \        V\        P                  P                  4      '       d8   VP                  R8w  d   R# \        S VP                  ,          4      V8w  d   R# M¸\!        V4      '       dZ   VP                  R8w  g   VP                  VJd   R# VP                  \        J d"   VP"                  ^,          V^,          8w  d   R# MN\        V\$        4      '       d&   VP                  R8w  g   VP                  V8w  d   R# MVP                  V8w  d   R# V'       g   R# \        V4      \        VP"                  4      8w  d   R# \&        ;QJ d3    V 3R l\)        VP"                  V4       4       F  '       d   K   R# 	  R# ! V 3R l\)        VP"                  V4       4       4      # )z&Matches a node in fx against a patternz.Expecting getattr pattern to have two elementsTFÚcall_moduleÚcall_functionÚcall_methodc              3   óD   <"  € T F  w  r\        SW^R7      x € K  	  R# 5i)é   )Úmax_usesN)Ú	_is_match)Ú.0ÚnodeÚ	arg_matchÚmoduless   &  €Úe/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/ao/quantization/fx/match_utils.pyÚ	<genexpr>Ú_is_match.<locals>.<genexpr>K   s&   øé € ð á:‰OˆDô 	�'˜4°Q×7Ñ7Û:ùs   ƒ )Ú
isinstanceÚtupleÚgetattrÚlenÚAssertionErrorÚtypeÚ
issubclassr   r
   ÚusersÚtorchÚnnÚModuleÚopr   ÚtargetÚcallableÚargsÚstrÚallÚzip)r   r   Úpatternr   Ú
self_matchÚarg_matchess   f&&&  r   r   r      sÎ  ø€ ä�'œ5×!Ò!Ø#*Ð ˆ
ØœÓ Ü�7‹|˜qÔ Ü$Ð%UÓVÐVØˆKøàˆ
Øˆä�*œd×#Ò#¬
°:¼|×(LÒ(LÙà„Ùä�dœD×!Ò!¤S¨¯©£_°xÔ%?Ùä�*œd×#Ò#¬
°:¼u¿x¹x¿¹×(OÒ(OØ�7‰7�mÔ#ÙÜ'¨°·±Õ(<Ó=ÀÔKÙð Lä	�*×	Ò	Ø�7‰7�oÔ%¨¯©¸JÓ)FÙØ�[‰[œGÓ#Ø�y‰y˜�|˜w q�zÔ)ÙøÜ	�J¤×	$Ò	$Ø�7‰7�mÔ# t§{¡{°jÔ'@Ùð (Aà	�‰˜
Ô	"ÙçÙä
ˆ;Óœ3˜tŸy™y›>Ô)Ùç‹3ô ä" 4§9¡9¨kÔ:ó�3Œ3ð Š3ð ˆ3ô ä" 4§9¡9¨kÔ:óó ð ó    c                ó”  € V ^8„  d   QhR\         R\        \        \        P                  P
                  3,          R\        \        \        3,          R\        \        \        3,          R\        \        ,          R,          R\        \        ,          R,          R\        \        ,          R,          R	\        \        \        3,          /# )
é   Úgraphr   ÚpatternsÚroot_node_getter_mappingÚstandalone_module_namesNÚstandalone_module_classesÚcustom_module_classesÚreturn)r	   Údictr,   r%   r&   r'   r   r   r   Úlistr"   r   Ú_MatchResult)Úformats   "r   Ú__annotate__r@   Q   s­   € ÷ Vñ VÜðVä”#”u—x‘x—‘Ð&Õ'ðVô ”7œOÐ+Õ,ðVô #¤7¬HÐ#4Õ5ð	Vô
 "¤#�Y¨Õ-ðVô  $¤D�z¨DÕ0ðVô  ¤�9 tÕ+ðVô 
Œ#Œ|Ð
ÕñVr2   c           
     óÌ  aaaa€ Vf   . pSf   . oSf   . o/ p\        4       pV3R loV3R lo\        V P                  4       FŸ  p	V	P                  V9  g   K  V	P                  V9  g   K)  VP	                  4        Fb  w  r«VP                  V
4      p\        WV
4      '       g   K*  V	P                  V9  g   K=  . pS! W©W�V4       V! WÑV4      pT	pS! VVVVV
V4        K�  	  K¡  	  Vf   \        R4      hV P                   FU  p	V	P                  R8X  g   K  \        WP                  ,          4      V9   g   K8  V	V	R\        W‘RR7      3WyP                  &   KW  	  R VV3R	 llpV P                   Fo  p	V	P                  R8X  g   K  V! V	P                  V4      '       g$   \        WP                  ,          4      '       g   KR  V	V	R\        W‘RR
7      3WyP                  &   Kq  	  V# )a�  
Matches the nodes in the input graph to quantization patterns, and
outputs the information needed to quantize them in future steps.

Inputs:
  - graph: an fx.Graph object
  - modules: a mapping of fully qualified module name to instance,
      for example, {'foo': ModuleFoo, ...}
  - patterns: a mapping from a tuple of nodes in reverse order to
      uninitialized QuantizeHandler subclass.

Outputs a map of
  node_name ->
    (node, matched_values, matched_pattern, QuantizeHandler instance,
     qconfig)

For example, {
  'relu_1': (relu_1, [relu_1], torch.nn.functional.relu,
             <CopyNodeQuantizeHandler instance>, QConfig(...)),
  ...
}
Nc           	      ó²   <€ \        V\        4      '       d   V VVV3WP                  &   R # \        V\        4      '       g   R # V F  pS! WWcWE4       K  	  R # )N)r   r
   Únamer   )Ú	last_nodeÚ	match_mapÚnode_patternÚmatched_node_patternr/   Úmatch_valueÚnÚ#_recursive_record_node_in_match_maps   &&&&&& €r   rJ   Ú:_find_matches.<locals>._recursive_record_node_in_match_map|   sY   ø€ ô �l¤D×)Ò)àØ$ØØð	,ˆI×'Ñ'Ó(ô ˜L¬(×3Ò3Ùã!�Ù3Ø¨!À7öó "r2   c                 óÖ  <€ \        V \        4      '       dÁ   V vrV\        V4      ^8H  p. pS! WQW#V4       V ^ ,          \        Jd)   \	        WaP
                  4       F  w  ršS! WšWV4       K  	  \        V4      ^8”  dA   V'       d   VP                  \        V4      4       R# VP                  \        V4      4       R# VP                  V^ ,          4       R# VP                  V4       R# )r   N)	r   r   r    r   r.   r+   ÚappendÚextendr=   )r/   r   rD   rG   rE   Úsr+   Úis_single_argÚcurrent_node_patternÚ
subpatternÚargÚrecord_matchs   &&&&&      €r   rT   Ú#_find_matches.<locals>.record_match�   sÀ   ø€ Ü�gœu×%Ò%ØˆHˆAÜ ›I¨™NˆMØ/1Ð Ù˜ )À9ÔMØ�q�z¤Ó(Ü'*¨4·±Ö';‘O�JÙ  °$ÈiÖXñ (<äÐ'Ó(¨1Ô,÷ !Ø(×/Ñ/´Ð6JÓ0KÖLà(×/Ñ/´Ð5IÓ0JÖKà$×+Ñ+Ð,@ÀÕ,CÖDà ×'Ñ'¨Ö-r2   úmodules must not be Noner   T)Úis_custom_modulec                óz   € V ^8„  d   QhR\         R\        \         \        P                  P                  3,          /# )r4   Únode_targetr   )r,   r<   r%   r&   r'   )r?   s   "r   r@   Ú#_find_matches.<locals>.__annotate__Ð   s,   € ÷ 
ñ 
¬#ð 
¼¼SÄ%Ç(Á(Ç/Á/Ð=QÕ8Rñ 
r2   c                 ód   <€ Vf   \        R4      hV S9   ;'       g    \        W,          4      S9   # )NrV   )r!   r"   )rY   r   r9   r8   s   &&€€r   Úis_standalone_moduleÚ+_find_matches.<locals>.is_standalone_moduleÐ   s?   ø€ ØŠ?Ü Ð!;Ó<Ð<àÐ2Ñ2÷ )ð )Ü�GÕ(Ó)Ø(ñ)ð	
r2   )r\   )ÚsetÚreversedÚnodesrC   ÚitemsÚgetr   r!   r(   r"   r)   r   r   )r5   r   r6   r7   r8   r9   r:   rE   Úall_matchedr   r/   Úquantize_handler_clsÚroot_node_getterrG   Úquantize_handlerrD   r\   rJ   rT   s   &&&&ff&          @@r   Ú_find_matchesrg   Q   sË  û€ ð> Ò$Ø "Ðà Ò(Ø$&Ð!àÒ&Ø"$Ðà)+€IÜ›E€Kõõ&.ô4 ˜Ÿ™Ö%ˆØ�9‰9˜IÖ%¨$¯)©)¸;Ö*FØ19·±Ö1AÑ-�Ø#;×#?Ñ#?ÀÓ#HÐ Ü˜W¨G×4Ô4¸¿¹È)Ö9SØ79Ð(Ù  °ÈIÔVÙ';Ø,Ð7Gó(Ð$ð !%�Iá7Ø!Ø!à,à,ØØ(ô	ò ó) 2Bñ &ð2 ‚ÜÐ7Ó8Ð8Ø—”ˆà�G‰G�}Ö$Ü�WŸ[™[Õ)Ó*Ð.CÖCð ØØÜ ÀÔEð	$ˆI—i‘iÓ ñ ÷
ñ 
ð —”ˆØ�7‰7�mÖ#Ù  §¡¨g×6Ò6Ü-¨g·k±kÕ.B×CÔCð ØØÜ ÀDÔIð	$ˆI—i‘iÓ ñ ð Ðr2   c                óV   € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   # )r4   Ú__all__)Ú__conditional_annotations__r=   r,   )r?   s   "r   r@   r@      s   € ‡
�
÷ Ò ŒŒc�Ñ ò r2   )NNN)rj   ÚsysÚcollections.abcr   r   Útypingr   r%   Útorch.ao.quantization.qconfigr   Útorch.ao.quantization.utilsr   r   Útorch.fx.graphr	   r
   Útorch.nn.utils.parametrizer   Úgraph_moduler   rf   r   ri   r   r=   r>   Ú_MatchResultWithQConfigÚmaxsizer   rg   r@   )rj   s   @r   Ú<module>ru      s‰   øðç 
€
ß .Ý ã Ý 4ß =ß &Ý Cå 8Ý -ð €Ó ð �T˜4 �: w°¥~°ÐFÕG€àØˆ$ˆt�*�g •n o°zÐAõÐ ð 03¯{©{ô /÷dVñ Vr2   