o
    j9:jg                     @   s   d dl 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dB defddZdS )    )AnyN)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   `/home/nk/hobo-godmode/plappi-mvp/.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           
   	   C   s   i }t | jD ]n}||v rq|tt||fg}d||< |ru|d \}}z=t|}t|ts0W q||d}|dkrLdd |D |g }	d|	 W   S |dkr`d||< ||tt||f W n t	yr   |
  d||< Y nw |sqdS )	N   r   c                 S   s   g | ]\}}|qS r   r   ).0r   _r   r   r   
<listcomp>>   s    z"_detect_cycles.<locals>.<listcomp>zcycle detected in path:    zno cycle detected)reversednodesiterr   next
isinstancer   getr   StopIterationpop)
r   r	   staterootstackparentchildrenchildchild_state
cycle_pathr   r   r   _detect_cycles"   s>   
r1   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 )Nr2   )r%   torchdevicetypeTensor)r3   r   r   r   _device_typeW   s
   z(_graph_device_type.<locals>._device_typer   keyc                 S   s$   || j vrg S t| j | \}}|S r   )metar   )r   r9   flatr   r   r   r   _flatten_meta^   s   
z)_graph_device_type.<locals>._flatten_meta)valexample_valuecall_method)cudaxputo)
r   strr   r   r"   optargetr   r   r   )	r   r8   r<   r   r9   objgpu	flat_argsr   r   r   r   _graph_device_typeS   s*   


rI   )typingr   r4   torch.fxr   r   r   torch.utils._ordered_setr   torch.utils._pytreer   dictr   r   r   rC   r1   rI   r   r   r   r   <module>   s6    




1