Ë
    M²jL  ã                   ób  — 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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yes ed¬«       G d„ d«      «       Zyy# e$ r dZdZY ŒSw xY w)é    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fd„Z	d"de
j                  fd„Zde
j                  fd„Z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defd„Z	 d#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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 y)$r   z»
        Visualize a torch.fx.Graph with graphviz
        Basic usage:
            g = FxGraphDrawer(symbolic_traced, "resnet18")
            g.get_dot_graph().write_svg("a.svg")
        NÚgraph_moduleÚnameÚignore_getattrÚignore_parameters_and_buffersÚskip_node_names_in_argsÚparse_stack_traceÚdot_graph_shapeÚnormalize_argsc	           	      óÜ  — || _         |�|nd| _        || _        | j                  t        d<   || j	                  ||||||«      i| _        |j                  j                  D ]Š  }	|	j                  dk7  rŒ| j                  ||	«      }
t        |
t        j                  j                  «      sŒJ| j	                  |
|› d|	j                  › �||||«      | j
                  |› d|	j                  › �<   ŒŒ y )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              ú[/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/fx/passes/graph_drawer.pyÚ__init__zFxGraphDrawer.__init__N   s  € ð ˆDŒJà#2Ð#>‘ÀHð Ô ð #1ˆDÔØ(,×(<Ñ(<Ô˜WÑ%ð �d—l‘lØ ØØ"Ø1Ø+Ø%óð	 ˆDÔð %×*Ñ*×0Ñ0ò �Ø—7‘7˜mÒ+Øà ×/Ñ/°¸dÓC�	ä! )¬U¯X©X×-AÑ-AÔBØà<@¿L¹LØØ�f˜A˜dŸk™k˜]Ð+Ø"Ø1Ø+Ø%ó=�× Ñ  D 6¨¨4¯;©;¨-Ð!8Ò9ñó    Úreturnc                 óH   — |€| j                  «       S | j                  |«      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©rH   Úsubmod_names     rK   Úget_dot_graphzFxGraphDrawer.get_dot_graph}   s*   € ð0 Ð"Ø×.Ñ.Ó0Ð0à×0Ñ0°Ó=Ð=rM   c                 ó4   — | j                   | j                     S ©N©r>   r;   ©rH   s    rK   rP   z FxGraphDrawer.get_main_dot_graphš   s   € Ø×#Ñ# D§J¡JÑ/Ð/rM   c                 ó>   — | j                   | j                  › d|› �   S )Nr:   rW   rR   s     rK   rQ   z"FxGraphDrawer.get_submod_dot_graph�   s"   € Ø×#Ñ# t§z¡z l°!°K°=Ð$AÑBÐBrM   c                 ó   — | j                   S rV   )r>   rX   s    rK   Úget_all_dot_graphsz FxGraphDrawer.get_all_dot_graphs    s   € Ø×#Ñ#Ð#rM   rI   c                 ój  — | j                   ddddœ}|j                  t        v rt        |j                     |d<   |S |j                  |j                  «      }t        t        j                  |j                  «       d¬«      j                  «       d d d	«      }t        |t        t        «      z     |d<   |S )
Nz#CAFFE3r(   r)   )r9   r*   r+   r,   r*   F)Úusedforsecurityé   é   )r5   rA   Ú
_COLOR_MAPÚ_pretty_print_targetrG   ÚintÚhashlibÚmd5ÚencodeÚ	hexdigestÚ_HASH_COLOR_MAPÚlen)rH   rI   ÚtemplateÚtarget_nameÚtarget_hashs        rK   Ú_get_node_stylezFxGraphDrawer._get_node_style£   s·   € à×-Ñ-Ø&Ø+Ø&ñ	ˆHð �w‰wœ*Ñ$Ü(2°4·7±7Ñ(;�˜Ñ%ð ˆOð #×7Ñ7¸¿¹ÓD�Ü!Ü—K‘KØ#×*Ñ*Ó,¸eôç‘i“k " 1ð&ð ó	�ô )8Ø¤#¤oÓ"6Ñ6ñ)�˜Ñ%ð ˆOrM   Úmodulec                 ó.  — |}t        |j                  t        «      s!t        dt	        |j                  «      › �«      ‚|j                  j                  d«      }|D ]7  }t        ||«      st        t        |«      dz   |z   dz   «      ‚t        ||«      }Œ9 |S )NzExpected str target, got ú.z does not have attribute ú!)	rC   rG   ÚstrÚAssertionErrorÚtypeÚsplitÚhasattrÚRuntimeErrorÚgetattr)rH   rm   rI   Úpy_objÚatomsÚatoms         rK   rB   zFxGraphDrawer._get_leaf_nodeº   sš   € ð ˆFÜ˜dŸk™k¬3Ô/Ü$Ð'@ÄÀdÇkÁkÓARÐ@SÐ%TÓUÐUØ—K‘K×%Ñ% cÓ*ˆEØò /�Ü˜v tÔ,Ü&Ü˜F›Ð&AÑAÀDÑHÈ3ÑNóð ô ! ¨Ó.‘ð/ð ˆMrM   rG   c                 óö   — t        |t        j                  j                  «      rt        j                  |«      }nt        |t
        «      r|}nt        |«      }|j                  dd«      j                  dd«      S )Nú{ú\{ú}ú\})rC   rD   ÚnnÚModuleÚtypenamerq   r
   Úreplace)rH   rG   Úrets      rK   Ú	_typenamezFxGraphDrawer._typenameÉ   s[   € Ü˜&¤%§(¡(§/¡/Ô2Ü—n‘n VÓ,‘Ü˜F¤CÔ(Ø‘ä)¨&Ó1�ð
 —;‘;˜s EÓ*×2Ñ2°3¸Ó>Ð>rM   Úfull_file_nameÚtruncate_to_last_nc                 ón   — |j                  d«      }t        |«      |k\  rdj                  || d  «      S |S )Nú/)rt   rh   Újoin)rH   r†   r‡   Úsplitss       rK   Ú_shorten_file_namez FxGraphDrawer._shorten_file_nameÙ   sB   € ð
 $×)Ñ)¨#Ó.ˆFÜ�6‹{Ð0Ò0Ø—x‘x Ð(:Ð':Ð';Ð <Ó=Ð=Ø!Ð!rM   c                 ó  ‡— ˆfd„}dd|j                   › d|j                  › d�z   }|j                  dk(  r{| j                  ||«      }|d| j                  |«      z   dz   z  }d	}t	        |d
«      r8dj                  |j                  D �	cg c]  }	|	› dt        ||	«      › �‘Œ c}	«      }||dz   z  }nÊ|d| j                  |j                  «      › �dz   z  }| j                  r2	 t        |j                  |j                  |j                  d¬«      \  }
}n|j                  |j                  }}
t        |
«      dkD  r| ||
«      z  }t        |«      dkD  r| ||«      z  }|dt        |j                  «      › �dz   z  }|j                   j#                  d«      }|| j%                  |«      z  }|j                   j#                  dd «      }|�*|d|j                   › �dz   z  }|d|j&                  › �dz   z  }|ra|j(                  �Ut+        |j(                  «      }| j-                  |j.                  «      }|d|› d|j0                  › d|j2                  › �dz   z  }|dz   S c c}	w # t        $ r |j                  |j                  }}
Y �ŒXw xY w)Nc           
      ó2  •— t        | t        «      r d\  }}| D �cg c]  }t        |d¬«      ‘Œ }}nIt        | t        «      r8d\  }}| j	                  «       D ��cg c]  \  }}|› dt        |d¬«      › �‘Œ }}}ny‰r|D �cg c]	  }d|vsŒ|‘Œ }}t        |«      dk(  ry|d	j                  |«      z   |z   }t        |«      d
k(  r"|j                  dd«      j                  dd«      }|j                  dd«      j                  dd«      S c c}w c c}}w c c}w )N)z	|args=(\lz,\n)\lr^   )Úmax_list_len)z|kwargs={\lz,\n}\lú: Ú ú%r   z,\né   z\lú\nr|   r}   r~   r   )rC   Útupler	   ÚdictÚitemsrh   rŠ   rƒ   )	ÚargÚprefixÚsuffixÚaÚarg_strs_listÚkÚvÚarg_strsr3   s	           €rK   Ú_get_str_for_args_kwargsz?FxGraphDrawer._get_node_label.<locals>._get_str_for_args_kwargsê   s"  ø€ Ü˜c¤5Ô)Ø%<‘N�F˜FØMPÖ$QÈ¤[°ÀÖ%CÐ$Q�MÑ$QÜ ¤TÔ*Ø%>‘N�F˜FàMPÏYÉYË[÷%ÙEIÀQÈ˜1˜#˜R¤¨A¸AÔ >Ð?Ò@ð%�Mò %ð ñ +Ø0=Ö$N¨1ÀÈAÂ¢QÐ$N�MÐ$NÜ�}Ó%¨Ò*ØØ! F§K¡K°Ó$>Ñ>ÀÑG�Ü�}Ó%¨Ò*Ø'×/Ñ/°°rÓ:×BÑBÀ5È"ÓM�HØ×'Ñ'¨¨UÓ3×;Ñ;¸CÀÓGÐGùò# %Rùó%ùò %Os   ›D	ÁDÂ	DÂDr|   zname=%z	|op_code=ú
r   r”   z\n|r‘   Ú__constants__r�   z|target=T)Únormalize_to_only_use_kwargsr   z|num_users=Útensor_metaÚbuf_metaz|buf=z
|n_origin=z|file=ú:ú r~   )r0   rA   rB   r…   ru   rŠ   r¢   rw   rG   r6   r   ÚargsÚkwargsÚ	Exceptionrh   ÚusersÚmetaÚgetÚ_tensor_meta_to_labelÚn_originÚstack_tracer   rŒ   ÚfileÚlinenoÚcode)rH   rm   rI   r3   r4   r    ÚlabelÚleaf_moduleÚextraÚcr¨   r©   r¤   r¥   Úparsed_stack_traceÚfnames      `            rK   Ú_get_node_labelzFxGraphDrawer._get_node_labelã   s¥  ø€ ôHð, ˜F 4§9¡9 +¨Y°t·w±w°i¸rÐBÑBˆEà�w‰w˜-Ò'Ø"×1Ñ1°&¸$Ó?�Ø˜ §¡°Ó!<Ñ<¸vÑEÑE�Ø�Ü˜;¨Ô8Ø!ŸJ™Jð &1×%>Ñ%>öà !ð  !˜c ¤G¨K¸Ó$;Ð#<Ò=òó�Eð ˜ ™Ñ&‘à˜8 D§N¡N°4·;±;Ó$?Ð#@ÐAÀEÑIÑI�Ø×&Ò&ð
>Ü'9Ø ŸK™KØ ŸI™IØ ŸK™KØ9=ô	(™˜™fð $(§9¡9¨d¯k©k˜&�DÜ�t“9˜q’=ØÑ5°dÓ;Ñ;�EÜ�v“; ’?ØÑ5°fÓ=Ñ=�EØ˜;¤s¨4¯:©:£Ð&7Ð8¸5Ñ@Ñ@�àŸ)™)Ÿ-™-¨Ó6ˆKØ�T×/Ñ/°Ó<Ñ<ˆEð —y‘y—}‘} Z°Ó6ˆHØÐ#Ø˜5 §¡ Ð0°5Ñ8Ñ8�Ø˜: h×&7Ñ&7Ð%8Ð9¸EÑAÑA�ñ ! T×%5Ñ%5Ð%AÜ%7¸×8HÑ8HÓ%IÐ"Ø×/Ñ/Ð0B×0GÑ0GÓH�ØØ˜U˜G 1Ð%7×%>Ñ%>Ð$?¸qÐAS×AXÑAXÐ@YÐZØññ�ð
 ˜3‘;Ðùòaøô  %ò >ð (,§y¡y°$·+±+˜f›ð>ús   Â	IÃ"0I É!JÊJc                 ó®  — |€yt        |t        «      r| j                  |«      S t        |t        «      rd}|D ]  }|| j	                  |«      z  }Œ |S t        |t
        «      r-d}|j                  «       D ]  }|| j	                  |«      z  }Œ |S t        |t        «      rd}|D ]  }|| j	                  |«      z  }Œ |S t        dt        |«      › �«      ‚)Nr‘   zUnsupported tensor meta type )
rC   r   Ú_stringify_tensor_metaÚlistr®   r–   Úvaluesr•   rv   rs   )rH   ÚtmÚresultÚitemrž   s        rK   r®   z#FxGraphDrawer._tensor_meta_to_label:  sê   € ØˆzØÜ˜B¤Ô/Ø×2Ñ2°2Ó6Ð6Ü˜B¤Ô%Ø�Øò ?�DØ˜d×8Ñ8¸Ó>Ñ>‘Fð?à�Ü˜B¤Ô%Ø�ØŸ™›ò <�AØ˜d×8Ñ8¸Ó;Ñ;‘Fð<à�Ü˜B¤Ô&Ø�Øò ?�DØ˜d×8Ñ8¸Ó>Ñ>‘Fð?à�ä"Ð%BÄ4ÈÃ8À*Ð#MÓNÐNrM   r¿   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                  �rh|j                  €t        d	«      ‚d
|j                  vrt        d«      ‚|j                  d
   }|t        j                  t        j                  hv rC|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 rd|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•   r9   Úrequires_gradÚstrideÚis_quantizedÚqparamsrr   rD   Úper_tensor_affineÚper_tensor_symmetricÚper_channel_affineÚper_channel_symmetricÚ per_channel_affine_float_qparamsrv   )rH   r¿   rÀ   rÄ   s       rK   r¼   z$FxGraphDrawer._stringify_tensor_metaQ  sO  € ØˆFÜ˜2˜wÔ'Ü�d˜B”ØÐ)¬C°·±«MÑ9¸EÑAÑAˆFØÐ)¬C´°b·h±h³Ó,@Ñ@À5ÑHÑHˆFØÐ1´C¸×8HÑ8HÓ4IÑIÈEÑQÑQˆFØÐ*¬S°·±«^Ñ;¸eÑCÑCˆFØ�‹Ø—:‘:Ð%Ü(Ð)OÓPÐPØ B§J¡JÑ.Ü(Ð)AÓBÐBØŸ*™* YÑ/�ØÜ×+Ñ+Ü×.Ñ.ðñ ð Ð3´c¸"¿*¹*ÀWÑ:MÓ6NÑNÐQVÑVÑV�FØðô ˜bŸj™j¨Ñ6Ó7ñ8ð  ñ	 ñ‘Fð Ü×,Ñ,Ü×/Ñ/Ü×:Ñ:ð!ñ ð
 ðô ˜bŸj™j¨Ñ1Ó2ñ3ð  ñ	 ñ�Fð ðô ˜bŸj™j¨Ñ6Ó7ñ8ð  ñ	 ñ�Fð ðô ˜bŸj™j¨Ñ0Ó1ñ2ð  ñ	 ñ‘Fô 'Ð)>¸w¸iÐ'HÓIÐIØÐ/´#°b·j±jÀÑ6KÓ2LÑLÈuÑTÑT�ØˆMrM   Útc                 óp   — t        |j                  «      t        t        |j                  «      «      z   dz   S )Nr”   )rq   rÃ   r½   r9   )rH   rÒ   s     rK   Ú_get_tensor_labelzFxGraphDrawer._get_tensor_labelŠ  s'   € Ü�q—w‘w“<¤#¤d¨1¯7©7£mÓ"4Ñ4°uÑ<Ð<rM   c                 óV  ‡ ‡‡‡— t        j                  |d¬«      Ši }|j                  j                  D �]0  Š|r‰j                  dk(  rŒ‰ j                  ‰«      }t        j                  ‰j                  fd‰ j                  |‰||«      i|¤Ž}	‰}
‰j                  j                  dd«      }|�J|j                  dkD  r;|j                  }||vrt        j                  ||¬«      ||<   |j                  |«      }
|
j                  |	«       ˆˆˆˆ fd	„}‰j                  d
k(  sŒî‰ j                  |‰«      Š|r�Œt        ‰t         j"                  j$                  «      r�Œ* |«        �Œ3 |j'                  «       D ]7  }|j)                  dd«       |j)                  dd«       ‰j+                  |«       Œ9 |j                  j                  D ]^  Š|r‰j                  dk(  rŒ‰j,                  D ];  }‰j/                  t        j0                  ‰j                  |j                  «      «       Œ= Œ` ‰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´   c            	      óÎ  •— t        ‰j                  «       ‰j                  «       «      D ]¹  \  } }‰j                  dz   | z   }t	        |t
        j                  j                  «      r|dz   dz   nd}t        j                  |fdd|z   ‰j                  |«      z   dz   it        ¤Ž}‰j                  |«       ‰j                  t        j                  |‰j                  «      «       Œ» y )Nro   z|op_code=get_Ú	parameterzbuffer\lr´   r|   r~   )r   Únamed_parametersÚnamed_buffersr0   rC   rD   r€   Ú	Parameterr   ÚNoderÔ   r<   Úadd_nodeÚadd_edgeÚEdge)	ÚpnameÚptensorÚpname1Úlabel1Ú
dot_w_nodeÚ	dot_graphrµ   rI   rH   s	        €€€€rK   Úget_module_params_or_buffersz;FxGraphDrawer._to_dot.<locals>.get_module_params_or_buffers¾  sâ   ø€ Ü*/Ø#×4Ñ4Ó6à#×1Ñ1Ó3ó+ò J™˜˜wð
 "&§¡¨S¡°5Ñ!8˜ô  *¨'´5·8±8×3EÑ3EÔFð # _Ñ4°{ÒBà!1ð ô
 &+§Z¡ZØ"ñ&à"%¨¡,°×1GÑ1GÈÓ1PÑ"PÐSVÑ"Vð&ô /ñ&˜
ð
 "×*Ñ*¨:Ô6Ø!×*Ñ*¬5¯:©:°f¸d¿i¹iÓ+HÕIñ#JrM   r   ÚcolorÚ	royalblueÚpenwidthÚ2)r   ÚDotr?   r@   rA   rl   rÝ   r0   rº   r¬   r­   r¯   ÚClusterrÞ   rB   rC   rD   rE   rF   r¾   ÚsetÚadd_subgraphr«   rß   rà   )rH   r/   r0   r1   r2   r3   r4   Úbuf_name_to_subgraphr+   Údot_nodeÚcurrent_graphr¥   Úbuf_namerç   ÚsubgraphÚuserræ   rµ   rI   s   `               @@@rK   r=   zFxGraphDrawer._to_dot�  s  û€ ô  Ÿ	™	 $°Ô5ˆIà#%Ð à$×*Ñ*×0Ñ0ó 57�Ù! d§g¡g°Ò&;Øà×,Ñ,¨TÓ2�Ü Ÿ:™:Ø—I‘Iñà×.Ñ.Ø$ dÐ,CÐEVóðð
 ñ�ð !*�àŸ9™9Ÿ=™=¨°TÓ:�ØÐ'¨H×,=Ñ,=ÀÒ,AØ'Ÿ}™}�HØÐ';Ñ;Ü9>¿¹Ø$¨Hô:Ð,¨XÑ6ð %9×$<Ñ$<¸XÓ$F�Mð ×&Ñ& xÔ0÷Jð( —7‘7˜mÓ+Ø"&×"5Ñ"5°lÀDÓ"I�Kã8ÄØ#¤U§X¡X×%9Ñ%9öBñ 5Ö6ðk57ðn 1×7Ñ7Ó9ò 1�Ø—‘˜W kÔ2Ø—‘˜Z¨Ô-Ø×&Ñ& xÕ0ð1ð
 %×*Ñ*×0Ñ0ò I�Ù! d§g¡g°Ò&;Øà ŸJ™Jò I�DØ×&Ñ&¤u§z¡z°$·)±)¸T¿Y¹YÓ'GÕHñIð	Ið ÐrM   ©FFTFNFrV   )é   )!Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   rE   rF   rq   ÚboolrL   r   rì   rT   rP   rQ   r–   r[   rÝ   rl   r€   r�   rB   r   r…   rb   rŒ   rº   r®   r   r¼   ÚTensorrÔ   r=   © rM   rK   r   r   E   s5  „ ñ	ð $)Ø27Ø,0Ø&+Ø*.Ø#(ñ-	àŸ(™(×.Ñ.ð-	ð ð-	ð !ð	-	ð
 ,0ð-	ð &*ð-	ð  $ð-	ð ! 4™Zð-	ð !ó-	ñ^	>°U·Y±Yó 	>ð:	0¨¯	©	ó 	0ð	C°u·y±yó 	Cð	$¨¨S°%·)±)¨^Ñ(<ó 	$ð	¨¯©¯©ð 	¸$¸sÀC¸x¹.ó 	ð.	ØŸ(™(Ÿ/™/ð	Ø16·±·±ð	à�X‰X�_‰_ó	ð	? Cð 	?¨Có 	?ð& '(ñ	"àð	"ð !$ó	"ðU	à—H‘H×(Ñ(ðU	ð —(‘(—-‘-ðU	ð &*ð	U	ð
  $ðU	ð óU	ðn	O¨só 	Oð.7	¨^ð 7	Àó 7	ðr	= u§|¡|ð 	=¸ó 	=ð
W	àŸ(™(×.Ñ.ðW	ð ðW	ð !ð	W	ð
 ,0ðW	ð &*ðW	ð  $ðW	ð �Y‰YôW	rM   c                   óp   — 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y)r   Nr/   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   )	rH   r/   r0   r1   r2   r3   r4   r5   r6   s	            rK   rL   zFxGraphDrawer.__init__í  s   € ô #ðJóð rM   rö   )	rø   rù   rú   rD   rE   rF   rq   rü   rL   rþ   rM   rK   r   r   ë  sw   „ ð (-Ø6;Ø04Ø*/Ø.2Ø',ñà#Ÿh™h×2Ñ2ðð ðð !%ð	ð
 04ðð *.ðð $(ðð "% t¡ðð !%ôrM   )rc   Ú	itertoolsr   Útypesr   Útypingr   r   rD   Ú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þ   rM   rK   ú<module>r     sð   ðô Ý Ý ß %ã Û Ý 1Ý -ß :Ý 8Ý 5ñ Ûà�Ià˜ÑÓðÛàˆ	ð Ð
€ð !Ø"ØØØñ€
ò€ð( ØØñÐ ñ á¨%Ô0÷`ð `ó 1ñ`ñF á	¨eÔ	4÷	ð 	ó 
5ñ	ð øð] ò Øˆ	ØŠðús   ÁB" Â"	B.Â-B.