ó
    Eñiæ  ã                   óê   • S SK Jr  S SKJrJr  S SKrS SKJrJrJ	r	  S SK
Jr  S SKJr  S\	S\\	\\	   4   S	\\	   4S
 jrS\	S\\	\\	   4   S	\\	   4S jrS\S\\	\\	   4   S	\4S jrS\\   S	\4S jrg)é    )Údeque)ÚAnyÚOptionalN)ÚGraphÚmap_argÚNode)Ú
OrderedSet)Útree_flattenÚnodeÚnode_to_additional_depsÚreturnc                 ó²   • [         [           " 5       n[        U R                  U R                  4UR
                  5        X;   a  UR                  X   5        U$ ©N)Úlistr   r   ÚargsÚkwargsÚappendÚextend©r   r   r   s      ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/graph_utils.pyÚ_get_flat_argsr      sE   € ô ”Š9‹;€DÜˆT�Y‰Y˜Ÿ™Ð$ d§k¡kÔ2ØÓ&Ø�‰Ð+Ñ1Ô2Ø€Kó    c                 ó²   • [         [           " 5       n[        U R                  U R                  4UR
                  5        X;   a  UR                  X   5        U$ r   )r	   r   r   r   r   ÚaddÚupdater   s      r   Ú_get_flat_args_uniquer      sG   € ô ”dÒÓ€DÜˆT�Y‰Y˜Ÿ™Ð$ d§h¡hÔ/ØÓ&Ø�‰Ð+Ñ1Ô2Ø€Kr   Úgraphc                 óÀ  ^
^• [        5       m
[        5       m[        5       nS[        SS 4U
U4S jjnS
U
U4S jjnS[        4U
4S jjnU R                  SS9 GH  nT
R	                  5         TR	                  5         U" U5        [        Xa5       H  nUR                  Xv45        M     U(       d  MY  UR                  5       u  p‰T
(       a&  U" 5       U	:w  a  U" 5         T
(       a  U" 5       U	:w  a  M  [        U[        5      (       d  M_  UT;   a  T
R                  U5        ST
 3s  $ U" U5        [        X�5       H  nUR                  Xx45        M     U(       a  M©  GM     g	)Nr   r   c                 óJ   >• TR                  U 5        TR                  U 5        g r   )r   r   ©r   Úcurrent_pathÚcurrent_path_sets    €€r   Úadd_to_current_pathÚ+_detect_cycles.<locals>.add_to_current_path*   s   ø€ Ø×Ñ˜DÔ!Ø×Ñ˜TÕ"r   c                  óH   >• TR                  5       n TR                  U 5        g r   )ÚpopÚremover    s    €€r   Úpop_current_pathÚ(_detect_cycles.<locals>.pop_current_path.   s   ø€ Ø×ÑÓ!ˆØ×Ñ Õ%r   c                  ó   >• T S   $ )Néÿÿÿÿ© )r!   s   €r   Úcurrent_path_headÚ)_detect_cycles.<locals>.current_path_head2   s   ø€ Ø˜BÑÐr   Úoutput)Úopzcycle detected in path: zno cycle detected)r   N)	r   Úsetr   Ú
find_nodesÚclearr   r   r&   Ú
isinstance)r   r   Úpendingr#   r(   r-   ÚoriginÚchildÚcur_nodeÚparentr!   r"   s             @@r   Ú_detect_cyclesr:   #   sE  ù€ ô !&£€LÜ"%£%ÐÜ(-«€Gð#¤$ð #¨4÷ #ð #÷&ð &ð œt÷  ð ×"Ñ" hÐ"Ô/ˆØ×ÑÔØ×ÑÔ Ù˜FÔ#Ü*¨6ÖKˆEØ�N‰N˜E˜?Ö+ñ L÷ ˆgØ&Ÿ{™{›}ÑˆHö Ñ#4Ó#6¸&Ó#@Ù Ô"ö Ñ#4Ó#6¸&Õ#@ô ˜h¬×-Ñ-ÙàÐ+Ó+Ø×#Ñ# HÔ-Ø1°,°Ð@Ò@á Ô)ä.¨xÖQ�Ø—‘ Ð0Ö1ñ R÷! ‹gñ 0ð4 r   c                 óð  • U c  gS[         S[        4S jnS[        S[        S[        [            4S jnU R                   H³  nS H  nU" X45       H  nU" U5      s  s  s  $    M      UR
                  S	:X  aF  S
 H@  nUR                  U:X  a  Us  s  $ UR                  S:X  d  M+  XcR                  ;   d  M<  Us  s  $    [        UR                  UR                  45      u  pxU H  nU" U5      s  s  $    Mµ     g)NÚcpuÚxr   c                 óÄ   • [        U [        R                  5      (       a  U R                  $ [        U [        R                  5      (       a  U R                  R                  $ g)Nr<   )r4   ÚtorchÚdeviceÚtypeÚTensor)r=   s    r   Ú_device_typeÚ(_graph_device_type.<locals>._device_typeV   s>   € Ü�aœŸ™×&Ñ&Ø—6‘6ˆMÜ�aœŸ™×&Ñ&Ø—8‘8—=‘=Ð Ør   r   Úkeyc                 ó\   • XR                   ;  a  / $ [        U R                   U   5      u  p#U$ r   )Úmetar
   )r   rE   ÚflatÚ_s       r   Ú_flatten_metaÚ)_graph_device_type.<locals>._flatten_meta]   s*   € Ø—i‘iÓØˆIÜ˜tŸy™y¨™~Ó.‰ˆØˆr   )ÚvalÚexample_valueÚcall_method)ÚcudaÚxpuÚto)
r   Ústrr   r   Únodesr0   Útargetr   r
   r   )	r   rC   rJ   r   rE   ÚobjÚgpuÚ	flat_argsrI   s	            r   Ú_graph_device_typerX   R   sç   € Ø�}Øðœð ¤ô ðœDð ¤sð ¬t´C©yô ð —”ˆÛ+ˆCÙ$ TÖ/�Ù# CÓ(Ö(ó 0ñ ,ð
 �7‰7�mÓ#Û&�Ø—;‘; #Ó%Ø”JØ—;‘; $Õ&¨3·)±)Õ+;Ø”Jñ	 'ô $ T§Y¡Y°·±Ð$<Ó=‰ˆ	ÛˆCÙ Ó$Ô$ó ñ ð" r   )Úcollectionsr   Útypingr   r   r?   Útorch.fxr   r   r   Útorch.utils._ordered_setr	   Útorch.utils._pytreer
   Údictr   r   r   rR   r:   rX   r,   r   r   Ú<module>r_      s¿   ðÝ ß  ã ß )Ñ )Ý /Ý ,ðØ
ðØ)-¨d°J¸tÑ4DÐ.DÑ)Eðà	ˆ$�ZôðØ
ðØ)-¨d°J¸tÑ4DÐ.DÑ)Eðà�Ñôð,Øð,Ø+/°°jÀÑ6FÐ0FÑ+Gð,àô,ð^"˜h u™oð "°#õ "r   