
    Ph                     
   d dl Z d dlmZ d dlmZ d dlmZ e j                  j                  Z	d Z
e	j                  e	j                  e	j                  e	j                  e	j                  e	j                   e	j"                  e	j$                  e	j&                  e	j(                  e	j*                  e	j,                  e	j.                  e	j0                  e	j2                  gZde j                  j6                  j8                  fdZd Zd Zd	 Z y)
    N)tree_flatten)_pytreec                 r    t        | j                  d      r| j                  j                  S | j                  S )Noverloadpacket)hasattrtargetr   )nodes    iC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_functorch/compile_utils.pyget_aten_targetr   
   s+    t{{,-{{)));;    fx_gc                 D   t        j                         }i i }i }| j                  D ]  }|j                  dk(  s/|j                  dk(  s |j                  dk(  st	        |      t
        v r|j                  |fd      }||<   \fd} ||j                        \  }} ||j                        \  }	}
|j                  |||	|
d}t        ||	f      }|j                  |f}||v }|r||   |k(  r	||   |<   |j                  |fd      }||<   |r|||<   |||<    |S )Nplaceholderoutputget_attrc                     |    S N xenvs    r
   <lambda>zfx_graph_cse.<locals>.<lambda>    	    Ar   c                 |   t        |       \  } }t        t        |             D ]  }| |   }t        |t        j
                  j                  j                        r|v r|   | |<   t        |t        j                  t        j                  t        j                  f      s||j                  | |<    t        |       |fS r   )r   rangelen
isinstancetorchfxr	   NodeSymBoolSymIntSymFloattuple)arg_listspecivr   s       r
   
substitutez fx_graph_cse.<locals>.substitute%   s    !-h!7$s8}-A A!!UXX]]%7%78Q#X&)!f!!emmU\\5>>%RS&'ff . X,,r   )r   args	args_speckwargskwargs_specc                     |    S r   r   r   s    r
   r   zfx_graph_cse.<locals>.<lambda>@   r   r   )r   Graphnodesopr   rand_ops	node_copyr*   r,   r   hash)r   	new_graphhash_env	token_mapnnew_noder)   r*   r+   r,   r-   tokenhash_arghash_valhash_val_in_hash_envr   s                  @r
   fx_graph_cser>      sG   
I
CHIZZ 44= ADDH$4
8Jo^_N`dlNl **1.>?HCF- )0OD)",QXX"6FK  !xxI%kCE T6N+H(+H $,x#7 #	((;u(D!(+A **1.>?HCF'%-"&+	(#Q T r   c                     | j                   j                  D ]L  }t        |j                  t        j
                  j                        s2|j                  j                  |_        N | j                          y)z
    Modifies the target of graph nodes in :attr:`gm` to strip overloads.

    Args:
        gm(fx.GraphModule): The input Fx graph module to be modified
    N)	graphr0   r   r   r   _ops
OpOverloadr   	recompile)gmr	   s     r
   strip_overloadsrE   I   sJ     dkk5::#8#89++44DK  LLNr   c                 B    t        t        d | j                              S )Nc                      | j                   dk(  S )Nr   )r1   )r   s    r
   r   z"get_placeholders.<locals>.<lambda>W   s    !6r   )listfilterr0   )r@   s    r
   get_placeholdersrJ   V   s    6DEEr   c                     | j                   D ]5  }|j                  dk(  st        j                  |j                  d         c S  t        d      )Nr   r   zNo output node found)r0   r1   pytreetree_leavesr*   AssertionError)r@   r	   s     r
   get_outputsrO   Y   sC    77h%%diil33  /
00r   )!r   torch.fxr   torch.utils._pytreer   torch.utilsr   rL   opsatenr   dropout_fused_dropout_standard_gamma	bernoullimultinomialnative_dropoutnormalpoissonbinomialrrelu	rand_likerandrandintrandnrandpermr2   r@   r/   r>   rE   rJ   rO   r   r   r
   <module>rd      s      , )yy~~ LL$--t/C/CNND,,d.A.AKKt}}djjNNDIIt||TZZP/uxx~~++ /d
F1r   