
    rh?	                         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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y)    )deque)Any)Graphmap_argNode)
OrderedSet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      l/var/www/html/ai-insurance-compliance-backend/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_head0   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_cyclesr5   !   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   N)collectionsr   typingr   torch.fxr   r   r   torch.utils._ordered_setr   dictr   r   r   strr5   r(   r   r   <module>r<      s      ) ) /
)-dJt4D.D)E	$Z
)-dJt4D.D)E,,+/j6F0F+G,,r   