§
    ŠŠtjÊL  ã                   óŽ  — U d dl Z d dlmZ d dlmZ d dlmZmZ d dlZd dl	Zd dl
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rd dlZd
Znedz  ed<   	 d dlZd
Zn# e$ r dZdZY nw xY wdgZddddddœZg d¢ZddddœZer! ed¬¦  «         G d„ d¦  «        ¦   «         ZdS es! ed¬¦  «         G d„ d¦  «        ¦   «         ZdS dS )é    N)Úchain)Ú
ModuleType)ÚAnyÚTYPE_CHECKING)Úcompatibility)Ú_parse_stack_trace)Ú_format_argÚ_get_qualified_name)Únormalize_function)ÚTensorMetadataTÚpydotFÚFxGraphDrawerz"AliceBlue"ÚLemonChiffon1ÚYellow2Ú	LightGreyÚ
PowderBlue)ÚplaceholderÚcall_moduleÚ	get_paramÚget_attrÚoutput)Ú
CadetBlue1ÚCoralÚDarkOliveGreen1ÚDarkSeaGreen1Ú
GhostWhiteÚKhaki1ÚLavenderBlush1ÚLightSkyBlueÚ
MistyRose1Ú
MistyRose2ÚPaleTurquoise2Ú
PeachPuff1ÚSalmonÚThistle1ÚThistle3ÚWheat1r$   ú"filled,rounded"ú#000000)Ú	fillcolorÚstyleÚ	fontcolor)Úis_backward_compatiblec                   ó‚  — e Zd ZdZ	 	 	 	 	 	 d%dej        j        dededed	ed
ededz  deddfd„Z	d&dedz  de
j        fd„Zde
j        fd„Zdede
j        fd„Zdeee
j        f         fd„Zdej        j        deeef         fd„Zdej        j        dej        j        dej        j        fd„Zdej        j        j        ej        j        z  defd„Z	 d'dededefd„Zdej        j        dej        j        d	ed
edef
d„Zdedefd „Zdedefd!„Zd"ej         defd#„Z!dej        j        dededed	ed
ede
j        fd$„Z"dS )(r   z»
        Visualize a torch.fx.Graph with graphviz
        Basic usage:
            g = FxGraphDrawer(symbolic_traced, "resnet18")
            g.get_dot_graph().write_svg("a.svg")
        FTNÚgraph_moduleÚnameÚignore_getattrÚignore_parameters_and_buffersÚskip_node_names_in_argsÚparse_stack_traceÚdot_graph_shapeÚnormalize_argsÚreturnc	           	      ó¦  — || _         |�|nd| _        || _        | j        t          d<   ||                      ||||||¦  «        i| _        |j        j        D ]z}	|	j        dk    rŒ|  	                    ||	¦  «        }
t          |
t          j        j        ¦  «        sŒD|                      |
|› d|	j        › �||||¦  «        | j        |› d|	j        › �<   Œ{d S )NÚrecordÚshaper   Ú_)Ú_namer5   r6   Ú_WEIGHT_TEMPLATEÚ_to_dotÚ_dot_graphsÚgraphÚnodesÚopÚ_get_leaf_nodeÚ
isinstanceÚtorchÚfxÚGraphModuleÚtarget)Úselfr/   r0   r1   r2   r3   r4   r5   r6   ÚnodeÚ	leaf_nodes              úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/fx/passes/graph_drawer.pyÚ__init__zFxGraphDrawer.__init__L   s  € ð ˆDŒJà#2Ð#>��ÀHð Ô ð #1ˆDÔØ(,Ô(<Õ˜WÑ%ð �d—l’lØ ØØ"Ø1Ø+Ø%ñô ð	 ˆDÔð %Ô*Ô0ð ð �Ø”7˜mÒ+Ð+Øà ×/Ò/°¸dÑCÔC�	å! )­U¬XÔ-AÑBÔBð Øà<@¿LºLØØÐ+Ð+˜dœkÐ+Ð+Ø"Ø1Ø+Ø%ñ=ô =�Ô  DÐ!8Ð!8¨4¬;Ð!8Ð!8Ñ9Ð9ðð ó    Úsubmod_namec                 óX   — |€|                       ¦   «         S |                      |¦  «        S )aA  
            Visualize a torch.fx.Graph with graphviz
            Example:
                >>> # xdoctest: +REQUIRES(module:pydot)
                >>> # xdoctest: +REQUIRES(module:ubelt)
                >>> # define module
                >>> class MyModule(torch.nn.Module):
                >>>     def __init__(self) -> None:
                >>>         super().__init__()
                >>>         self.linear = torch.nn.Linear(4, 5)
                >>>     def forward(self, x):
                >>>         return self.linear(x).clamp(min=0.0, max=1.0)
                >>> module = MyModule()
                >>> # trace the module
                >>> symbolic_traced = torch.fx.symbolic_trace(module)
                >>> # setup output file
                >>> import ubelt as ub
                >>> dpath = ub.Path.appdir("torch/tests/FxGraphDrawer").ensuredir()
                >>> fpath = dpath / "linear.svg"
                >>> # draw the graph
                >>> g = FxGraphDrawer(symbolic_traced, "linear")
                >>> g.get_dot_graph().write_svg(fpath)
            )Úget_main_dot_graphÚget_submod_dot_graph©rI   rO   s     rL   Úget_dot_graphzFxGraphDrawer.get_dot_graph{   s0   € ð0 Ð"Ø×.Ò.Ñ0Ô0Ð0à×0Ò0°Ñ=Ô=Ð=rN   c                 ó&   — | j         | j                 S ©N©r?   r<   ©rI   s    rL   rQ   z FxGraphDrawer.get_main_dot_graph˜   s   € ØÔ# D¤JÔ/Ð/rN   c                 ó0   — | j         | j        › d|› �         S )Nr;   rW   rS   s     rL   rR   z"FxGraphDrawer.get_submod_dot_graph›   s    € ØÔ# t¤zÐ$AÐ$A°KÐ$AÐ$AÔBÐBrN   c                 ó   — | j         S rV   )r?   rX   s    rL   Úget_all_dot_graphsz FxGraphDrawer.get_all_dot_graphsž   s   € ØÔ#Ð#rN   rJ   c                 ó„  — | j         ddddœ}|j        t          v rt          |j                 |d<   n�|                     |j        ¦  «        }t          t          j        |                     ¦   «         d¬¦  «         	                    ¦   «         d d…         d	¦  «        }t          |t          t          ¦  «        z           |d<   |S )
Nz#CAFFE3r(   r)   )r:   r*   r+   r,   r*   F)Úusedforsecurityé   é   )r5   rB   Ú
_COLOR_MAPÚ_pretty_print_targetrH   ÚintÚhashlibÚmd5ÚencodeÚ	hexdigestÚ_HASH_COLOR_MAPÚlen)rI   rJ   ÚtemplateÚtarget_nameÚtarget_hashs        rL   Ú_get_node_stylezFxGraphDrawer._get_node_style¡   sÌ   € àÔ-Ø&Ø+Ø&ð	ð ˆHð Œw�*Ð$Ð$Ý(2°4´7Ô(;�˜Ñ%Ð%ð #×7Ò7¸¼ÑDÔD�Ý!Ý”KØ#×*Ò*Ñ,Ô,¸eðñ ô ç’i‘k”k " 1 "ô&ð ñ	ô �õ )8Ø¥#¥oÑ"6Ô"6Ñ6ô)�˜Ñ%ð ˆOrN   Úmodulec                 óN  — |}t          |j        t          ¦  «        s$t          dt	          |j        ¦  «        › �¦  «        ‚|j                             d¦  «        }|D ]G}t          ||¦  «        s%t          t          |¦  «        dz   |z   dz   ¦  «        ‚t          ||¦  «        }ŒH|S )NzExpected str target, got ú.z does not have attribute ú!)	rD   rH   ÚstrÚAssertionErrorÚtypeÚsplitÚhasattrÚRuntimeErrorÚgetattr)rI   rm   rJ   Úpy_objÚatomsÚatoms         rL   rC   zFxGraphDrawer._get_leaf_node¸   s¸   € ð ˆFÝ˜dœk­3Ñ/Ô/ð VÝ$Ð%TÅÀdÄkÑARÔARÐ%TÐ%TÑUÔUÐUØ”K×%Ò% cÑ*Ô*ˆEØð /ð /�Ý˜v tÑ,Ô,ð Ý&Ý˜F™œÐ&AÑAÀDÑHÈ3ÑNñô ð õ ! ¨Ñ.Ô.��ØˆMrN   rH   c                 ó  — t          |t          j        j        ¦  «        rt          j        |¦  «        }n't          |t
          ¦  «        r|}nt          |¦  «        }|                     dd¦  «                             dd¦  «        S )NÚ{ú\{Ú}ú\})rD   rE   ÚnnÚModuleÚtypenamerq   r
   Úreplace)rI   rH   Úrets      rL   Ú	_typenamezFxGraphDrawer._typenameÇ   su   € Ý˜&¥%¤(¤/Ñ2Ô2ð 2Ý”n VÑ,Ô,��Ý˜F¥CÑ(Ô(ð 2Ø��å)¨&Ñ1Ô1�ð
 —;’;˜s EÑ*Ô*×2Ò2°3¸Ñ>Ô>Ð>rN   é   Úfull_file_nameÚtruncate_to_last_nc                 ó’   — |                      d¦  «        }t          |¦  «        |k    rd                     || d …         ¦  «        S |S )Nú/)rt   rh   Újoin)rI   r‡   rˆ   Úsplitss       rL   Ú_shorten_file_namez FxGraphDrawer._shorten_file_name×   sP   € ð
 $×)Ò)¨#Ñ.Ô.ˆFÝ�6‰{Œ{Ð0Ò0Ð0Ø—x’x Ð(:Ð':Ð';Ð';Ô <Ñ=Ô=Ð=Ø!Ð!rN   c                 óð  ‡‡— dt           t          df         t          t          t          f         z  dt          fˆfd„}dd|j        › d|j        › d�z   }|j        d	k    ru|                      ||¦  «        Š|d
|                      ‰¦  «        z   dz   z  }d}t          ‰d¦  «        r&d
 	                    ˆfd„‰j
        D ¦   «         ¦  «        }||d
z   z  }nÜ|d|                      |j        ¦  «        › �d
z   z  }| j        rE	 t          |j        |j        |j        d¬¦  «        \  }}	n,# t           $ r |j        |j        }	}Y nw xY w|j        |j        }	}t#          |¦  «        dk    r| ||¦  «        z  }t#          |	¦  «        dk    r| ||	¦  «        z  }|dt#          |j        ¦  «        › �d
z   z  }|j                             d¦  «        }
||                      |
¦  «        z  }|j                             dd ¦  «        }|� |d|j        › �d
z   z  }|d|j        › �d
z   z  }|rR|j        �Kt1          |j        ¦  «        }|�5|                      |j        ¦  «        }|d|› d|j        › d|j        › �d
z   z  }|dz   S )NÚarg.r7   c                 ó  •— t          | t          ¦  «        rd\  }}d„ | D ¦   «         }n;t          | t          ¦  «        r$d\  }}d„ |                      ¦   «         D ¦   «         }ndS ‰rd„ |D ¦   «         }t	          |¦  «        dk    rdS |d                     |¦  «        z   |z   }t	          |¦  «        d	k    r*|                     d
d¦  «                             dd¦  «        }|                     dd¦  «                             dd¦  «        S )N)z	|args=(\lz,\n)\lc                 ó0   — g | ]}t          |d ¬¦  «        ‘ŒS )r^   ©Úmax_list_len©r	   ©Ú.0Úas     rL   ú
<listcomp>zSFxGraphDrawer._get_node_label.<locals>._get_str_for_args_kwargs.<locals>.<listcomp>ë   s%   € Ð$QÐ$QÐ$QÈ¥[°ÀÐ%CÑ%CÔ%CÐ$QÐ$QÐ$QrN   )z|kwargs={\lz,\n}\lc                 ó@   — g | ]\  }}|› d t          |d¬¦  «        › �‘ŒS )ú: r^   r’   r”   )r–   ÚkÚvs      rL   r˜   zSFxGraphDrawer._get_node_label.<locals>._get_str_for_args_kwargs.<locals>.<listcomp>î   sD   € ð %ð %ð %ÙEIÀQÈ˜1Ð@Ð@¥¨A¸AÐ >Ñ >Ô >Ð@Ð@ð%ð %ð %rN   Ú c                 ó   — g | ]}d |v¯|‘Œ	S )ú%© r•   s     rL   r˜   zSFxGraphDrawer._get_node_label.<locals>._get_str_for_args_kwargs.<locals>.<listcomp>ö   s   € Ð$NÐ$NÐ$N¨1ÀÈAÀÀ QÀÀÀrN   r   z,\né   z\lú\nr|   r}   r~   r   )rD   ÚtupleÚdictÚitemsrh   r‹   rƒ   )r�   ÚprefixÚsuffixÚarg_strs_listÚarg_strsr3   s        €rL   Ú_get_str_for_args_kwargsz?FxGraphDrawer._get_node_label.<locals>._get_str_for_args_kwargsè   s,  ø€ Ý˜c¥5Ñ)Ô)ð 	Ø%<‘N�F˜FØ$QÐ$QÈSÐ$QÑ$QÔ$Q�M�MÝ ¥TÑ*Ô*ð Ø%>‘N�F˜Fð%ð %ØMPÏYÊYÉ[Ì[ð%ñ %ô %�M�Mð ˜2ð +ð OØ$NÐ$N°Ð$NÑ$NÔ$N�MÝ�}Ñ%Ô%¨Ò*Ð*Ø˜2Ø! F§K¢K°Ñ$>Ô$>Ñ>ÀÑG�Ý�}Ñ%Ô%¨Ò*Ð*Ø'×/Ò/°°rÑ:Ô:×BÒBÀ5È"ÑMÔM�HØ×'Ò'¨¨UÑ3Ô3×;Ò;¸CÀÑGÔGÐGrN   r|   zname=%z	|op_code=ú
r   r¢   z\n|r�   Ú__constants__c                 ó:   •— g | ]}|› d t          ‰|¦  «        › �‘ŒS )rš   )rw   )r–   ÚcÚleaf_modules     €rL   r˜   z1FxGraphDrawer._get_node_label.<locals>.<listcomp>  sA   ø€ ð ð ð à !ð  !Ð=Ð=¥G¨K¸Ñ$;Ô$;Ð=Ð=ðð ð rN   z|target=T)Únormalize_to_only_use_kwargsr   z|num_users=Útensor_metaÚbuf_metaz|buf=z
|n_origin=z|file=ú:ú r~   )r£   r   r¤   rq   r0   rB   rC   r…   ru   r‹   r¬   rH   r6   r   ÚargsÚkwargsÚ	Exceptionrh   ÚusersÚmetaÚgetÚ_tensor_meta_to_labelÚn_originÚstack_tracer   r�   ÚfileÚlinenoÚcode)rI   rm   rJ   r3   r4   rª   ÚlabelÚextrarµ   r¶   r±   r²   Úparsed_stack_traceÚfnamer¯   s      `          @rL   Ú_get_node_labelzFxGraphDrawer._get_node_labelá   s"  øø€ ðH­eµC¸°H¬oÅÅSÍ#ÀXÄÑ.Nð HÕSVð Hð Hð Hð Hð Hð Hð, ÐB 4¤9ÐBÐB°t´wÐBÐBÐBÑBˆEàŒw˜-Ò'Ð'Ø"×1Ò1°&¸$Ñ?Ô?�Ø˜ §¢°Ñ!<Ô!<Ñ<¸vÑEÑE�Ø�Ý˜;¨Ñ8Ô8ð Ø!ŸJšJðð ð ð à%0Ô%>ðñ ô ñô �Eð ˜ ™Ñ&��àÐA D§N¢N°4´;Ñ$?Ô$?ÐAÐAÀEÑIÑI�ØÔ&ð :ð
>Ý'9Ø œKØ œIØ œKØ9=ð	(ñ (ô (™˜˜f˜føõ %ð >ð >ð >ð (,¤y°$´+˜f˜˜˜ð>øøøð
 $(¤9¨d¬k˜&�DÝ�t‘9”9˜q’=�=ØÐ5Ð5°dÑ;Ô;Ñ;�EÝ�v‘;”; ’?�?ØÐ5Ð5°fÑ=Ô=Ñ=�EØÐ8¥s¨4¬:¡¤Ð8Ð8¸5Ñ@Ñ@�àœ)Ÿ-š-¨Ñ6Ô6ˆKØ�T×/Ò/°Ñ<Ô<Ñ<ˆEð ”y—}’} Z°Ñ6Ô6ˆHØÐ#ØÐ0 ¤Ð0Ð0°5Ñ8Ñ8�ØÐ9 hÔ&7Ð9Ð9¸EÑAÑA�ð !ð  TÔ%5Ð%AÝ%7¸Ô8HÑ%IÔ%IÐ"Ø%Ð1Ø ×3Ò3Ð4FÔ4KÑLÔL�EØØ^ Ð^Ð^Ð);Ô)BÐ^Ð^ÐEWÔE\Ð^Ð^Øñ ñ�Eð
 ˜3‘;Ðs   Ã?%D% Ä%E Ä?E Útmc                 ó  — |€dS t          |t          ¦  «        r|                      |¦  «        S t          |t          ¦  «        r!d}|D ]}||                      |¦  «        z  }Œ|S t          |t
          ¦  «        r3d}|                     ¦   «         D ]}||                      |¦  «        z  }Œ|S t          |t          ¦  «        r!d}|D ]}||                      |¦  «        z  }Œ|S t          dt          |¦  «        › �¦  «        ‚)Nr�   zUnsupported tensor meta type )
rD   r   Ú_stringify_tensor_metaÚlistr»   r¤   Úvaluesr£   rv   rs   )rI   rÆ   ÚresultÚitemrœ   s        rL   r»   z#FxGraphDrawer._tensor_meta_to_label9  s*  € ØˆzØ�rÝ˜B¥Ñ/Ô/ð OØ×2Ò2°2Ñ6Ô6Ð6Ý˜B¥Ñ%Ô%ð OØ�Øð ?ð ?�DØ˜d×8Ò8¸Ñ>Ô>Ñ>�F�FØ�Ý˜B¥Ñ%Ô%ð OØ�ØŸš™œð <ð <�AØ˜d×8Ò8¸Ñ;Ô;Ñ;�F�FØ�Ý˜B¥Ñ&Ô&ð OØ�Øð ?ð ?�DØ˜d×8Ò8¸Ñ>Ô>Ñ>�F�FØ�å"Ð#MÅ4ÈÁ8Ä8Ð#MÐ#MÑNÔNÐNrN   c                 ó  — d}t          |d¦  «        st          d|¦  «         |dt          |j        ¦  «        z   dz   z  }|dt          t	          |j        ¦  «        ¦  «        z   dz   z  }|dt          |j        ¦  «        z   dz   z  }|dt          |j        ¦  «        z   dz   z  }|j        �r`|j	        €t          d	¦  «        ‚d
|j	        vrt          d¦  «        ‚|j	        d
         }|t          j        t          j        hv rG|dt          |j	        d         ¦  «        z   dz   z  }|dt          |j	        d         ¦  «        z   dz   z  }n¡|t          j        t          j        t          j        hv rj|dt          |j	        d         ¦  «        z   dz   z  }|dt          |j	        d         ¦  «        z   dz   z  }|dt          |j	        d         ¦  «        z   dz   z  }nt#          d|› �¦  «        ‚|dt          |j	        d
         ¦  «        z   dz   z  }|S )Nr�   ÚdtyperÆ   z|dtype=r¢   z|shape=z|requires_grad=z|stride=z$qparams is None for quantized tensorÚqschemezqscheme not in qparamsz	|q_scale=Úscalez|q_zero_point=Ú
zero_pointz|q_per_channel_scale=z|q_per_channel_zero_point=z|q_per_channel_axis=ÚaxiszUnsupported qscheme: z	|qscheme=)ru   Úprintrq   rÎ   r£   r:   Úrequires_gradÚstrideÚis_quantizedÚqparamsrr   rE   Úper_tensor_affineÚper_tensor_symmetricÚper_channel_affineÚper_channel_symmetricÚ per_channel_affine_float_qparamsrv   )rI   rÆ   rË   rÏ   s       rL   rÈ   z$FxGraphDrawer._stringify_tensor_metaP  sn  € ØˆFÝ˜2˜wÑ'Ô'ð  Ý�d˜B‘”�ØÐ)­C°´©M¬MÑ9¸EÑAÑAˆFØÐ)­Cµ°b´h±´Ñ,@Ô,@Ñ@À5ÑHÑHˆFØÐ1µC¸Ô8HÑ4IÔ4IÑIÈEÑQÑQˆFØÐ*­S°´©^¬^Ñ;¸eÑCÑCˆFØŒñ .UØ”:Ð%Ý(Ð)OÑPÔPÐPØ B¤JÐ.Ð.Ý(Ð)AÑBÔBÐBØœ* YÔ/�ØÝÔ+ÝÔ.ðð ð ð Ð3µc¸"¼*ÀWÔ:MÑ6NÔ6NÑNÐQVÑVÑV�FØðõ ˜bœj¨Ô6Ñ7Ô7ñ8ð  ñ	 ñ�F�Fð ÝÔ,ÝÔ/ÝÔ:ð!ð ð ð
 ðõ ˜bœj¨Ô1Ñ2Ô2ñ3ð  ñ	 ñ�Fð ðõ ˜bœj¨Ô6Ñ7Ô7ñ8ð  ñ	 ñ�Fð ðõ ˜bœj¨Ô0Ñ1Ô1ñ2ð  ñ	 ñ�F�Fõ 'Ð'H¸wÐ'HÐ'HÑIÔIÐIØÐ/µ#°b´jÀÔ6KÑ2LÔ2LÑLÈuÑTÑT�ØˆMrN   Útc                 ót   — t          |j        ¦  «        t          t          |j        ¦  «        ¦  «        z   dz   S )Nr¢   )rq   rÎ   rÉ   r:   )rI   rÝ   s     rL   Ú_get_tensor_labelzFxGraphDrawer._get_tensor_label‰  s*   € Ý�q”w‘<”<¥#¥d¨1¬7¡m¤mÑ"4Ô"4Ñ4°uÑ<Ð<rN   c                 ó   ‡ ‡‡‡— t          j        |d¬¦  «        Ši }|j        j        D �]"Š|r‰j        dk    rŒ‰                      ‰¦  «        }t          j        ‰j        fd‰                      |‰||¦  «        i|¤Ž}	‰}
‰j	         
                    dd¦  «        }|�D|j        dk    r9|j        }||vrt          j        ||¬¦  «        ||<   | 
                    |¦  «        }
|
                     |	¦  «         dˆˆˆˆ fd
„}‰j        dk    rA‰                      |‰¦  «        Š|s)t          ‰t           j        j        ¦  «        s
 |¦   «          �Œ$|                     ¦   «         D ]C}|                     dd¦  «         |                     dd¦  «         ‰                     |¦  «         ŒD|j        j        D ]LŠ|r‰j        dk    rŒ‰j        D ]4}‰                     t          j        ‰j        |j        ¦  «        ¦  «         Œ5ŒM‰S )a  
            Actual interface to visualize a fx.Graph. Note that it takes in the GraphModule instead of the Graph.
            If ignore_parameters_and_buffers is True, the parameters and buffers
            created with the module will not be added as nodes and edges.
            ÚTB)Úrankdirr   rÁ   r²   Nr¡   )rÁ   r7   c            	      óÖ  •— t          ‰                     ¦   «         ‰                     ¦   «         ¦  «        D ]²\  } }‰j        dz   | z   }t	          |t
          j        j        ¦  «        r|dz   dz   nd}t          j	        |fdd|z   ‰ 
                    |¦  «        z   dz   it          ¤Ž}‰                     |¦  «         ‰                     t          j        |‰j        ¦  «        ¦  «         Œ³d S )Nro   z|op_code=get_Ú	parameterzbuffer\lrÁ   r|   r~   )r   Únamed_parametersÚnamed_buffersr0   rD   rE   r€   Ú	Parameterr   ÚNoderß   r=   Úadd_nodeÚadd_edgeÚEdge)	ÚpnameÚptensorÚpname1Úlabel1Ú
dot_w_nodeÚ	dot_graphr¯   rJ   rI   s	        €€€€rL   Úget_module_params_or_buffersz;FxGraphDrawer._to_dot.<locals>.get_module_params_or_buffers½  s  ø€ Ý*/Ø#×4Ò4Ñ6Ô6à#×1Ò1Ñ3Ô3ñ+ô +ð Jð J™˜˜wð
 "&¤¨S¡°5Ñ!8˜õ  *¨'µ5´8Ô3EÑFÔFð2˜F _Ñ4°{ÑBÐBà!1ð õ
 &+¤ZØ"ð&ð &à"%¨¡,°×1GÒ1GÈÑ1PÔ1PÑ"PÐSVÑ"Vð&õ /ð&ð &˜
ð
 "×*Ò*¨:Ñ6Ô6Ð6Ø!×*Ò*­5¬:°f¸d¼iÑ+HÔ+HÑIÔIÐIÐIð#Jð JrN   r   ÚcolorÚ	royalblueÚpenwidthÚ2)r7   N)r   ÚDotr@   rA   rB   rl   rè   r0   rÅ   r¹   rº   r¼   ÚClusterré   rC   rD   rE   rF   rG   rÊ   ÚsetÚadd_subgraphr¸   rê   rë   )rI   r/   r0   r1   r2   r3   r4   Úbuf_name_to_subgraphr+   Údot_nodeÚcurrent_graphr²   Úbuf_namerò   ÚsubgraphÚuserrñ   r¯   rJ   s   `               @@@rL   r>   zFxGraphDrawer._to_dotŽ  s˜  øøøø€ õ  œ	 $°Ð5Ñ5Ô5ˆIà=?Ð à$Ô*Ô0ð 57ñ 57�Ø!ð  d¤g°Ò&;Ð&;Øà×,Ò,¨TÑ2Ô2�Ý œ:Ø”Iðð à×.Ò.Ø$ dÐ,CÐEVñô ðð
 ðð �ð !*�àœ9Ÿ=š=¨°TÑ:Ô:�ØÐ'¨HÔ,=ÀÒ,AÐ,AØ'œ}�HØÐ';Ð;Ð;Ý9>¼Ø$¨Hð:ñ :ô :Ð,¨XÑ6ð %9×$<Ò$<¸XÑ$FÔ$F�Mð ×&Ò& xÑ0Ô0Ð0ðJð Jð Jð Jð Jð Jð Jð Jð Jð( ”7˜mÒ+Ð+Ø"&×"5Ò"5°lÀDÑ"IÔ"I�Kà8ð 7ÅØ#¥U¤XÔ%9ñBô Bð 7ð 5Ð4Ñ6Ô6Ð6ùà0×7Ò7Ñ9Ô9ð 1ð 1�Ø—’˜W kÑ2Ô2Ð2Ø—’˜Z¨Ñ-Ô-Ð-Ø×&Ò& xÑ0Ô0Ð0Ð0à$Ô*Ô0ð Ið I�Ø!ð  d¤g°Ò&;Ð&;Øà œJð Ið I�DØ×&Ò&¥u¤z°$´)¸T¼YÑ'GÔ'GÑHÔHÐHÐHðIð ÐrN   ©FFTFNFrV   )r†   )#Ú__name__Ú
__module__Ú__qualname__Ú__doc__rE   rF   rG   rq   ÚboolrM   r   r÷   rT   rQ   rR   r¤   r[   rè   rl   r€   r�   rC   rJ   ÚTargetr…   rb   r�   rÅ   Úobjectr»   r   rÈ   ÚTensorrß   r>   r    rN   rL   r   r   C   sK  € € € € € ð	ð 	ð $)Ø27Ø,0Ø&+Ø*.Ø#(ð-	ð -	àœ(Ô.ð-	ð ð-	ð !ð	-	ð
 ,0ð-	ð &*ð-	ð  $ð-	ð ! 4™Zð-	ð !ð-	ð ð-	ð -	ð -	ð -	ð^	>ð 	>¨S°4©Zð 	>À5Ä9ð 	>ð 	>ð 	>ð 	>ð:	0¨¬	ð 	0ð 	0ð 	0ð 	0ð	C°Cð 	C¸E¼Ið 	Cð 	Cð 	Cð 	Cð	$¨¨S°%´)¨^Ô(<ð 	$ð 	$ð 	$ð 	$ð	¨¬¬ð 	¸$¸sÀC¸x¼.ð 	ð 	ð 	ð 	ð.	Øœ(œ/ð	Ø16´´ð	àŒXŒ_ð	ð 	ð 	ð 	ð	? E¤H¤MÔ$8¸5¼8¼?Ñ$Jð 	?Èsð 	?ð 	?ð 	?ð 	?ð& '(ð	"ð 	"àð	"ð !$ð	"ð ð		"ð 	"ð 	"ð 	"ðV	à”HÔ(ðV	ð ”(”-ðV	ð &*ð	V	ð
  $ðV	ð ðV	ð V	ð V	ð V	ðp	O¨Fð 	O°sð 	Oð 	Oð 	Oð 	Oð.7	¨^ð 7	Àð 7	ð 7	ð 7	ð 7	ðr	= u¤|ð 	=¸ð 	=ð 	=ð 	=ð 	=ð
W	àœ(Ô.ðW	ð ðW	ð !ð	W	ð
 ,0ðW	ð &*ðW	ð  $ðW	ð ŒYðW	ð W	ð W	ð W	ð W	ð W	rN   c                   ó^   — e Zd Z	 	 	 	 	 	 ddej        j        dedededed	ed
edz  defd„ZdS )r   FTNr/   r0   r1   r2   r3   r4   r5   r6   c	                 ó    — t          d¦  «        ‚)Nz|FXGraphDrawer requires the pydot package to be installed. Please install pydot through your favorite Python package manager.)rv   )	rI   r/   r0   r1   r2   r3   r4   r5   r6   s	            rL   rM   zFxGraphDrawer.__init__ì  s   € õ #ðJñô ð rN   r  )	r  r  r  rE   rF   rG   rq   r  rM   r    rN   rL   r   r   ê  s˜   € € € € € ð (-Ø6;Ø04Ø*/Ø.2Ø',ðð à#œhÔ2ðð ðð !%ð	ð
 04ðð *.ðð $(ðð "% t¡ðð !%ðð ð ð ð ð rN   )rc   Ú	itertoolsr   Útypesr   Útypingr   r   rE   Útorch.fxÚtorch.fx._compatibilityr   Útorch.fx.graphr   Útorch.fx.noder	   r
   Útorch.fx.operator_schemasr   Útorch.fx.passes.shape_propr   r   Ú	HAS_PYDOTÚ__annotations__ÚModuleNotFoundErrorÚ__all__r`   rg   r=   r   r    rN   rL   ú<module>r     s5  ðØ €€€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à €€€Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø -Ð -Ð -Ð -Ð -Ð -Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ð ð Ø€L€L€Là€I€Ià˜ÑÐÐÑðØˆˆˆàˆ	ˆ	øØð ð ð Øˆ	Øˆˆˆðøøøð
 Ð
€ð !Ø"ØØØðð €
ðð ð €ð( ØØðð Ð ð ð yà€]¨%Ð0Ñ0Ô0ðað að að að añ aô añ 1Ô0ðað að aðH ð à	ˆ¨eÐ	4Ñ	4Ô	4ð	ð 	ð 	ð 	ð 	ñ 	ô 	ñ 
5Ô	4ð	ð 	ð 	ðð s   ÁA Á	A'Á&A'