+
    "Ý³j–  ã                   óª  a € R t70 t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHtH	t	H
t
Ht ^ RIt^ RIHt ^ RIHt ^ RIHtHtHt . R Ot]P,                  P.                  ]P,                  P0                  P2                  0]P,                  P4                  ]P,                  P0                  P6                  0]P,                  P8                  ]P,                  P0                  P:                  0]P,                  P<                  ]P,                  P0                  P>                  ]P,                  P0                  P@                  0]P,                  PB                  ]P,                  P0                  PD                  0]P,                  PF                  ]P,                  P0                  PH                  ]P,                  P0                  PJ                  0]PL                  ]PL                  ]PN                  RR	0]PP                  ]PP                  ]PR                  R
R0.s*] ^ k R t+]+! 4       s,R R lt-R!R lt.R R lt/R t0R R lt1R"R R llt2R R lt3R R lt4R R lt5R R lt6R# )#é    N)ÚOrderedDict)ÚSequence)ÚAnyÚCallableÚOptionalÚUnion)ÚExportedProgram)ÚNode)ÚSourcePartitionÚcheck_subgraphs_connectedÚget_source_partitionsÚaddÚadd_ÚmulÚmul_c                  óP   € / p \          F  pV F  p\        V4      W&   K  	  K  	  V # ©N)Ú_EQUIVALENT_TYPESÚlist)Ú_DICTÚvaluesÚvs      Úf/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/quantization/pt2e/graph_utils.pyÚ_create_equivalent_types_dictr   +   s-   € Ø€Eß#ˆÛˆAÜ˜F“|ˆE‹Hó ñ $ð €Ló    c                ó:   € V ^8„  d   QhR\         \        ,          /# )é   Úreturn)r   Úset)Úformats   "r   Ú__annotate__r!   6   s   € ÷ ñ œd¤3�iñ r   c                  ó   € \         # r   )r   © r   r   Úget_equivalent_typesr$   6   s   € ÜÐr   c                ó<   € V f   \        R4      hV s\        4       sR# )zÆHelp function for user who wants to customize the _EQUIVALENT_TYPES and _EQUIVALENT_TYPES_DICT.
When customized_equivalent_types passes in,
re-generate _EQUIVALENT_TYPES and _EQUIVALENT_TYPES_DICT.
Nz.customized_equivalent_types should not be None)Ú
ValueErrorr   r   Ú_EQUIVALENT_TYPES_DICT)Úcustomized_equivalent_typess   &r   Úupdate_equivalent_types_dictr)   :   s'   € ð
 #Ò*ÜÐIÓJÐJð 4ÐÜ:Ó<Òr   c                ó:   € V ^8„  d   QhR\         \        ,          /# )r   Ú
partitions)r   r   )r    s   "r   r!   r!   G   s   € ÷ ñ ¤x´Õ'@ñ r   c                 óP   € R pV  F  pVe   \        W4      '       g    R# TpK  	  R# )NFT)r   )r+   Úprev_partitionÚ	partitions   &  r   Ú_partitions_sequentialr/   G   s6   € Ø€NÛˆ	ØÒ%Ô.GØ÷/
ò /
ò Ø"Šñ  ñ r   c                 óZ   € V .pV \         9   d   VP                  \         V ,          4       V# r   )r'   Úextend)Úpartition_typeÚmatching_typess   & r   Ú_get_matching_typesr4   R   s-   € Ø$Ð%€NØÔ/Ô/Ø×ÑÔ4°^ÕDÔEØÐr   c                ó:   € V ^8„  d   QhR\         \        ,          /# )r   Úpartition_types)r   r   )r    s   "r   r!   r!   Y   s   € ÷ ñ ¬$¬s­)ñ r   c                 óš   € \        4       pV  F:  p\        V4      p\        V4      p\        W,          4      ^ 8”  d    R# W,          pK<  	  R# )r   FT)r   r4   Úlen)r6   Úpartition_types_setr2   r3   Úmatching_types_sets   &    r   Ú_valid_type_sequencer;   Y   sK   € Ü›%ÐÛ)ˆÜ,¨^Ó<ˆÜ  Ó0ÐÜÐ"Õ7Ó8¸1Ô<ÚØÕ1Òñ *ñ r   c          	      ó´   € V ^8„  d   QhR\         P                  P                  R\        \        ,          R\
        \        \        .\        3,          ,          /# )r   Úgmr6   Ú	filter_fn)	ÚtorchÚfxÚGraphModuler   r   r   r   r
   Úbool)r    s   "r   r!   r!   d   sD   € ÷ ñ Ü�‰×Ñðäœ#•Yðô œ¤$ ¬ Õ.Õ/ñ	r   c                 óÊ  € \        V4      '       g   \        R V R24      h\        4       pV F\  p\        V4      p\	        V P
                  Wc4      p\        \        P                  P                  VP                  4       4      4      WE&   K^  	  \        VP                  4       4      p\        P                  ! V!  p	V	 U
u. uF  p
\        V
4      '       g   K  V
NK  	  pp
V# u up
i )zInvalid partition types: z*. Each type in the sequence must be unique)r;   r&   r   r4   r   Úgraphr   Ú	itertoolsÚchainÚfrom_iterabler   Úproductr/   )r=   r6   Úinclude_functional_equivalentr>   Útyped_partitionsr2   Útypes_to_matchr+   Útyped_partitions_listÚfusion_candidatesÚ	candidateÚfused_partitionss   &&&&        r   Úfind_sequential_partitionsrP   d   så   € ô   ×0Ò0ÜØ'¨Ð'8Ð8bÐcó
ð 	
ô ALÃÐÛ)ˆÜ,¨^Ó<ˆÜ*¨2¯8©8°^ÓOˆ
Ü+/Ü�O‰O×)Ñ)¨*×*;Ñ*;Ó*=Ó>ó,
ÐÓ(ñ *ô !Ð!1×!8Ñ!8Ó!:Ó;ÐÜ!×)Ò)Ð+@ÑAÐñ +óá*ˆIÜ! )×,÷ 	ˆ	Ù*ð ð ð
 Ðùòs   Â>C ÃC c                ó  € V ^8„  d   QhR\         P                  P                  R\         P                  P                  R\        R\
        \        \         P                  P                  \         P                  P                  3,          /# )r   Úgraph_moduleÚnodeÚ	arg_indexr   )	r?   r@   rA   r
   ÚintÚtupleÚstrÚnnÚModule)r    s   "r   r!   r!   �   sZ   € ÷ 	/ñ 	/Ü—(‘(×&Ñ&ð	/Ü.3¯h©h¯m©mð	/ÜHKð	/ä
Œ3”—‘—‘¤§¡§¡Ð.Õ/ñ	/r   c                 ó<  € VP                   V,          p\        V\        P                  P                  4      '       g   Q hVP
                  R 8X  g   Q h\        VP                  \        4      '       g   Q hV P                  VP                  4      pVP                  WA3# )Úget_attr)	ÚargsÚ
isinstancer?   r@   r
   ÚopÚtargetrW   Úget_submodule)rR   rS   rT   Úsubmod_nodeÚ	submodules   &&&  r   Ú_get_submodulerc   �   s   € ð —)‘)˜IÕ&€KÜ�k¤5§8¡8§=¡=×1Ò1Ð1Ð1Ø�>‰>˜ZÔ'Ð'Ð'Ü�k×(Ñ(¬#×.Ò.Ð.Ð.Ø×*Ñ*¨;×+=Ñ+=Ó>€Ià×Ñ˜yÐ.Ð.r   c                óê   € V ^8„  d   QhR\         P                  P                  R\        \        \
        \         P                  P                  \         P                  P                  3,          ,          /# )r   rR   r   )	r?   r@   rA   r   rV   rW   rX   rY   r
   )r    s   "r   r!   r!   �   sG   € ÷ #ñ #Ü—(‘(×&Ñ&ð#ä	Œ%””U—X‘X—_‘_¤e§h¡h§m¡mÐ3Õ
4Õ5ñ#r   c                ó  € . pV P                   P                   EFi  pVP                  R8w  d   K  VP                  \        P
                  P                  P                  J d7   VP                  \        W^4      4       VP                  \        W^4      4       VP                  \        P
                  P                  P                  J d   VP                  \        W^ 4      4       VP                  \        P
                  P                  P                  J d   VP                  \        W^ 4      4       VP                  \        P
                  P                  P                  J g   EKN  VP                  \        W^4      4       EKl  	  V# )ac  
Returns a list of submodules used for control flow operations
(torch.ops.higher_order.cond/map) that are in the given toplevel graph (does not look
into submodules). Specifically, the returned value is a list containing a
tuple of (name of the submodule that's stored in the graph module, the
submodule itself, and the fx node that uses this submodule).
Úcall_function)rD   Únodesr^   r_   r?   ÚopsÚhigher_orderÚcondÚappendrc   Úmap_implÚscanÚ
while_loop)rR   Úcontrol_flow_submodulesrS   s   &  r   Ú_get_control_flow_submodulesrp   �   s  € ð !ÐØ×"Ñ"×(Õ(ˆØ�7‰7�oÔ%Ùà�;‰;œ%Ÿ)™)×0Ñ0×5Ñ5Ó5Ø#×*Ñ*¬>¸,ÈaÓ+PÔQØ#×*Ñ*¬>¸,ÈaÓ+PÔQØ�;‰;œ%Ÿ)™)×0Ñ0×9Ñ9Ó9Ø#×*Ñ*¬>¸,ÈaÓ+PÔQØ�;‰;œ%Ÿ)™)×0Ñ0×5Ñ5Ó5Ø#×*Ñ*¬>¸,ÈaÓ+PÔQØ�;‰;œ%Ÿ)™)×0Ñ0×;Ñ;Ö;Ø#×*Ñ*¬>¸,ÈaÓ+P×Qñ )ð #Ð"r   c                ó~   € V ^8„  d   QhR\         \        \        P                  P                  3,          R\
        RR/# )r   ÚmodelÚnode_opr   N)r   r	   r?   r@   rA   r   )r    s   "r   r!   r!   ©   s8   € ÷ .ñ .Ü”¤%§(¡(×"6Ñ"6Ð6Õ7ð.ÜBJð.à	ñ.r   c                óì  € \        V \        \        P                  P                  34      '       g   Q R\        V 4       24       h\        V \        4      '       d   V P                  MT pV.pV'       d|   VP                  ^ 4      pVP                  P                   F  pVP                  R9   d   K  V! V4       K   	  \        V4       UUu. uF  w  rgpVNK
  	  pppVP                  V4       Kƒ  R# u uppi )z9Traverse the graph module and apply node_op to each node.z-Expected GraphModule or ExportedProgram, got N)ÚoutputÚplaceholder)r]   r	   r?   r@   rA   ÚtyperR   ÚpoprD   rg   r^   rp   r1   )	rr   rs   r=   ÚqueueÚcurrent_graph_modulerS   Ú_rb   ro   s	   &&       r   Úbfs_trace_with_node_processr|   ©   sá   € ô
 �eœo¬u¯x©x×/CÑ/CÐD×EÒEð Ø
7¼¸U»°}ÐEóÐEô  *¨%´×AÒAˆ×	Ò	Àu€BØˆD€Eß
Ø$Ÿy™y¨›|ÐØ(×.Ñ.×4Ô4ˆDØ�w‰wÐ3Ô3Ùá�DŽMñ	 5ô $@Ð@TÔ#Uô#
á#U‘�˜aó Ù#Uð 	 ñ #
ð 	�‰Ð,Ö-ñ ùó#
s   Ã
C0c                óT   € V ^8„  d   QhR\         R\        \         ,          R,          /# )r   rS   r   N)r
   r   )r    s   "r   r!   r!   Â   s#   € ÷ ñ ¤ð ¬$¬t­*°tÕ*;ñ r   c                ó¼  € V .pV .pV'       dÎ   VP                  4       p \        V P                  4      \        V P                  P	                  4       4      ,           pV Fx  p\        V\        4      '       g   K  VP                  R8X  d    R# VP                  V4       VP                  R8X  d   VP                  \        J d   Kg  VP                  V4       Kz  	  KÕ  V# )z@Trace a node's producer chain until input or getattr is reached.rv   Nrf   )rx   r   r\   Úkwargsr   r]   r
   r^   rk   r_   Úgetattr)rS   rg   ÚfrontierÚall_argsÚargs   &    r   Úcollect_producer_nodesr„   Â   s¡   € àˆF€EØˆv€Hß
Ø�|‰|‹~ˆÜ˜Ÿ	™	“?¤T¨$¯+©+×*<Ñ*<Ó*>Ó%?Õ?ˆÛˆCÜ˜c¤4×(Ò(ÙØ�v‰v˜Ô&âØ�L‰L˜ÔØ—F‘F˜oÔ-°#·*±*ÄÕ2GØ—‘ Ö$ó ð €Lr   c                óV   € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   # )r   r   )Ú__conditional_annotations__r   r   )r    s   "r   r!   r!      s"   € × Ñ ÷.	ò 	”4œ•9ñ 	ò/ r   )rP   r$   r)   r|   r„   r   )TN)8r†   rE   ÚoperatorÚcollectionsr   Úcollections.abcr   Útypingr   r   r   r   r?   Útorch.exportr	   Útorch.fxr
   Ú*torch.fx.passes.utils.source_matcher_utilsr   r   r   Ú__all__rX   ÚConv1dÚ
functionalÚconv1dÚConv2dÚconv2dÚAdaptiveAvgPool2dÚadaptive_avg_pool2dÚReLUÚreluÚrelu_ÚBatchNorm2dÚ
batch_normÚHardtanhÚhardtanhÚ	hardtanh_r   Úiaddr   Úimulr   r   r'   r$   r)   r/   r4   r;   rP   rc   rp   r|   r„   r!   )r†   s   @r   Ú<module>r       s¦  øð÷ Ð Û Ý #Ý $ß 1Ó 1ã Ý (Ý ÷ñ ò€ð ‡X�X‡_�_�e—h‘h×)Ñ)×0Ñ0Ð1Ø
‡X�X‡_�_�e—h‘h×)Ñ)×0Ñ0Ð1Ø
‡X�X×Ñ §¡×!4Ñ!4×!HÑ!HÐIØ
‡X�X‡]�]�E—H‘H×'Ñ'×,Ñ,¨e¯h©h×.AÑ.A×.GÑ.GÐHØ
‡X�X×Ñ˜5Ÿ8™8×.Ñ.×9Ñ9Ð:Ø
‡X�X×Ñ˜Ÿ™×+Ñ+×4Ñ4°e·h±h×6IÑ6I×6SÑ6SÐTØ
‡Y�Y�—‘˜hŸm™m¨U°FÐ;Ø
‡Y�Y�—‘˜hŸm™m¨U°FÐ;ð	 Ð ó 	òñ 7Ó8Ð õô
=õòõ÷õ:	/õ#õ8.÷2r   