
    9i                        d dl mZ d dlmZmZ d dlZd dlmZmZm	Z	 d dl
mZ d dlmZ de	dee	ee	         f         d	ee	         fd
Zde	dee	ee	         f         d	ee	         fdZdedee	ee	         f         d	efdZdee         d	efdZdS )    )deque)AnyOptionalN)Graphmap_argNode)
OrderedSet)tree_flattennodenode_to_additional_depsreturnc                     t          t                               }t          | j        | j        f|j                   | |v r|                    ||                     |S N)listr   r   argskwargsappendextendr   r   r   s      L/var/www/icac/venv/lib/python3.11/site-packages/torch/_dynamo/graph_utils.py_get_flat_argsr      sU     9;;DTY$dk222&&&+D1222K    c                     t          t                               }t          | j        | j        f|j                   | |v r|                    ||                     |S r   )r	   r   r   r   r   addupdater   s      r   _get_flat_args_uniquer      sX     dDTY$dh///&&&+D1222Kr   graphc                   
 t                      
t                      t                      }dt          dd f
fd}d

fd}dt          f
fd}|                     d          D ]}
                                                                   ||           t          ||          D ]}|                    ||f           |r|                                \  }}	
r( |            |	k    r |             
r |            |	k    t          |t                    sY|v r
                    |           d
 c S  ||           t          ||          D ]}|                    ||f           |d	S )Nr   r   c                 \                         |                                |            d S r   )r   r   r   current_pathcurrent_path_sets    r   add_to_current_pathz+_detect_cycles.<locals>.add_to_current_path*   s1    D!!!T"""""r   c                  Z                                     }                     |            d S r   )popremover    s    r   pop_current_pathz(_detect_cycles.<locals>.pop_current_path.   s.    !!%%%%%r   c                       d         S )N )r!   s   r   current_path_headz)_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_cyclesr7   #   s-    !&L"%%%(-G#$ #4 # # # # # # #& & & & & & & t             ""h"// 2 2   F###*63JKK 	, 	,ENNE6?++++ 	2&{{}}Hf  ##4#4#6#6&#@#@  """  ##4#4#6#6&#@#@ h-- +++##H---@,@@@@@))).x9PQQ 2 2x01111#  	2& r   c                    | dS dt           dt          fd}dt          dt          dt          t                    fd}| j        D ]}dD ]!} |||          D ]} ||          c c c S "|j        d	k    r0d
D ]-}|j        |k    r|c c S |j        dk    r||j        v r|c c S .t          |j        |j	        f          \  }}|D ]} ||          c c S dS )Ncpuxr   c                     t          | t          j                  r| j        S t          | t          j                  r| j        j        S dS )Nr9   )r1   torchdevicetypeTensor)r:   s    r   _device_typez(_graph_device_type.<locals>._device_typeV   s@    a&& 	6Ma&& 	!8= ur   r   keyc                 V    || j         vrg S t          | j         |                   \  }}|S r   )metar
   )r   rA   flat_s       r   _flatten_metaz)_graph_device_type.<locals>._flatten_meta]   s0    diIty~..ar   )valexample_valuecall_method)cudaxputo)
r   strr   r   nodesr-   targetr   r
   r   )	r   r@   rF   r   rA   objgpu	flat_argsrE   s	            r   _graph_device_typerS   R   so   }u     D s tCy      % %+ 	) 	)C$}T3// ) )#|C((((((((() 7m##&  ;#%%JJJJJ;$&&3$)+;+;JJJJJ $TY$<==	1 	% 	%C<$$$$$$$	%5r   )collectionsr   typingr   r   r<   torch.fxr   r   r   torch.utils._ordered_setr	   torch.utils._pytreer
   dictr   r   r   rM   r7   rS   r*   r   r   <module>rZ      se                          ) ) ) ) ) ) ) ) ) ) / / / / / / , , , , , ,
)-dJt4D.D)E	$Z   
)-dJt4D.D)E   ,,+/j6F0F+G,, , , ,^"huo "# " " " " " "r   