§
    ŠŠtj˜L  ã                   ó  — d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ  ej        e¦  «        Ze                     ej        ¦  «          G d„ d¦  «        Z G d	„ d
¦  «        Z G d„ d¦  «        ZdS )é    N)ÚIterableÚSequence)ÚGraphModule)Ú_get_qualified_nameÚNode)ÚOperatorSupportBase)Úfuse_by_partitionsc            	       óœ   — e Zd Z	 	 	 ddedz  dee         dz  dee         dz  ddfd„Zdefd„Zdded	edz  ddfd
„Z	deddfd„Z
defd„ZdS )Ú	PartitionNÚidÚnodesÚnode_ordersÚreturnc                 óP  — || _         i | _        |�•|€"t                               |d ¦  «        | _        d S t	          |¦  «        }t	          |¦  «        }t          |¦  «        t          |¦  «        k    rt          d¦  «        ‚t          t          ||¦  «        ¦  «        | _        d S d S )Nz/nodes and node_orders must have the same length)r   r   ÚdictÚfromkeysÚlistÚlenÚAssertionErrorÚzip)Úselfr   r   r   Ú
nodes_listÚnode_orders_lists         ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/fx/passes/infra/partitioner.pyÚ__init__zPartition.__init__   s§   € ð ˆŒØ-/ˆŒ
ØÐØÐ"Ý!Ÿ]š]¨5°$Ñ7Ô7�”
�
�
å! %™[œ[�
Ý#'¨Ñ#4Ô#4Ð Ý�z‘?”?¥cÐ*:Ñ&;Ô&;Ò;Ð;Ý(ØIñô ð õ "¥# jÐ2BÑ"CÔ"CÑDÔD�”
�
�
ð Ðó    c                 ó*   — t          | j        ¦  «        S ©N)Ústrr   ©r   s    r   Ú__repr__zPartition.__repr__&   ó   € Ý�4”:‰ŒÐr   ÚnodeÚ
node_orderc                 ó>   — | j                              ||i¦  «         d S r   )r   Úupdate)r   r#   r$   s      r   Úadd_nodezPartition.add_node)   s#   € ØŒ
×Ò˜4 Ð,Ñ-Ô-Ð-Ð-Ð-r   c                 ó   — | j         |= d S r   ©r   ©r   r#   s     r   Úremove_nodezPartition.remove_node,   s   € ØŒJ�tÐÐÐr   c                 ó*   — t          | j        ¦  «        S r   )r   r   r    s    r   ÚsizezPartition.size/   r"   r   )NNNr   )Ú__name__Ú
__module__Ú__qualname__Úintr   r   r   r   r!   r'   r+   r-   © r   r   r   r      s  € € € € € ð Ø'+Ø,0ð	Eð Eà�$‰JðEð ˜Œ~ Ñ$ðEð ˜c”] TÑ)ð	Eð
 
ðEð Eð Eð Eð(˜#ð ð ð ð ð.ð .˜Tð .¨s°T©zð .ÀTð .ð .ð .ð .ð ð ¨ð ð ð ð ð�cð ð ð ð ð ð r   r   c                   ó:   — e Zd Zdeddfd„Zdedee         fd„ZdS )Ú_DependencyViewerÚgraph_moduler   Nc                 ó$  — t          j        t          ¦  «        | _        t	          |j        j        ¦  «        D ]W}|j        D ]M}| j        |                              |¦  «         | j        |          	                    | j        |         ¦  «         ŒNŒXd S r   )
ÚcollectionsÚdefaultdictÚsetÚdownstreamsÚreversedÚgraphr   ÚusersÚaddr&   )r   r5   r#   Úoutput_nodes       r   r   z_DependencyViewer.__init__4   sœ   € Ý&Ô2µ3Ñ7Ô7ˆÔå˜\Ô/Ô5Ñ6Ô6ð 	Mð 	MˆDØ#œzð Mð M�àÔ  Ô&×*Ò*¨;Ñ7Ô7Ð7ØÔ  Ô&×-Ò-¨dÔ.>¸{Ô.KÑLÔLÐLÐLðMð	Mð 	Mr   r#   c                 ó   — | j         |         S r   )r:   r*   s     r   Údownstreams_ofz _DependencyViewer.downstreams_of=   s   € ØÔ Ô%Ð%r   )r.   r/   r0   r   r   r   r9   rA   r2   r   r   r4   r4   3   sb   € € € € € ðM [ð M°Tð Mð Mð Mð Mð& 4ð &¨C°¬Ið &ð &ð &ð &ð &ð &r   r4   c                   óÚ   — e Zd Z	 	 	 	 ddedededee         dz  dee         dz  ded	dfd
„Zde	d	efd„Z
d	ee         fd„Z	 ddee         ded	efd„Zdee         d	dfd„Zdded	efd„ZdS )ÚCapabilityBasedPartitionerFNr5   Úoperator_supportÚallows_single_node_partitionÚnon_compute_opsÚ!allowed_single_node_partition_opsÚskip_horizontal_fusionr   c                 ó’   — || _         || _        || _        |�|ng | _        |�|ng | _        || _        t          |¦  «        | _        d S r   )r5   rD   rE   rF   rG   rH   r4   Údependency_viewer)r   r5   rD   rE   rF   rG   rH   s          r   r   z#CapabilityBasedPartitioner.__init__B   si   € ð )ˆÔØ 0ˆÔØ,HˆÔ)Ø2AÐ2M˜˜ÐSUˆÔð 1Ð<ð .Ð-àð 	Ô.ð
 '=ˆÔ#Ý!2°<Ñ!@Ô!@ˆÔÐÐr   r#   c                 ó€   — | j                              t          | j                             ¦   «         ¦  «        |¦  «        S r   )rD   Úis_node_supportedr   r5   Únamed_modulesr*   s     r   Ú_is_node_supportedz-CapabilityBasedPartitioner._is_node_supportedW   s9   € ØÔ$×6Ò6Ý�Ô"×0Ò0Ñ2Ô2Ñ3Ô3°Tñ
ô 
ð 	
r   c           	      óÚ	  ‡ ‡‡‡‡‡‡— t          j        t          ¦  «        Ši Ši Ši }i Ši Št          j        ¦   «         }dt
          t                   dt
          t                   dt          t                   fˆˆˆ fd„Šdt          dt          dt          t          t          f         fˆˆˆˆˆˆˆ fd„}dt          d	t          d z  d
t          d z  dd fˆˆˆˆˆfd„}t                               d¦  «         t          t          ‰ j        j        j        ¦  «        ¦  «        D �]\  }}i }d}‰                      |¦  «        r1|‰vr-t%          |¦  «        }	|	||<   |	‰|	<    ||||	¦  «         d ||	<   d}‰ j        r|r|j        D ]}
|
‰v rd |‰|
         <   Œn@t+          ‰                     ¦   «         t/          j        d¦  «        ¬¦  «        D ]
\  }	}d ||	<   Œt3          |                     ¦   «         ¦  «        }t7          |¦  «        dk    r$|d         }|dd …         D ]} |||¦  «        \  }}Œ�Œ‰                     ¦   «         D ]O}t;          t+          |j                             ¦   «         t/          j        d¦  «        d¬¦  «        ¦  «        |_        ŒPt                               d¦  «         	 i }‰ j        j        j        D ]t}d}|j        D ])}
|
j        dk    st?          |
j         ¦  «        dk    rd} nŒ*|r=‰ !                    |¦  «        }|j        D ] }
‰ !                    |
¦  «        |k    r|||
<   Œ!Œu|sn(|                     ¦   «         D ]\  }} ||d |¦  «         ŒŒ³‰ j"        �st                               d¦  «         ddh}| #                    t          ‰ j$        ¦  «        ¦  «        }g }‰                     ¦   «         D ]ª\  }}d}|j        D ]€}|j        dk    rstK          |j         ¦  «        s$tM          dtO          |j         ¦  «        › �¦  «        ‚t?          |j         ¦  «        |vr|dz  }t?          |j         ¦  «        ‰ j(        v r|dz  }Œ�|dk    r| )                    |¦  «         Œ«|D ]}‰|= Œt                               d¦  «         ‰                     ¦   «         D ]0\  }}t                               d|d„ |j        D ¦   «         ¦  «         Œ1d„ ‰                     ¦   «         D ¦   «         S )NÚ
user_nodesÚ
source_idsr   c                 óh  •— t          |¦  «        }t          ¦   «         }| D ]{}t          j        |f‰	j                             |¦  «        ¦  «        D ]J}‰                     |¦  «        }|€Œ|                     |¦  «         |                     ‰|         ¦  «         ŒKŒ||                     |¦  «         |S r   )	r9   Ú	itertoolsÚchainrJ   rA   Úgetr>   r&   Údifference_update)
rP   rQ   Úsource_ids_setÚdownstream_partition_idsÚ	user_nodeÚ	path_nodeÚ	target_idÚ
assignmentÚpartition_mapr   s
          €€€r   Údownstream_partitionszLCapabilityBasedPartitioner.propose_partitions.<locals>.downstream_partitionsr   sÎ   ø€ õ ! ™_œ_ˆNÝ14±´Ð$Ø'ð Nð N�	Ý!*¤Ø�L $Ô"8×"GÒ"GÈ	Ñ"RÔ"Rñ"ô "ð Nð N�Ið !+§¢¨yÑ 9Ô 9�IØ Ð(Ø Ø,×0Ò0°Ñ;Ô;Ð;Ø,×3Ò3°MÀ)Ô4LÑMÔMÐMÐMðNð %×6Ò6°~ÑFÔFÐFØ+Ð+r   Úself_idÚother_idc                 ó0  •‡ ‡‡‡— ‰‰          j         Š‰‰         j         Šdt          t                   dt          fˆ	ˆˆˆˆˆ ˆfd„}‰‰          ‰‰         z  }|                     ‰‰¦  «          ||¦  «        r‰ dfS ‰ ‰}}t          ‰¦  «        t          ‰¦  «        k     r||}}‰|         j                              ‰|         j         ¦  «         ‰|         j         D ]}|‰	|<   Œ‰|= t          ‰|         ‰|         ¦  «        ‰|<   ‰|= ‰|                              ‰|         ¦  «        ‰|<   ‰|= |‰|<   ‰|= ‰|                               ‰
|||f¦  «        ¦  «         ‰|          	                    |¦  «         ‰|          	                    |¦  «         |dfS )NÚall_user_nodesr   c                 ó  •— | D ]‡}t          ¦   «         }t          j        |f‰
j                             |¦  «        ¦  «        D ]H}|‰v s|‰v r  dS |‰v r6‰|         }||v rŒ‰	|         }‰|v s‰|v r  dS |                     |¦  «         ŒIŒˆdS )NTF)r9   rS   rT   rJ   rA   r>   )rb   rY   Úvisited_partition_idsrZ   Úpartition_idÚp_mapr\   r`   Úother_nodesr]   r   r_   Ú
self_nodess         €€€€€€€r   Údfs_iter_find_cycleziCapabilityBasedPartitioner.propose_partitions.<locals>.maybe_merge_partition.<locals>.dfs_iter_find_cycleŒ   så   ø€ Ø!/ð Dð D�IÝ,/©E¬EÐ)å%.¤_Ø"˜ dÔ&<×&KÒ&KÈIÑ&VÔ&Vñ&ô &ð Dð D˜	ð
 %¨
Ð2Ð2°iÀ;Ð6NÐ6NØ#' 4 4 4ð %¨
Ð2Ð2Ø+5°iÔ+@˜Lð  ,Ð/DÐDÐDØ (Ø$1°,Ô$?˜EØ&¨%Ð/Ð/°8¸uÐ3DÐ3DØ'+ t t tà1×5Ò5°lÑCÔCÐCøð/Dð2 �ur   FT)
r   r9   r   ÚboolrV   r   r&   ÚminÚunionÚdiscard)r_   r`   ri   rb   Úmerge_idÚ
removed_idr#   rg   rh   r\   r^   r]   Úpartition_usersÚpartitions_by_idÚpartitions_orderr   s   ``     @@€€€€€€€r   Úmaybe_merge_partitionzLCapabilityBasedPartitioner.propose_partitions.<locals>.maybe_merge_partition‡   s  øøøøø€ à)¨'Ô2Ô8ˆJØ*¨8Ô4Ô:ˆKðµC½´Ið Å$ð ð ð ð ð ð ð ð ð ð ð ð ð@ -¨WÔ5¸ÈÔ8QÑQˆNØ×,Ò,¨[¸*ÑEÔEÐEð #Ð" >Ñ2Ô2ð &ð  �~Ð%ð $+¨H�jˆHÝ�:‰Œ¥ [Ñ!1Ô!1Ò1Ð1Ø'1°8˜*�ð ˜XÔ&Ô,×3Ò3Ð4DÀZÔ4PÔ4VÑWÔWÐWà(¨Ô4Ô:ð ,ð ,�Ø#+�
˜4Ñ Ð à  Ð,å),Ø  Ô*Ð,<¸ZÔ,Hñ*ô *Ð˜XÑ&ð ! Ð,à&3°HÔ&=×&CÒ&CØ˜jÔ)ñ'ô 'ˆM˜(Ñ#ð ˜jÐ)à(6ˆO˜HÑ%Ø 
Ð+à˜(Ô#×*Ò*Ø%Ð% n°xÀÐ6LÑMÔMñô ð ð ˜(Ô#×+Ò+¨HÑ5Ô5Ð5Ø˜(Ô#×+Ò+¨JÑ7Ô7Ð7à˜T�>Ð!r   r#   r$   r   c                 ó   •— dt           dt          dd fˆˆfd„}| ‰v r!‰‰|                                        | ¦  «         |€‰                     | ¦  «         d S |‰vrR|‰| <   |€t	          d¦  «        ‚t          || g|g¬¦  «        ‰|<   t          | j        ¦  «        ‰|<    || |¦  «         d S |‰| <   ‰|                              | |¦  «         d S )Nr#   r   r   c                 ó^   •— ‰|                                ‰| j        |f¦  «        ¦  «         d S r   )r&   r=   )r#   r   r^   r]   s     €€r   Ú_update_partition_mapzgCapabilityBasedPartitioner.propose_partitions.<locals>.merge_single_node.<locals>._update_partition_mapÚ   s4   ø€ à˜bÔ!×(Ò(Ð)>Ð)>¸t¼zÈBÈ5Ñ)QÔ)QÑRÔRÐRÐRÐRr   z)node_order is required for new partitions)r   r   r   )	r   r1   r+   Úpopr   r   r9   r=   r'   )	r#   r$   r   rv   r\   r^   r]   rp   rq   s	       €€€€€r   Úmerge_single_nodezHCapabilityBasedPartitioner.propose_partitions.<locals>.merge_single_node×   s5  ø€ ðS­Dð Sµcð S¸dð Sð Sð Sð Sð Sð Sð Sð �zÐ!Ð!Ø  ¨DÔ!1Ô2×>Ò>¸tÑDÔDÐDàˆzØ—’˜tÑ$Ô$Ð$Ð$Ð$ØÐ+Ð+Ð+Ø#%�
˜4Ñ ØÐ%Ý(Ð)TÑUÔUÐUÝ'0Ø $ °j°\ð(ñ (ô (Ð  Ñ$õ '*¨$¬*¡o¤o� Ñ#Ø%Ð% d¨BÑ/Ô/Ð/Ð/Ð/à#%�
˜4Ñ Ø  Ô$×-Ò-¨d°JÑ?Ô?Ð?Ð?Ð?r   zProposing partitions...FTé   )Úkeyr   )rz   Úreversez=Reassigning getitem nodes to its producer node's partition...Úcall_functionz_operator.getitemz'Filtering out single node partitions...ztorch.ops.aten.viewzExpected callable target, got zPartitions proposed:zpartition #%s: %sc                 ó   — g | ]	}|j         ‘Œ
S r2   )Úname)Ú.0r#   s     r   ú
<listcomp>zACapabilityBasedPartitioner.propose_partitions.<locals>.<listcomp>]  s   € Ð)PÐ)PÐ)P¸¨$¬)Ð)PÐ)PÐ)Pr   c                 óB   — g | ]}|                      ¦   «         d k    ¯|‘ŒS )r   )r-   ©r   Ú	partitions     r   r€   zACapabilityBasedPartitioner.propose_partitions.<locals>.<listcomp>`  s4   € ð 
ð 
ð 
Ø#ÀIÇNÂNÑDTÔDTÐWXÒDXÐDXˆIÐDXÐDXÐDXr   )*r7   r8   r9   rS   Úcountr   r   r1   Útuplerj   ÚloggerÚdebugÚ	enumerater;   r5   r<   r   rN   ÚnextrH   r=   ÚsortedÚitemsÚoperatorÚ
itemgetterr   Úkeysr   Úvaluesr   Úopr   ÚtargetrU   rE   rl   rF   Úcallabler   ÚtyperG   Úappend)r   Únodes_orderÚnew_partition_idrs   rx   r$   r#   Úmerge_candidatesÚcreated_partitionre   ÚuserÚ_Úmerge_candidates_listr_   r`   rƒ   Únodes_reassignmentÚis_tuple_outputr   Údefault_non_compute_opsrF   Úpartitions_to_removeÚcompute_node_countr\   r^   r]   rp   rq   rr   s   `                      @@@@@@r   Úpropose_partitionsz-CapabilityBasedPartitioner.propose_partitions\   s™  øøøøøøø€ õ .9Ô-DÅSÑ-IÔ-Iˆð ')ˆ
ð ð 	ð
 ð 	ð
 ð 	ð
 ð 	õ %œ?Ñ,Ô,Ðð	,Ý ¥œð	,Ý4<½S´Mð	,å•ŒXð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð*N	"­3ð N	"½#ð N	"Å%ÍÍTÈ	ÔBRð N	"ð N	"ð N	"ð N	"ð N	"ð N	"ð N	"ð N	"ð N	"ð N	"ð N	"ð N	"ð`	@Ýð	@Ý$'¨$¡Jð	@Ý47¸$±Jð	@àð	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@õ2 	�ŠÐ.Ñ/Ô/Ð/å )­(°4Ô3DÔ3JÔ3PÑ*QÔ*QÑ RÔ Rð &	Jñ &	JÑˆJ˜à02ÐØ %Ðð ×&Ò& tÑ,Ô,ð )°¸ZÐ1GÐ1GÝ#Ð$4Ñ5Ô5�Ø$0�˜DÑ!Ø1=Ð  Ñ.Ø!Ð! $¨
°LÑAÔAÐAØ15Ð  Ñ.Ø$(Ð!àÔ*ð 
:Ø$ð FØ $¤
ð Fð F˜Ø :Ð-Ð-ØAEÐ,¨Z¸Ô-=Ñ>øøõ (.Ø$×*Ò*Ñ,Ô,µ(Ô2EÀaÑ2HÔ2Hð(ñ (ô (ð :ð :‘O�L !ð 6:Ð$ \Ñ2Ð2å$(Ð)9×)>Ò)>Ñ)@Ô)@Ñ$AÔ$AÐ!ÝÐ(Ñ)Ô)¨AÒ-Ð-Ø/°Ô2�Ø 5°a°b°bÔ 9ð Jð J�Hð "7Ð!6°wÀÑ!IÔ!I‘J�G˜Q˜Qùð *×0Ò0Ñ2Ô2ð 	ð 	ˆIÝ"ÝØ”O×)Ò)Ñ+Ô+µÔ1DÀQÑ1GÔ1GÐQUðñ ô ñô ˆIŒOˆOõ 	�ŠÐTÑUÔUÐUð	2Ø24ÐØÔ)Ô/Ô5ð :ð :�Ø"&�Ø œJð ð �Dàœ ?Ò2Ð2Ý.¨t¬{Ñ;Ô;Ð?RÒRÐRà*/˜Ø˜ð Sð #ð :Ø#Ÿš¨Ñ-Ô-�BØ $¤
ð :ð :˜Ø%Ÿ>š>¨$Ñ/Ô/°2Ò5Ð5Ø79Ð.¨tÑ4øøð &ð Øà.×4Ò4Ñ6Ô6ð 2ð 2‘��bØ!Ð! $¨¨bÑ1Ô1Ð1Ð1ð1	2ð6 Ô0ñ 	)Ý�LŠLÐBÑCÔCÐCØ'<Ð>QÐ&RÐ#Ø5×;Ò;½CÀÔ@TÑ<UÔ<UÑVÔVˆOØ.0Ð Ø!1×!7Ò!7Ñ!9Ô!9ð 4ð 4‘��IØ%&Ð"Ø%œOð 4ð 4�DØ”w /Ò1Ð1Ý'¨¬Ñ4Ô4ð Ý"0Ø TÅÀdÄkÑARÔARÐ TÐ Tñ#ô #ð õ /¨t¬{Ñ;Ô;À?ÐRÐRØ.°!Ñ3Ð.å/°´Ñ<Ô<Ø#ÔEðFð Fð /°!Ñ3Ð.øØ%¨Ò*Ð*Ø(×/Ò/°Ñ3Ô3Ð3øØ*ð )ð )�Ø$ RÐ(Ð(å�ŠÐ+Ñ,Ô,Ð,Ø-×3Ò3Ñ5Ô5ð 	ð 	‰MˆB�	Ý�LŠLØ# RÐ)PÐ)PÀ	ÄÐ)PÑ)PÔ)Pñô ð ð ð
ð 
Ø'7×'>Ò'>Ñ'@Ô'@ð
ñ 
ô 
ð 	
r   Úfused_Ú
partitionsÚprefixc                 óx   — t                                d¦  «         t          | j        d„ |D ¦   «         |¬¦  «        S )NzFusing partitions...c                 ó   — g | ]	}|j         ‘Œ
S r2   r)   r‚   s     r   r€   z>CapabilityBasedPartitioner.fuse_partitions.<locals>.<listcomp>k  s   € Ð9Ð9Ð9 ˆYŒ_Ð9Ð9Ð9r   ©r¤   )r†   r‡   r	   r5   )r   r£   r¤   s      r   Úfuse_partitionsz*CapabilityBasedPartitioner.fuse_partitionsd  sH   € õ 	�ŠÐ+Ñ,Ô,Ð,å!ØÔØ9Ð9¨jÐ9Ñ9Ô9Øð
ñ 
ô 
ð 	
r   c                 ó®  ‡‡‡‡‡	‡
— t          | j        ¦  «        Šdt          dt          fˆfd„Ši Š	i Š
dt          dt           t                   dt           t                   dt          fˆˆˆ	fd„Šdt          dt           t                   dt           t                   dt          fˆˆˆ
fd„Š|D ]«}t          ¦   «         }|j        D ]`} ‰|¦  «        rS ‰|t          |j        ¦  «        |¦  «        s ‰|t          |j        ¦  «        |¦  «        r|                     |¦  «         Œat          |¦  «        dk    r |D ]}|j                             |d ¦  «         ŒŒ¬d S )	Nr#   r   c                 óF   •— | j         dk    ot          | j        ¦  «        ‰v S )Nr|   )r�   r   r‘   )r#   rF   s    €r   Úis_non_compute_nodezVCapabilityBasedPartitioner.remove_bookend_non_compute_ops.<locals>.is_non_compute_nodes  s*   ø€ à”˜?Ò*ð HÝ'¨¬Ñ4Ô4¸ÐGðr   rƒ   Úremoved_nodesc                 ó¶   •— | j         dk    s| |vs| |v rdS | ‰v r‰|          S  ‰| ¦  «        r&| j        D ]} ‰|||¦  «        sd‰| <    dS Œd‰| <   dS d‰| <   dS ©NÚplaceholderTF)r�   Úall_input_nodes)r#   rƒ   r¬   Úinput_nr«   Úis_transparent_input_nodeÚtransparent_input_nodess       €€€r   r²   z\CapabilityBasedPartitioner.remove_bookend_non_compute_ops.<locals>.is_transparent_input_node}  s¹   ø€ ð ”˜=Ò(Ð(Ø 	Ð)Ð)Ø˜MÐ)Ð)à�tØÐ.Ð.Ð.Ø.¨tÔ4Ð4Ø"Ð" 4Ñ(Ô(ð Ø#Ô3ð %ð %�GØ4Ð4°W¸iÈÑWÔWð %Ø8=Ð/°Ñ5Ø$˜u˜uð%ð 15Ð'¨Ñ-Ø�tØ,1Ð# DÑ)Ø�5r   c                 ó¶   •— | j         dk    s| |vs| |v rdS | ‰v r‰|          S  ‰| ¦  «        r&| j        D ]} ‰|||¦  «        sd‰| <    dS Œd‰| <   dS d‰| <   dS r®   )r�   r=   )r#   rƒ   r¬   Úoutput_nr«   Úis_transparent_output_nodeÚtransparent_output_nodess       €€€r   r¶   z]CapabilityBasedPartitioner.remove_bookend_non_compute_ops.<locals>.is_transparent_output_node’  s¿   ø€ ð ”˜=Ò(Ð(Ø 	Ð)Ð)Ø˜MÐ)Ð)à�tØÐ/Ð/Ð/Ø/°Ô5Ð5Ø"Ð" 4Ñ(Ô(ð Ø $¤
ð %ð %�HØ5Ð5Ø  )¨]ñô ð %ð :?Ð0°Ñ6Ø$˜u˜uð	%ð
 26Ð(¨Ñ.Ø�tØ-2Ð$ TÑ*Ø�5r   r   )r9   rF   r   rj   r   r>   r   rw   )r   r£   rƒ   r+   r#   r«   r²   r¶   rF   r³   r·   s        @@@@@@r   Úremove_bookend_non_compute_opsz9CapabilityBasedPartitioner.remove_bookend_non_compute_opsp  sÖ  øøøøøø€ Ý˜dÔ2Ñ3Ô3ˆð	¥dð 	­tð 	ð 	ð 	ð 	ð 	ð 	ð 57ÐØ57Ð ð	Ýð	Ý#&¥t¤9ð	Ý=@Å¼Yð	åð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð*	Ýð	Ý#&¥t¤9ð	Ý=@Å¼Yð	åð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð. $ð 	4ð 	4ˆIõ &)¡U¤UˆKØ!œð *ð *�Ø&Ð& tÑ,Ô,ð *Ø-Ð-¨dµC¸	¼Ñ4HÔ4HÈ+ÑVÔVð*à1Ð1Ø�c )¤/Ñ2Ô2°Kñô ð*ð  —O’O DÑ)Ô)Ð)øå�;ÑÔ 1Ò$Ð$Ø'ð 4ð 4�DØ”O×'Ò'¨¨dÑ3Ô3Ð3Ð3øð!	4ð 	4r   c                 ó\   — |                       ¦   «         }|                      ||¬¦  «        }|S )Nr§   )r¡   r¨   )r   r¤   r£   Úfused_gms       r   Úpartition_and_fusez-CapabilityBasedPartitioner.partition_and_fuse»  s0   € Ø×,Ò,Ñ.Ô.ˆ
Ø×'Ò'¨
¸6Ð'ÑBÔBˆØˆr   )FNNF)r¢   )r.   r/   r0   r   r   rj   r   r   r   r   rN   r   r   r¡   r¨   r¸   r»   r2   r   r   rC   rC   A   ss  € € € € € ð
 .3Ø04ØBFØ',ðAð Aà!ðAð .ðAð '+ð	Að
 " #œ¨Ñ-ðAð ,4°C¬=¸4Ñ+?ðAð !%ðAð 
ðAð Að Að Að*
 tð 
°ð 
ð 
ð 
ð 
ð
F
 D¨¤Oð F
ð F
ð F
ð F
ðR :Bð	
ð 	
Ø˜yœ/ð	
Ø36ð	
à	ð	
ð 	
ð 	
ð 	
ðI4¸¸i¼ð I4ÈTð I4ð I4ð I4ð I4ðVð ¨ð ¸Kð ð ð ð ð ð r   rC   )r7   rS   ÚloggingrŒ   Úcollections.abcr   r   Útorch.fx.graph_moduler   Útorch.fx.noder   r   Ú torch.fx.passes.operator_supportr   Ú!torch.fx.passes.utils.fuser_utilsr	   Ú	getLoggerr.   r†   ÚsetLevelÚWARNINGr   r4   rC   r2   r   r   ú<module>rÅ      sJ  ðØ Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø @Ð @Ð @Ð @Ð @Ð @Ø @Ð @Ð @Ð @Ð @Ð @ð 
ˆÔ	˜8Ñ	$Ô	$€Ø ‡‚�”Ñ  Ô  Ð  ðð ð ð ð ñ ô ð ðD&ð &ð &ð &ð &ñ &ô &ð &ð}ð }ð }ð }ð }ñ }ô }ð }ð }ð }r   