
    Ph                     @   d dl Z d dlZd dlmZmZ d dlZd dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZmZmZ d dlmZm Z  d dl!m"Z"  ee#d      Z$d Z% G d d      Z&da'e jP                  d        Z)e jP                  d        Z*y)    N)ListOptional)	call_hookGetItemSourceLocalSource)counterslazy_format_graph_code)getArtifactLoggerclone_preserve_strides)FakeTensorMode)GraphModule)	decomposedisable_autocast_cachedisable_proxy_modes_tracingfetch_tensor_proxyProxyTorchDispatchModePythonKeyTracertrack_tensor_tree)
DimDynamicShapeEnv)Proxycompiled_autogradc                      | t        |       S | S Nr   )xs    jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/compiled_autograd.pymaybe_cloner      s    }%a((H    c                       e Zd ZddZd Zedefd       Zdee	j                     dee   fdZd	 Zd
efdZd Zd Zd Zd Zd Zd Zy)AutogradCompilerInstancereturnNc                 4   || _         t        j                         | _        | j                  j                  | _        t               | _        t        dd| j                        | _        t               | _
        t        | j                  d      | _        d | _        y )NT)allow_fallback_kernelsallow_non_fake_inputs	shape_envsymbolic)compiler_fn
contextlib	ExitStackstackcloser   r'   r   fake_tensor_moder   	fx_tracerr   
proxy_modehooks_proxy)selfr)   s     r   __init__z!AutogradCompilerInstance.__init__#   st    &))+
ZZ%%
! .#'"&nn!

 )*0L,0r    c                 t    t        |t        j                        sJ | j                  j	                  ||      S )N)source)
isinstancetorchTensorr.   from_tensor)r2   r   r5   s      r   	wrap_fakez"AutogradCompilerInstance.wrap_fake1   s2    !U\\***$$0060BBr    c                 ,    t        t        |       |      S r   r   )nameidxs     r   r5   zAutogradCompilerInstance.source5   s    [.44r    inputssizesc                 t   t         d   dxx   dz  cc<   t        j                  j                         | j                  _        t        j                  j                  t              | j                  _	        i | j                  _
        | j                  j                  dddi       }| j                  j                  dddi       }| j                  j                  dd	di       | _        t        |      D cg c]'  \  }}| j                  || j                  d|            ) }}}t!        t#        |            D cg c]  }||   	 }}| j%                  ||       t        |      D 	cg c]@  \  }}	| j&                  j)                  |	| j                  d|      t*        j,                        B }}}	| j%                  ||       | j.                  j1                  t3        i              | j.                  j1                  | j4                         | j.                  j1                  | j6                  j8                         | j.                  j1                  | j6                         | j.                  j1                  t;                      | j.                  j1                  t=        d
             ||fS c c}}w c c}w c c}	}w )Nr   captures   )
tracer_clsplaceholderr>    r?   hooksT)enable_current)r	   r7   nnModuler/   rootfxGraphr   graphtensor_attrscreate_proxyr1   	enumerater:   r5   rangelenbind_tensors_to_proxiesr'   $create_unspecified_symint_and_symbolr   DYNAMICr,   enter_contextr   r.   r0   sym_moder   r   )
r2   r>   r?   
args_proxysizes_proxyr=   r   iproxiesvals
             r   begin_capturez&AutogradCompilerInstance.begin_capture9   s1   $%j1Q61#hhoo/$xx~~~I&(#^^00"bQ
nn11-"bQ>>66}grSUV
 $F+
+Q NN1dkk(C89+ 	 
 +0F*<=*<Q:a=*<=$$VW5 &e,
 -S NN??GS)""
 - 	 
 	$$UK8 	

  2/

  !6!67

  !9!9:

  1

  !7!9:

  !<D!QRu}3
 >
s   3,J)8J/&AJ4c                     | j                   j                  dt        |g|D cg c]  }| j                  |       c}i       S c c}w )Ncall_function)r/   rO   r   to_proxy)r2   hookargsr   s       r   proxy_call_hookz(AutogradCompilerInstance.proxy_call_hook^   sQ    ~~**,01Dq$--"D1 
 	

 2s   ArZ   c                     | j                   J | j                   |   }| j                  |||         }t               5  t        ||         ||<   | j	                  ||   g|g       d d d        |S # 1 sw Y   |S xY wr   r1   rc   r   r   rS   )r2   r>   hook_idrZ   ra   proxys         r   tensor_pre_hookz(AutogradCompilerInstance.tensor_pre_hooki   s    +++($$1I
 )*#F1I.F1I((&)ug> +  + s   )A00A:c                    | j                   J | j                   |   }| j                  ||      }t               5  |D cg c]  }t        |       }}| j	                  ||       d d d        |S c c}w # 1 sw Y   |S xY wr   re   )r2   r>   rf   ra   r[   r   s         r   pre_hookz!AutogradCompilerInstance.pre_hooku   s    +++(&&
 )*.45fk!nfF5((9 +  6 + s   A4A/A4/A44A>c                    | j                   J | j                   |   }| j                  |||      }t               5  |D cg c]  }t        |       }}| j	                  ||       d d d        |S c c}w # 1 sw Y   |S xY wr   re   )r2   outputsr>   rf   ra   r[   r   s          r   	post_hookz"AutogradCompilerInstance.post_hook   s    +++(&&

 )*/67w!{1~wG7((': +  8 + s   A5 A0A50A55A?c                    t        |t        j                        sJ | j                  J | j                  |   }| j	                  ||      }t               5  t        |      g}| j                  ||       d d d        |S # 1 sw Y   |S xY wr   )r6   r7   r8   r1   rc   r   r   rS   )r2   inputrf   ra   r[   s        r   post_acc_grad_hookz+AutogradCompilerInstance.post_acc_grad_hook   s    %...+++(&&
 )* '(E((8 +  + s   A??B	c           	         | j                   j                          | j                  j                  dd| j                  j	                  | j                  |            fi        t        | j                  j                  | j                  j                  d      }t        j                  dt        d|             | j                  |      S )NoutputCompiledAutogradz%szCompiled autograd graph)r,   r-   r/   create_node
create_argr`   r   rJ   rM   compiled_autograd_loginfor
   r)   )r2   rl   rM   s      r   end_capturez$AutogradCompilerInstance.end_capture   s    

""^^&&t}}W'=>@		
 NN!5!57I
 	""()BEJ	
 &&r    c                 \    |y t        |t              r|D cg c]  } j                  |       c}S t        |t              rt         fd|D              S t        |t        j
                  t        j                  f      sJ  t         j                        |      j                  S c c}w )Nc              3   @   K   | ]  }j                  |        y wr   )r`   ).0r   r2   s     r   	<genexpr>z4AutogradCompilerInstance.to_proxy.<locals>.<genexpr>   s     51aq)1s   )
r6   listr`   tupler7   r8   SymIntr   r/   rg   )r2   tr   s   `  r   r`   z!AutogradCompilerInstance.to_proxy   s    9a./0aDMM!$a00a51555!ellELL9:::1!$..1!4:::	 1s   B)c                    t        |t        j                  j                        r$t	        t        |            D cg c]  }||   	 }}t        |      t        |      k(  sJ t        ||d | j                         y c c}w )N)constanttracer)r6   r7   rK   r   rQ   rR   r   r/   )r2   tensorsr[   rZ   s       r   rS   z0AutogradCompilerInstance.bind_tensors_to_proxies   se    guxx~~.+0W+>?+>awqz+>G?7|s7|+++'7T$..Q @s   A<)r#   N)__name__
__module____qualname__r3   r:   staticmethodr   r5   r   r7   r8   intr]   rc   rh   rj   rm   rp   rx   r`   rS   rE   r    r   r"   r"   "   sy    1C 5] 5 5#D$6 #tCy #J	

# 

' ;Rr    r"   Fc              #     K   t         j                  j                  j                  j	                  t        j                  t        |             }da	 t         j                  j                  d      5  d  d d d        |sdat         j                  j                  j                  j	                  |       y # 1 sw Y   AxY w# |sdat         j                  j                  j                  j	                  |       w xY ww)NTF)r7   _C_dynamor   set_autograd_compiler	functoolspartialr"   compiled_autograd_enabledautogradset_multithreading_enabled)r)   priors     r   enabler      s     HH..DD2K@E !%H^^66u= > (-%**@@G >= (-%**@@Gs6   AC=C 0B55C =8C=5B>:C 9C::C=c               #   f  K   t         j                  j                  j                  j	                  d       } da	 d  | rdat         j                  j                  j                  j	                  |        y # | rdat         j                  j                  j                  j	                  |        w xY ww)NFT)r7   r   r   r   r   r   )r   s    r   disabler      s     HH..DDTJE %H(,%**@@G (,%**@@Gs   6B1A5 8B159B..B1)+r*   r   typingr   r   r7   torch._dynamo.external_utilsr   torch._dynamo.sourcer   r   torch._dynamo.utilsr	   r
   torch._loggingr   torch._prims_commonr   torch._subclassesr   torch.fxr   "torch.fx.experimental.proxy_tensorr   r   r   r   r   r   r   %torch.fx.experimental.symbolic_shapesr   r   torch.fx.proxyr   r   rv   r   r"   r   contextmanagerr   r   rE   r    r   <module>r      s      !  2 ; @ , 6 ,     G  )(4GH WR WRt "  H H 	H 	Hr    