o
    h?	                     @   s   d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	 dede
ee	e f dee fdd	Zdede
ee	e f de	e fd
dZdede
ee	e f defddZdS )    )deque)Any)Graphmap_argNode)
OrderedSetnodenode_to_additional_depsreturnc                 C   8   t t  }t| j| jf|j | |v r|||   |S N)listr   r   argskwargsappendextendr   r	   r    r   _/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/torch/_dynamo/graph_utils.py_get_flat_args   
   
r   c                 C   r   r   )r   r   r   r   r   addupdater   r   r   r   _get_flat_args_unique   r   r   graphc           
         s   t   t t  }dtdd f fdd}d fdd}dtf fdd}| jd	d
D ]a}     || t||D ]	}|||f q?|r| \}}	 rb| |	krb|   rb| |	ksXt|tshqI|v rx | d    S || t||D ]	}|||f q|sKq,dS )Nr   r
   c                    s     |  |  d S r   )r   r   r   current_pathZcurrent_path_setr   r   add_to_current_path(   s   
z+_detect_cycles.<locals>.add_to_current_pathc                     s      } |  d S r   )popremover   r   r   r   pop_current_path,   s   z(_detect_cycles.<locals>.pop_current_pathc                      s    d S )Nr   r   )r   r   r   current_path_head0   s   z)_detect_cycles.<locals>.current_path_headoutput)opzcycle detected in path: zno cycle detected)r
   N)	r   setr   Z
find_nodesclearr   r   r   
isinstance)
r   r	   pendingr   r!   r#   originchildZcur_nodeparentr   r   r   _detect_cycles!   s8   

r-   N)collectionsr   typingr   Ztorch.fxr   r   r   Ztorch.utils._ordered_setr   dictr   r   r   strr-   r   r   r   r   <module>   s2    



