U
    zh-,                     @   s  U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZmZmZ d dlmZ dZee	j ed< zd dlZW n ek
r   dZY nX d dlZd dlmZ d dlmZ ddlmZmZmZmZ dd	l m!Z!m"Z"m#Z#m$Z$ dd
l%m&Z&m'Z' ddl(m)Z) ej*Z*dZ+e,e-Z.dd Z/e0dddZ1dd Z2dd Z3dd Z4e0dddZ5dSe	j6ddddZ7d de8ee' dd d!Z9G d"d# d#Z:G d$d% d%Z;G d&d' d'Z<e0dd(d)Z=e0dd*d+Z>e0dd,d-Z?dTd.d/Z@ejAd0d1d2ZBdUd5d6ZCejDd7d fee8 ee8 ejEee0ejFf e8d8d9d:ZGd;d< ZHdd=d> d?d@dAZIdBdC ZJdDdE ZKdFdG ZLdHdI ZMdJdK ZNdLdM ZOdNdO ZPdVdQdRZQdS )W    N)ListOptionalSequenceUnion)patchnp)fx)OutputGraph   )config
eval_frameoptimize_assertreset)create_instructiondebug_checksis_generatortransform_code_object)CheckFunctionManagerGuardedCode)same   c                 C   s    | d krd S |    | jS N)detachcloneZrequires_grad_requires_gradx r   G/var/www/html/venv/lib/python3.8/site-packages/torch/_dynamo/testing.pyclone_me)   s    r   )returnc                 C   s   t dd| S )Nz^_orig_mod[.] )resub)namer   r   r   remove_optimized_module_prefix/   s    r%   c                 C   s(  g }| | | | t }t }|  D ]N\}}t| tjrHt|}|}	|j}
|jd krft	|}
|
||d < |	||< q,| | | | t }| 
 D ]$\}}t| tjrt|}|||< q| | |D ]P}t|ttfr
|D ]}t|tjr| |j qqt|tjr| |j q|S )Nz.grad)appenddictZnamed_parameters
isinstancer   ZOptimizedModuler%   gradtorchZ
zeros_likeZnamed_bufferstuplelistTensor)modelZ
predictionZlossexample_inputsresultsZgradsparamsr$   paramZ
param_copyr)   buffersbufferexampleZinpr   r   r   collect_results3   s<    








r6   c                 C   s^   t | tjr| jS t | ttfr2tdd | D S | d kr>dS t | trLdS tdt	| d S )Nc                 s   s   | ]}t |V  qd S r   )requires_bwd_pass.0r   r   r   r   	<genexpr>_   s     z$requires_bwd_pass.<locals>.<genexpr>FDon't know how to reduce)
r(   r*   r-   r   r,   r+   anyintNotImplementedErrortypeoutr   r   r   r7   [   s    
r7   c                 C   s   t | tjr|  |   S t | ttfrDtdd | D t|  S t| j	dkr\t
| jS t| j	dkrt| j S t | trtdd |  D t|   S tdt| dS )z/Reduce the output of a model to get scalar lossc                 s   s   | ]}t |V  qd S r   reduce_to_scalar_lossr8   r   r   r   r:   m   s     z(reduce_to_scalar_loss.<locals>.<genexpr>)ZMaskedLMOutputZSeq2SeqLMOutputZ!CausalLMOutputWithCrossAttentionsZSquashedNormalc                 s   s   | ]}t |V  qd S r   rB   )r9   valuer   r   r   r:   w   s     r;   N)r(   r*   r-   sumZnumelr,   r+   lenr?   __name__rC   ZlogitsZmeanr'   valueskeysr>   r@   r   r   r   rC   g   s    


rC   c                  C   s0   t jt jtd} t j| s,t |  | S )Nz../debug)ospathjoindirname__file__existsmkdir)rK   r   r   r   	debug_dir}   s    
rQ   r!   )coder    c              	   C   sV   t tjt | d6}|t|  dt|  d| d W 5 Q R X d S )Nwz


)	openrJ   rK   rL   rQ   writedisBytecodeinfo)r$   rR   extrafdr   r   r   
debug_dump   s    (r\   )skip)r]   r    c                C   s`   dd }t | jrdS t| j t| j|}ti ddddddit t | jd	}t|t|j	S )zused to debug jump updatesc                 S   s$   |  dtd |  dtd d S )Nr   NOP)insertr   )Zinstructionscode_optionsr   r   r   insert_nops   s    z&debug_insert_nops.<locals>.insert_nopsNFZ_idr   )	r`   Zcompiler_fnZroot_txZexportZexport_constraintsZframe_stateZlocal_scopeZglobal_scopef_code)
r   rb   r   r   r	   localsglobalsr   r   Zcheck_fn)frameZ
cache_sizehooks_r]   ra   rR   graphr   r   r   debug_insert_nops   s"    

ri   c                   @   s6   e Zd Zdd Zejjeej dddZ	dd Z
dS )	CompileCounterc                 C   s   d| _ d| _d S Nr   frame_countop_countselfr   r   r   __init__   s    zCompileCounter.__init__gmr/   c                 C   s:   |  j d7  _ |jjD ]}d|jkr|  jd7  _q|jS )Nr
   call)rm   rh   nodesoprn   forward)rp   rs   r/   noder   r   r   __call__   s
    
zCompileCounter.__call__c                 C   s   d| _ d| _d S rk   rl   ro   r   r   r   clear   s    zCompileCounter.clearN)rG   
__module____qualname__rq   r*   r   GraphModuler   r-   ry   rz   r   r   r   r   rj      s   rj   c                   @   s.   e Zd Zdd Zejjeej dddZ	dS )CompileCounterWithBackendc                 C   s   d| _ d| _|| _g | _d S rk   )rm   rn   backendgraphs)rp   r   r   r   r   rq      s    z"CompileCounterWithBackend.__init__rr   c                 C   s\   ddl m} |  jd7  _|jjD ]}d|jkr"|  jd7  _q"| j| || j	||S )Nr
   )lookup_backendrt   )
Zbackends.registryr   rm   rh   ru   rv   rn   r   r&   r   )rp   rs   r/   r   rx   r   r   r   ry      s    
z"CompileCounterWithBackend.__call__N
rG   r{   r|   rq   r*   r   r}   r   r-   ry   r   r   r   r   r~      s   r~   c                   @   s.   e Zd Zdd Zejjeej dddZ	dS )EagerAndRecordGraphsc                 C   s
   g | _ d S r   )r   ro   r   r   r   rq      s    zEagerAndRecordGraphs.__init__rr   c                 C   s   | j | |jS r   )r   r&   rw   )rp   rs   r/   r   r   r   ry      s    zEagerAndRecordGraphs.__call__Nr   r   r   r   r   r      s   r   c                 C   s   t | } tdd| S )Nz(?m)^ *#.*\n?r!   )strr"   r#   rR   r   r   r   strip_comment   s    r   c                 C   s   d dd | dD S )NrT   c                 S   s   g | ]}|  qS r   )rstrip)r9   liner   r   r   
<listcomp>   s     z)remove_trailing_space.<locals>.<listcomp>)rL   splitr   r   r   r   remove_trailing_space   s    r   c                 C   s   t t| S r   )r   r   )Zgm_strr   r   r   normalize_gm   s    r   c                 C   s   t js|d k	r|}t }dd t|D }dd t|D }|| }	|| }
t  t||}|| }|| }|| }|| }t  | t||	 | t||	 | t||
 | t||
 | |j	| |d k	r| |j
| d S )Nc                 S   s   g | ]}t d d qS 
   r*   randnr9   rg   r   r   r   r      s     z!standard_test.<locals>.<listcomp>c                 S   s   g | ]}t d d qS r   r   r   r   r   r   r      s     )r   Zassume_static_by_defaultrj   ranger   r   Z
assertTruer   ZassertEqualrm   rn   )rp   fnnargsZexpected_opsZexpected_ops_dynamicZexpected_frame_countactualZargs1Zargs2Zcorrect1Zcorrect2Zopt_fnZval1aZval2aZval1bZval2br   r   r   standard_test   s*    r   )rs   c                 C   s   | j S r   )rw   rr   r   r   r   dummy_fx_compile  s    r   T皙?c                 C   s.   |sdS ||kr| ddS | dd|dS )NERRORz.3fzx SAMEzx p=z.2fr   )ZspeedupZpvalueZ
is_correctZpvalue_thresholdr   r   r   format_speedup  s
    r   cpu)sizestridedtypedevice
extra_sizec                 C   s~   t dd t| |D d | }|jr^|jdkrLtj|tj|dj|d}qptj|||d}ntj|g||d}t	|| |S )Nc                 s   s   | ]\}}|d  | V  qdS )r
   Nr   )r9   shaper   r   r   r   r:     s     zrand_strided.<locals>.<genexpr>r
   )r   r   )r   )r   r   r   )
rE   zipZis_floating_pointitemsizer*   r   Zfloat16toZzerosZ
as_strided)r   r   r   r   r   Zneeded_sizer4   r   r   r   rand_strided  s    
r   c                    s   t   fdd}|S )Nc               
      sN   t  <}D ]\}}}|t||| q | |W  5 Q R  S Q R X d S r   )
contextlib	ExitStackenter_contextr   object)argskwargsstackmoduleattrvalr   patchesr   r   _fn0  s    
z"_make_fn_with_patches.<locals>._fn)	functoolswraps)r   r   r   r   r   r   _make_fn_with_patches/  s    r   c                 C   s   | S r   r   r   r   r   r   <lambda><      r   )
xfail_prop	decoratorc                G   s   t | | j | ji }|j|_t| D ]}|drt| |}t|s\t||t| | q(| | }	t	|f| }
|	|
_|d k	rt
||rt|
}
t||	||
 q(t
||s(t||t| | q(|S )NZtest_)r?   rG   	__bases__r|   dir
startswithgetattrcallablesetattrr   hasattrunittestexpectedFailure)clsZ
cls_prefixZ	fn_suffixr   r   r   ZDummyTestClassr$   r   new_nameZnew_fnr   r   r   make_test_cls_with_patches;  s"    



r   c                 C   s   t jdkr| S t| S )N)r      sysversion_infor   r]   r   r   r   r   skipIfNotPy311U  s    
r   c                 C   s   t jdkr| S t| S N)r      r   r   r   r   r   skipIfNotPy312[  s    
r   c                 C   s   t jdkrt| S | S r   )r   r   r   r   r   r   r   r   xfailIfPy312a  s    

r   c                 C   s   t jdkrt| S | S r   r   r   r   r   r   skipIfPy312g  s    

r   c                 C   s
   d| _ | S NT)Z_expected_failure_dynamicr   r   r   r   expectedFailureDynamico  s    r   c                 C   s
   d| _ | S r   )Z!_expected_failure_codegen_dynamicr   r   r   r   expectedFailureCodegenDynamicu  s    r   c                 C   s
   d| _ | S r   )Z!_expected_failure_dynamic_wrapperr   r   r   r   expectedFailureDynamicWrapper{  s    r   Fc                 C   sR   t d td tr$tjd | rNdd lm  m} |dt	|
  d S )Ni9  r   )r*   Zmanual_seedrandomseedr   Ztorch_xla.core.xla_modelcoreZ	xla_modelZset_rng_stater   Z
xla_device)Zuse_xlaZxmr   r   r   reset_rng_state  s    

r   )r!   )NNr
   )Tr   )F)Rr   rW   r   loggingos.pathrJ   r   r"   r   typesr   typingr   r   r   r   Zunittest.mockr   r   
ModuleType__annotations__numpyModuleNotFoundErrorr*   r   Ztorch._dynamo.output_graphr	   r!   r   r   r   r   Zbytecode_transformationr   r   r   r   Zguardsr   r   utilsr   unsupportedthree	getLoggerrG   logr   r   r%   r6   r7   rC   rQ   CodeTyper\   r=   ri   rj   r~   r   r   r   r   r   r}   r   r   Zfloat32r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    

(	
   
!
 