o
    "i-,                     @   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yU   dZY nw 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/de0fddZ1dd Z2dd Z3dd Z4de0fddZ5dWde	j6ddfddZ7d dde8dee' fd d!Z9G d"d# d#Z:G d$d% d%Z;G d&d' d'Z<de0fd(d)Z=de0fd*d+Z>de0fd,d-Z?			dXd.d/Z@d0ejAfd1d2ZBdYd5d6ZCejDd7d fd8ee8 d9ee8 d:ejEd;ee0ejFf d<e8f
d=d>ZGd?d@ ZHddAdB dCdDdEZIdFdG ZJdHdI ZKdJdK ZLdLdM ZMdNdO ZNdPdQ ZOdRdS ZPdZdUdVZQdS )[    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 u rd S |    | jS N)detachclonerequires_grad_requires_gradx r   S/home/ubuntu/SoloSpeech/.venv/lib/python3.10/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 ]'\}}t| tjr$t|}|}	|j}
|jd u r3t	|}
|
||d < |	||< q| | | | t }| 
 D ]\}}t| tjr]t|}|||< qO| | |D ]'}t|ttfr|D ]}t|tjr| |j qtqit|tjr| |j qi|S )Nz.grad)appenddictnamed_parameters
isinstancer   OptimizedModuler&   gradtorch
zeros_likenamed_bufferstuplelistTensor)model
predictionlossexample_inputsresultsgradsparamsr%   param
param_copyr,   buffersbufferexampleinpr   r   r   collect_results3   sB   








r@   c                 C   sZ   t | tjr	| jS t | ttfrtdd | D S | d u rdS t | tr&dS tdt	| )Nc                 s       | ]}t |V  qd S r   )requires_bwd_pass.0r   r   r   r   	<genexpr>_       z$requires_bwd_pass.<locals>.<genexpr>FDon't know how to reduce)
r*   r-   r2   r   r1   r0   anyintNotImplementedErrortypeoutr   r   r   rB   [   s   
rB   c                 C   s   t | tjr|  |   S t | ttfr"tdd | D t|  S t| j	dv r.t
| jS t| j	dkr:| j S t | trPtdd |  D t|   S tdt| )z/Reduce the output of a model to get scalar lossc                 s   rA   r   reduce_to_scalar_lossrC   r   r   r   rE   m   rF   z(reduce_to_scalar_loss.<locals>.<genexpr>)MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsSquashedNormalc                 s   rA   r   rN   )rD   valuer   r   r   rE   w   rF   rG   )r*   r-   r2   sumnumelr1   r0   lenrK   __name__rO   logitsmeanr(   valueskeysrJ   rL   r   r   r   rO   g   s   


rO   c                  C   s0   t jt jtd} t j| st |  | S )Nz../debug)ospathjoindirname__file__existsmkdir)r^   r   r   r   	debug_dir}   s   
rd   r"   codec              	   C   sl   t tjt | d!}|t|  dt|  d| d W d    d S 1 s/w   Y  d S )Nwz


)	openr]   r^   r_   rd   writedisBytecodeinfo)r%   re   extrafdr   r   r   
debug_dump   s
   ("ro   )skiprp   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   )instructionscode_optionsr   r   r   insert_nops   s   z&debug_insert_nops.<locals>.insert_nopsNF_idr   )	rt   compiler_fnroot_txexportexport_constraintsframe_statelocal_scopeglobal_scopef_code)
r   r~   r   r   r	   localsglobalsr   r   check_fn)frame
cache_sizehooks_rp   ru   re   graphr   r   r   debug_insert_nops   s"   

r   c                   @   s8   e Zd Zdd Zdejjdeej fddZ	dd Z
d	S )
CompileCounterc                 C      d| _ d| _d S Nr   frame_countop_countselfr   r   r   __init__      
zCompileCounter.__init__gmr6   c                 C   s:   |  j d7  _ |jjD ]}d|jv r|  jd7  _q|jS )Nr
   call)r   r   nodesopr   forward)r   r   r6   noder   r   r   __call__   s   
zCompileCounter.__call__c                 C   r   r   r   r   r   r   r   clear   r   zCompileCounter.clearN)rX   
__module____qualname__r   r-   r   GraphModuler   r2   r   r   r   r   r   r   r      s    r   c                   @   0   e Zd Zdd Zdejjdeej fddZ	dS )CompileCounterWithBackendc                 C   s   d| _ d| _|| _g | _d S r   )r   r   backendgraphs)r   r   r   r   r   r      s   
z"CompileCounterWithBackend.__init__r   r6   c                 C   s\   ddl m} |  jd7  _|jjD ]}d|jv r|  jd7  _q| j| || j	||S )Nr
   )lookup_backendr   )
backends.registryr   r   r   r   r   r   r   r'   r   )r   r   r6   r   r   r   r   r   r      s   
z"CompileCounterWithBackend.__call__N
rX   r   r   r   r-   r   r   r   r2   r   r   r   r   r   r      s     r   c                   @   r   )EagerAndRecordGraphsc                 C   s
   g | _ d S r   )r   r   r   r   r   r      s   
zEagerAndRecordGraphs.__init__r   r6   c                 C   s   | j | |jS r   )r   r'   r   )r   r   r6   r   r   r   r      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$   re   r   r   r   strip_comment   s   r   c                 C   s   d dd | dD S )Nrg   c                 S   s   g | ]}|  qS r   )rstrip)rD   liner   r   r   
<listcomp>   s    z)remove_trailing_space.<locals>.<listcomp>)r_   splitr   r   r   r   remove_trailing_space   s   r   c                 C   s   t t| S r   )r   r   )gm_strr   r   r   normalize_gm   s   r   c                 C   s   t js	|d ur	|}t }dd t|D }dd t|D }|| }	|| }
t  t||}|| }|| }|| }|| }t  | t||	 | t||	 | t||
 | t||
 | |j	| |d urv| |j
| d S d S )Nc                 S      g | ]}t d d qS 
   r-   randnrD   r   r   r   r   r          z!standard_test.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   r      r   )r   assume_static_by_defaultr   ranger   r   
assertTruer   assertEqualr   r   )r   fnnargsexpected_opsexpected_ops_dynamicexpected_frame_countactualargs1args2correct1correct2opt_fnval1aval2aval1bval2br   r   r   standard_test   s,   r   r   c                 C   s   | j S r   )r   )r   r6   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   )speeduppvalue
is_correctpvalue_thresholdr   r   r   format_speedup  s
   r   cpusizestridedtypedevice
extra_sizec                 C   s   t dd t| |D d | }|jr0|jdkr'	 tj|tj|dj|d}ntj|||d}n	tj|g||d}t	|| |S )Nc                 s   s     | ]\}}|d  | V  qdS )r
   Nr   )rD   shaper   r   r   r   rE     s    zrand_strided.<locals>.<genexpr>r
   )r   r   )r   )r   r   r   )
rU   zipis_floating_pointitemsizer-   r   float16tozeros
as_strided)r   r   r   r   r   needed_sizer=   r   r   r   rand_strided  s   
r   c                    s   t   fdd}|S )Nc               	      s^   t  !}D ]\}}}|t||| q | i |W  d    S 1 s(w   Y  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><  s    r   )
xfail_prop	decoratorc                G   s   t | | j | ji }|j|_t| D ]P}|drVt| |}t|s.t||t| | q| | }	t	|g|R  }
|	|
_|d urMt
||rMt|
}
t||	||
 qt
||sdt||t| | q|S )Ntest_)rK   rX   	__bases__r   dir
startswithgetattrcallablesetattrr   hasattrunittestexpectedFailure)cls
cls_prefix	fn_suffixr   r   r   DummyTestClassr%   r   new_namenew_fnr   r   r   make_test_cls_with_patches;  s$   



r  c                 C      t jdkr| S t| S )N)r      sysversion_infor   rp   r   r   r   r   skipIfNotPy311U     

r  c                 C   r  N)r      r  r  r   r   r   skipIfNotPy312[  r  r  c                 C      t jdkr
t| S | S r  )r	  r
  r   r   r  r   r   r   xfailIfPy312a     

r  c                 C   r  r  r  r  r   r   r   skipIfPy312g  r  r  c                 C   
   d| _ | S NT)_expected_failure_dynamicr  r   r   r   expectedFailureDynamico     r  c                 C   r  r  )!_expected_failure_codegen_dynamicr  r   r   r   expectedFailureCodegenDynamicu  r  r  c                 C   r  r  )!_expected_failure_dynamic_wrapperr  r   r   r   expectedFailureDynamicWrapper{  r  r  Fc                 C   sV   t d td trtjd | r)dd lm  m} |dt	|
  d S d S )Ni9  r   )r-   manual_seedrandomseedr   torch_xla.core.xla_modelcore	xla_modelset_rng_stater   
xla_device)use_xlaxmr   r   r   reset_rng_state  s   

r(  )r"   )NNr
   )Tr   )F)Rr   rj   r   loggingos.pathr]   r  r#   r	  typesr   typingr   r   r   r   unittest.mockr   r   
ModuleType__annotations__numpyModuleNotFoundErrorr-   r   torch._dynamo.output_graphr	   r"   r   r   r   r   bytecode_transformationr   r   r   r   guardsr   r   utilsr   unsupportedthree	getLoggerrX   logr    r   r&   r@   rB   rO   rd   CodeTypero   rI   r   r   r   r   r   r   r   r   r   r   r   float32r   r   r   r   r  r  r  r  r  r  r  r  r(  r   r   r   r   <module>   s   

(
	

!

