
    i                         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y)    )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|j                  ||           |S N)listr   r   argskwargsappendextendr   r   r   s      S/var/www/html/engine/venv/lib/python3.12/site-packages/torch/_dynamo/graph_utils.py_get_flat_argsr      sJ     9;DTYY$dkk2&&+D12K    c                     t        t                  }t        | j                  | j                  f|j
                         | |v r|j                  ||           |S r   )r	   r   r   r   r   addupdater   s      r   _get_flat_args_uniquer      sL     dDTYY$dhh/&&+D12Kr   graphc                 r  
 t               
t               t               }dt        dd f
fd}d

fd}dt        f
fd}| j                  d      D ]  }
j	                          j	                           ||       t        ||      D ]  }|j                  ||f        |sR|j                         \  }}	
r |       |	k7  r |        
r |       |	k7  rt        |t              sG|v r
j                  |       d
 c S  ||       t        ||      D ]  }|j                  ||f        |r y	)Nr   r   c                 J    j                  |        j                  |        y r   )r   r   r   current_pathcurrent_path_sets    r   add_to_current_pathz+_detect_cycles.<locals>.add_to_current_path*   s    D!T"r   c                  H    j                         } j                  |        y 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   #   sM    !&L"%%(-G#$ #4 #& t   ""h"/ 2 F#*63JK 	,ENNE6?+	, &{{}Hf #4#6&#@ " #4#6&#@ h-++##H-1,@@).x9PQ 2x012! 24 r   c                    | y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(  r@d
D ];  }|j                  |k(  r|c c S |j                  dk(  s(||j                  v s7|c c S  t        |j                  |j                  f      \  }}|D ]  } ||      c c S   y)Ncpuxr   c                     t        | t        j                        r| j                  S t        | t        j                        r| j                  j                  S y)Nr9   )r1   torchdevicetypeTensor)r:   s    r   _device_typez(_graph_device_type.<locals>._device_typeV   s8    a&66Ma&88== r   r   keyc                 \    || j                   vrg S t        | j                   |         \  }}|S r   )metar
   )r   rA   flat_s       r   _flatten_metaz)_graph_device_type.<locals>._flatten_meta]   s.    diiItyy~.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   s   }  D s tCy   %+ 	)C$T3/ )#C(()	)
 77m#& ;;#%J;;$&3$))+;J	 $TYY$<=	1 	%C$$	%%" r   )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      s        ) ) / ,
)-dJt4D.D)E	$Z
)-dJt4D.D)E,,+/j6F0F+G,,^"huo "# "r   