o
    ei                     @   s   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
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ee d	efddZdS )    )deque)AnyOptionalN)Graphmap_argNode)
OrderedSet)tree_flatten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   c/var/www/addictedbytheproject.nl/epg/venv/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_path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_head2   s   z)_detect_cycles.<locals>.current_path_head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   r   _detect_cycles#   s8   

r2   c           	      C   s   | d u rdS dt dtfdd}dtdtdtt  fdd	}| jD ]S}d
D ]}|||D ]}||      S q#|jdkr\dD ]}|j|krK|    S |jdkr[||jv r[|    S q>t|j|j	f\}}|D ]	}||    S qdS )Ncpuxr   c                 S   s*   t | tjr	| jS t | tjr| jjS dS )Nr3   )r,   torchdevicetypeTensor)r4   r   r   r   _device_typeV   s
   z(_graph_device_type.<locals>._device_typer
   keyc                 S   s$   || j vrg S t| j | \}}|S r   )metar	   )r
   r:   flat_r   r   r   _flatten_meta]   s   
z)_graph_device_type.<locals>._flatten_meta)valexample_valuecall_method)cudaxputo)
r   strr   r   nodesr(   targetr   r	   r   )	r   r9   r>   r
   r:   objgpu	flat_argsr=   r   r   r   _graph_device_typeR   s*   


rK   )collectionsr   typingr   r   r5   torch.fxr   r   r   torch.utils._ordered_setr   torch.utils._pytreer	   dictr   r   r   rE   r2   rK   r   r   r   r   <module>   s8    




/