
    WjJ                     j   U d 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ZddlmZmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddl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$ d
dl%m&Z&m'Z'm(Z(m)Z) d
dl*m+Z+m,Z,m-Z- d
dl
m.Z.m/Z/m0Z0 d
dl1m2Z2m3Z3 dZ4ee
j5                 e6d<   	 ddl7Z4n# e8$ r dZ4Y nw xY we"j9        Z9dZ: ej;        e<          Z= ed          Z>deej?                 deej?                 fdZ@deAdeAfdZBd ZCd ZDdejE        jF        dedededeGe         f
dZHdedeIfd ZJedej?        dej?        fd!            ZKedeeGe         eLed"f         eMeef         f         deNfd#            ZKdedeej?        eNf         fd$ZKdeAfd%ZOdtdeAd'e
jP        d(eAddfd)ZQdd*d+e/d,eRd-ed.ed/eRde.fd0ZS G d1 d2          ZT G d3 d4          ZU G d5 d6          ZV G d7 d8          ZW G d9 d:          ZXd'eAdeAfd;ZYd'eAdeAfd<ZZd'eAdeAfd=Z[d>eAdeAfd?Z\d'eAdeAfd@Z]	 	 	 dudAedBed"ef         dCeRdDeeR         dEeeR         dFeRddfdGZ^dHej_        deGej?                 ded"ef         fdIZ`	 	 dvdLeNdMeNdNeIdOeNdeAf
dPZaejb        dQdfdReeR         dSeeR         dTejc        dUeeAejd        f         dVeRdej?        fdWZe edX          ZfdeIfdYZgdBee>eff         dZedee>eff         fd[Zhdd\ d]d^eid_eAd`eAdZedaeeA         dbeed"ef         ged"ef         f         deifdcZjdBee>eff         dee>eff         fddZkdBee>eff         dee>eff         fdeZldBee>eff         dee>eff         fdfZmdBee>eff         dee>eff         fdgZndBee>eff         dee>eff         fdhZodBee>eff         dee>eff         fdiZpdBee>eff         dee>eff         fdjZqdBee>eff         dee>eff         fdkZrdwdmeIddfdnZsdoee>eff         dpe>jt        dqe>ju        deffdrZvdawejx        deeGej        j_                          fds            ZydS )xa1  Testing utilities and infrastructure for Dynamo.

This module provides a comprehensive set of testing utilities including:
- Test result collection and validation
- Graph manipulation and comparison tools
- Test case management and execution helpers
- Specialized test decorators for different Python versions and features
- RNG state management
- Compilation counting and monitoring
- Debug utilities for bytecode transformation

The utilities in this module are used across Dynamo's test suite to ensure
consistent testing patterns and proper test isolation.
    N)Callable	GeneratorSequence)AnyOptionaloverloadTypeVarUnion)	ParamSpec)patch)fx)	aot_eager)OutputGraph   )config
eval_frameoptimize_assertreset)create_instructiondebug_checksis_generatortransform_code_object)CheckFunctionManager	CompileIdGuardedCode)ConvertFrameReturnDynamoFrameTypewrap_guarded_code)CompileCounterIntsamenp   _Pxreturnc                     | d S |                                                                                      | j                  S N)detachclonerequires_grad_requires_gradr$   s    Z/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/_dynamo/testing.pyclone_mer.   ?   s6    yt88::,,Q_===    namec                 .    t          j        dd|           S )Nz^_orig_mod[.] resub)r0   s    r-   remove_optimized_module_prefixr6   E       6"B---r/   c                     ddl m d d fd}  t          j        |d          |           |i | j        fS )Nr   )InstructionTranslatorc                 H    |                                  j        j        | S r'   )
current_txoutputregion_tracker)_gmargskwargsr9   gmr=   s      r-   extract_graph_backendz8extract_graph_and_tracker.<locals>.extract_graph_backendO   s&     .99;;BQ
r/   T)backend	fullgraph)torch._dynamo.symbolic_convertr9   torchcompilegraph)fnr?   r@   rB   r9   rA   r=   s       @@@r-   extract_graph_and_trackerrJ   I   s    DDDDDD	BN       E@EM/4@@@DDdUfUUU8^##r/   c                     t                      }  t          j        |          |           |i |}||j        |j        |j        fS )N)rC   )AotEagerAndRecordGraphsrF   rG   graphs	fw_graphs	bw_graphs)rI   r?   r@   rC   results        r-   extract_graphrQ   Z   sP    %''G/+U]7+++B//@@@F7>7#4g6GGGr/   model
predictionlossexample_inputsc                 J   g }|                     |           |                     |           i }i }|                                 D ]_\  }}t          | t          j                  rt          |          }|}	|j        }
|j        t          j        |          }
|
||dz   <   |	||<   `|                     |           |                     |           i }| 	                                D ]3\  }}t          | t          j                  rt          |          }|||<   4|                     |           |D ]r}t          |t          t          f          r |                    d |D                        >t          |t          j                  r|                     |j                   s|S )Nz.gradc              3   X   K   | ]%}t          |t          j                  |j        V  &d S r'   )
isinstancerF   Tensorgrad).0inps     r-   	<genexpr>z"collect_results.<locals>.<genexpr>   s5      XX*S%,:W:WX38XXXXXXr/   )appendnamed_parametersrX   r   OptimizedModuler6   rZ   rF   
zeros_likenamed_bufferstuplelistextendrY   )rR   rS   rT   rU   resultsgradsparamsr0   param
param_copyrZ   buffersbufferexamples                 r-   collect_resultsrn   `   s    GNN:NN4 EF--// 	" 	"eeZ788 	81$77D
z:#E**D $dWn!tNN5NN6G++--  feZ788 	81$77DNN7! - -gt}-- 	-NNXXwXXXXXXX'5<00 -w|,,,Nr/   outc                    t          | t          j                  r| j        S t          | t          t
          f          rt          d | D                       S | dS t          | t                    rdS t          dt          |                     )Nc              3   4   K   | ]}t          |          V  d S r'   )requires_bwd_passr[   r$   s     r-   r]   z$requires_bwd_pass.<locals>.<genexpr>   s+      55A$Q''555555r/   FDon't know how to reduce)
rX   rF   rY   r+   rd   rc   anyintNotImplementedErrortypero   s    r-   rr   rr      s    #u|$$   	C$	'	' 55555555	u	C		 u
8$s))
D
DDr/   c                     d S r'    ry   s    r-   reduce_to_scalar_lossr|      s    >Acr/   .c                     d S r'   r{   ry   s    r-   r|   r|      s	     Cr/   c                    t          | t          j                  r)|                                 |                                 z  S t          | t
          t          f          r)t          d | D                       t          |           z  S t          |           j	        dv rt          | j                  S t          |           j	        dk    r| j                                        S t          | t                    rMt          d |                                 D                       t          |                                           z  S t!          dt          |                     )z/Reduce the output of a model to get scalar lossc              3   4   K   | ]}t          |          V  d S r'   r|   rs   s     r-   r]   z(reduce_to_scalar_loss.<locals>.<genexpr>   s+      99(++999999r/   )MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsSquashedNormalc              3   4   K   | ]}t          |          V  d S r'   r   )r[   values     r-   r]   z(reduce_to_scalar_loss.<locals>.<genexpr>   s+      JJE(//JJJJJJr/   rt   )rX   rF   rY   sumnumelrd   rc   lenrx   __name__r|   logitsmeandictvalueskeysrw   ry   s    r-   r|   r|      s1   #u|$$ 
wwyy399;;&&	C$	'	' 
99S99999CHHDD	c	   
 

 %SZ000	c	/	/	/x||~~	C		 
JJSZZ\\JJJJJSHHJJN
 N
 
 	
 8$s))
D
DDr/   c                      t           j                            t           j                            t                    d          } t           j                            |           st          j        |            | S )Nz../debug)ospathjoindirname__file__existsmkdir)r   s    r-   	debug_dirr      sM    7<<11:>>D7>>$ 
Kr/   r2   codeextrac           	      x   t          t          j                            t	                      |           d          5 }|                    t          j        |                                           dt          j        |                                           d| d           d d d            d S # 1 swxY w Y   d S )Nwz


)	openr   r   r   r   writedisBytecodeinfo)r0   r   r   fds       r-   
debug_dumpr      s    	bgll9;;--s	3	3 
r
|D!!&&((UUcl4.@.@.D.D.F.FUUEUUU	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A'B//B36B3)skipframe
cache_sizehooks_r   c                   dt           t                   dt          ddfd}t          j        j                                        }t          j        j                            d          5  |5  t          | j                  r&t                      cddd           cddd           S t          | j                   t          | j        |          \  }}t          i dddg dd	it                      t                      | j        g d
          }t          t!          |t#          | j        |          j        t'          d	d	                              cddd           cddd           S # 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zused to debug jump updatesinstructionscode_optionsr%   Nc                     |                      dt          d                     |                      dt          d                     d S )Nr   NOP)insertr   )r   r   s     r-   insert_nopsz&debug_insert_nops.<locals>.insert_nops   sF    A1%88999A1%8899999r/   debug_insert_nopsF_idr   )r   compiler_fnroot_txexportexport_constraintsframe_statelocal_scopeglobal_scopef_codetorch_function_mode_stackpackage)frame_idframe_compile_id)rd   r   rF   _dynamoutilsget_metrics_contextdynamo_timedr   r   r   r   r   r   localsglobalsr   r   r   guard_managerr   )	r   r   r   r   r   r   metrics_contextr   rH   s	            r-   r   r      sX   
:$s) :3 :4 : : : : m)==??O			)	)*=	>	> 
 
 
 
%% 	(%''
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	U\"""'kBBa!
 <&(
 
 
 !$U\599G1q999 
 
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sC   'E?*"E'E?%B)E'E?'E+	+E?.E+	/E??FFc                   l    e Zd Zd	dZdej        j        deej                 de	de
f         fdZd	dZdS )
CompileCounterr%   Nc                 <    d| _         |                                  d S Nr   )frame_countclearselfs    r-   __init__zCompileCounter.__init__   s    :;

r/   rA   rU   .c                     | xj         dz  c_         |j        j        D ]}d|j        v r| xj        dz  c_        |j        S )Nr   call)r   rH   nodesopop_countforward)r   rA   rU   nodes       r-   __call__zCompileCounter.__call__   sQ     	AHN 	# 	#D  "zr/   c                 d    t           j        rt          d          | _        nd| _        d| _        d S r   )r   debug_disable_compile_counterr   r   r   r   s    r-   r   zCompileCounter.clear   s3    / 	!033D Dr/   r%   N)r   
__module____qualname__r   rF   r   GraphModulerd   rY   r   r   r   r   r{   r/   r-   r   r      s}           (&8<U\8J	#s(	        r/   r   c                   t    e Zd ZdeddfdZdej        j        deej	                 de
def         fdZd
d	ZdS )CompileCounterWithBackendrC   r%   Nc                 X    d| _         || _        g | _        |                                  d S r   )r   rC   rM   r   )r   rC   s     r-   r   z"CompileCounterWithBackend.__init__  s)    :;24

r/   rA   rU   .c                     ddl m} | xj        dz  c_        |j        j        D ]}d|j        v r| xj        dz  c_        | j                            |             || j	                  ||          S )Nr   )lookup_backendr   )
backends.registryr   r   rH   r   r   r   rM   r^   rC   )r   rA   rU   r   r   s        r-   r   z"CompileCounterWithBackend.__call__  s     	655555AHN 	# 	#D  "2+~~dl++B???r/   c                 r    t           j        rt          d          | _        nd| _        d| _        g | _        d S r   )r   r   r   r   r   rM   r   s    r-   r   zCompileCounterWithBackend.clear  s:    / 	!033D Dr/   r   )r   r   r   strr   rF   r   r   rd   rY   r   r   r   r   r{   r/   r-   r   r      s             
@(&
@8<U\8J
@	#s(	
@ 
@ 
@ 
@     r/   r   c                   d    e Zd ZddZdej        j        deej                 de	de
f         fdZdS )	EagerAndRecordGraphsr%   Nc                     g | _         d S r'   )rM   r   s    r-   r   zEagerAndRecordGraphs.__init__  s    24r/   rA   rU   .c                 D    | j                             |           |j        S r'   )rM   r^   r   )r   rA   rU   s      r-   r   zEagerAndRecordGraphs.__call__"  s"     	2zr/   r   r   r   r   r   rF   r   r   rd   rY   r   r   r   r{   r/   r-   r   r     si        5 5 5 5(&8<U\8J	#s(	     r/   r   c                   d    e Zd ZddZdej        j        deej                 de	de
f         fdZdS )	rL   r%   Nc                 0    g | _         g | _        g | _        d S r'   )rM   rN   rO   r   s    r-   r   z AotEagerAndRecordGraphs.__init__*  s    245757r/   rA   rU   .c                 f     j                             |           dt          j        j        dt
          t          j                 dt          dt          f         f fd}dt          j        j        dt
          t          j                 dt          dt          f         f fd}t          ||||          S )NrA   rU   r%   .c                 F    j                             |            | j        S r'   )rN   r^   r   rA   rU   r   s     r-   fw_compilerz5AotEagerAndRecordGraphs.__call__.<locals>.fw_compiler4  #     N!!"%%%:r/   c                 F    j                             |            | j        S r'   )rO   r^   r   r   s     r-   bw_compilerz5AotEagerAndRecordGraphs.__call__.<locals>.bw_compiler:  r   r/   )r   r   )
rM   r^   rF   r   r   rd   rY   r   r   r   )r   rA   rU   r   r   s   `    r-   r   z AotEagerAndRecordGraphs.__call__/  s     	2	$	6:5<6H	c3h	 	 	 	 	 		$	6:5<6H	c3h	 	 	 	 	 	 ##	
 
 
 	
r/   r   r   r{   r/   r-   rL   rL   )  si        8 8 8 8

(&
8<U\8J
	#s(	
 
 
 
 
 
r/   rL   c                       e Zd ZddZd ZdS )InductorAndRecordGraphsr%   Nc                 "    g | _         g | _        d S r'   )rM   inductor_graphsr   s    r-   r   z InductorAndRecordGraphs.__init__I  s    24;=r/   c                      dd l mc m}  j                            |           |j         fd}t          j        |d|          5  |                    ||          cd d d            S # 1 swxY w Y   d S )Nr   c                  T    j                             | d                     | i |S r   )r   r^   )r?   r@   old_compile_fx_innerr   s     r-   patchedz1InductorAndRecordGraphs.__call__.<locals>.patchedT  s4     ''Q000''8888r/   _compile_fx_inner)new)torch._inductor.compile_fx	_inductor
compile_fxrM   r^   r   r   object)r   rA   rU   compile_fx_modr   r   s   `    @r-   r   z InductorAndRecordGraphs.__call__M  s   ;;;;;;;;;2-?	9 	9 	9 	9 	9 	9 \.*=7KKK 	A 	A!,,R@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   
A--A14A1r   )r   r   r   r   r   r{   r/   r-   r   r   H  s<        > > > >A A A A Ar/   r   c                 .    t          j        dd|           S )Nz(?m)^ *#.*\n?r2   r3   r   s    r-   strip_commentr  \  r7   r/   c                 f    d                     d |                     d          D                       S )Nr   c                 6    g | ]}|                                 S r{   )rstrip)r[   lines     r-   
<listcomp>z)remove_trailing_space.<locals>.<listcomp>a  s     AAAdkkmmAAAr/   )r   splitr  s    r-   remove_trailing_spacer  `  s/    99AA

40@0@AAABBBr/   c                     |                      d          }g }d}|D ]7}|                                dk    r|rd}nd}|                    |           8d                    |          S )Nr   Fr2   T)r  stripr^   r   )r   linesrP   	saw_blankr	  s        r-   _squash_blank_linesr  d  s}    JJtEFI  ::<<2 IIId99Vr/   gm_strc                 \    t          |           }t          |          }t          |          S r'   )r  r  r  )r  strippedno_trailings      r-   normalize_gmr  s  s,     V$$H'11K{+++r/   c                 2    t          j        dd|           }|S )z-
    Normalize code: remove empty lines.
    z[\r\n]+r   r3   )r   normal_codes     r-   empty_line_normalizerr  {  s     &T400Kr/   r   rI   nargsexpected_opsexpected_ops_dynamicexpected_frame_countc                    t           j        s||}t                      }d t          |          D             }d t          |          D             } || }	 || }
t	                        t          |          |          } || } || } || } || }t	                       |                     t          ||	                     |                     t          ||	                     |                     t          ||
                     |                     t          ||
                     |                     |j	        |           ||                     |j
        |           d S d S )Nc                 8    g | ]}t          j        d d           S 
   rF   randnr[   r   s     r-   r
  z!standard_test.<locals>.<listcomp>  $    777QU[R  777r/   c                 8    g | ]}t          j        d d           S r   r"  r$  s     r-   r
  z!standard_test.<locals>.<listcomp>  r%  r/   )r   assume_static_by_defaultr   ranger   r   
assertTruer    assertEqualr   r   )r   rI   r  r  r  r  actualargs1args2correct1correct2opt_fnval1aval2aval1bval2bs                   r-   standard_testr5    sx    * ,/C/O+F77%,,777E77%,,777Er5zHr5zH	GGG$_V$$R((FFENEFENEFENEFENE	GGGOOD))***OOD))***OOD))***OOD))***V')=>>>,77777  r/   rA   c                     | j         S r'   )r   )rA   rU   s     r-   dummy_fx_compiler7    s     :r/   T皙?speeduppvalue
is_correctpvalue_thresholdc                 4    |sdS ||k    r| ddS | dd|dS )NERRORz.3fzx SAMEzx p=z.2fr{   )r9  r:  r;  r<  s       r-   format_speedupr?    sI      w   %%%%%+++v++++r/   cpusizestridedtypedevice
extra_sizec                    |}t          d | D                       r-|t          d t          | |          D                       dz   z  }|j        rZ|j        dk    r7	 t          j        |t
          j        |                              |          }n0t          j        |||          }nt          j	        |g||          }t          j
        || |          S )Nc              3   "   K   | ]
}|d k    V  dS )r   Nr{   )r[   ss     r-   r]   zrand_strided.<locals>.<genexpr>  s&      

Q1q5





r/   c              3   ,   K   | ]\  }}|d z
  |z  V  dS )r   Nr{   )r[   shaperB  s      r-   r]   zrand_strided.<locals>.<genexpr>  s/      LLf$LLLLLLr/   r   )rC  rD  )rC  )rA  rC  rD  )allr   zipis_floating_pointitemsizerF   r#  float16tozeros
as_strided)rA  rB  rC  rD  rE  needed_sizerl   s          r-   rand_stridedrT    s     K


$


 
LL#dF:K:KLLLLLqP	
  M>Q [EM&QQQTT U  FF [E&IIIFF;-uVLLLFD&111r/   _Tc                      t           j         S r'   )r   r'  r{   r/   r-   check_dynamic_shape_capturerW    s    ...r/   patchesc                      t          j                   dt          j        dt          j        dt
          f fd            }|S )Nr?   r@   r%   c            	          t          j                    5 }D ]/\  }}}|                    t          j        |||                     0 | i |cd d d            S # 1 swxY w Y   d S r'   )
contextlib	ExitStackenter_contextr   r  )r?   r@   stackmoduleattrvalrI   rX  s         r-   _fnz"_make_fn_with_patches.<locals>._fn  s    !## 	'u%, E E!c##ELs$C$CDDDD2t&v&&		' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   :AA #A )	functoolswrapsr#   r?   r@   rU  )rI   rX  rb  s   `` r-   _make_fn_with_patchesre    s\    _R'27 'bi 'B ' ' ' ' ' ' ' Jr/   c                     | S r'   r{   r,   s    r-   <lambda>rg    s    a r/   )
xfail_prop	decoratorcls
cls_prefix	fn_suffixrh  ri  c          	      <   t          | | j         | j        i           }|j        |_        t	          |           D ]}|                    d          rt          | |          }t          |          s t          ||t          | |                     V| | }	t          |g|R  }
|	|
_        |$t          ||          rt          j        |
          }
t          ||	 ||
                     t          ||          st          ||t          | |                     |S )Ntest_)rx   r   	__bases__r   dir
startswithgetattrcallablesetattrre  hasattrunittestexpectedFailure)rj  rk  rl  rh  ri  rX  DummyTestClassr0   rI   new_namenew_fns              r-   make_test_cls_with_patchesr{    s9    Z777KKN"0"9NC > >??7## 	>d##BB<< gc4.@.@AAA+	++H*28888F&FO%'"j*A*A%!1&99NHii.?.?@@@@.. 	>ND'#t*<*<===r/   c                 N    t           j        dk    r| S t          j        |           S )N)r"      sysversion_inforv  r   rI   s    r-   skipIfNotPy311r    s%    
7""	=r/   c                 `    t           j        dk    r| S  t          j        d          |           S )Nr"      zRequires Python 3.12+r~  r  s    r-   skipIfNotPy312r    s0    
7""	18=011"555r/   c                     t           j        dk    st           j        dk     r t          j        d          |           S | S )N)r"      r  zRequires Python 3.12r~  r  s    r-   skipIfOnlyNotPy312r    s=    
7""c&6&@&@4x}344R888Ir/   c                 N    t           j        dk    rt          j        |           S | S )Nr  )r  r  rv  rw  r  s    r-   xfailIfPy312r    s&    
7""'+++Ir/   c                 `    t           j        dk    r t          j        d          |           S | S )Nr  zNot supported in Python 3.12+r~  r  s    r-   skipIfPy312r     s0    
7""=x}<==bAAAIr/   c                     d| _         | S NT)_expected_failure_dynamicr  s    r-   expectedFailureDynamicr  (  s    #'B Ir/   c                     d| _         | S r  )!_expected_failure_codegen_dynamicr  s    r-   expectedFailureCodegenDynamicr  .      +/B(Ir/   c                     d| _         | S r  )!_expected_failure_dynamic_wrapperr  s    r-   expectedFailureDynamicWrapperr  4  r  r/   Fuse_xlac                 &   t          j        d           t          j        d           t          rt          j                            d           | r@dd lmc m} |                    dt          |
                                                     d S d S )Ni9  r   )rF   manual_seedrandomseedr!   torch_xla.core.xla_modelcore	xla_modelset_rng_stater   
xla_device)r  xms     r-   reset_rng_stater  9  s    	d
K	 
	t 5---------
s2==??33444445 5r/   fr?   r@   c                      | |i |S r'   r{   )r  r?   r@   s      r-   &_skipped_function_for_test_reconstructr  D  s     1dfr/   c               #   4   K   g a 	 t           V  da dS # da w xY w)a\  
    Context manager to capture graph modules compiled by invoke_subgraph_inductor_compile.

    Usage:
        with _testing_capture_invoke_subgraph_inductor_compile_gms() as captured_gms:
            # code that triggers invoke_subgraph_inductor_compile
            pass
        # captured_gms will contain the list of captured graph modules
    N)6_testing_invoke_subgraph_inductor_compile_captured_gmsr{   r/   r-   5_testing_capture_invoke_subgraph_inductor_compile_gmsr  M  s?       >@:FDDDDAE>>>>EEEEs   	 )r2   )NNr   )Tr8  )F)z__doc__r[  r   rc  loggingos.pathr   r  r4   r  typesrv  collections.abcr   r   r   typingr   r   r   r	   r
   typing_extensionsr   unittest.mockr   rF   r    torch._dynamo.backends.debuggingr   torch._dynamo.output_graphr   r2   r   r   r   r   bytecode_transformationr   r   r   r   guardsr   r   r   r   r   r   r   r   r    r!   
ModuleType__annotations__numpyModuleNotFoundErrorunsupportedthree	getLoggerr   logr#   rY   r.   r   r6   rJ   rQ   nnModulerd   rn   boolrr   r|   rc   r   floatr   CodeTyper   rv   r   r   r   r   rL   r   r  r  r  r  r  r5  r   r7  r?  float32rC  rD  rT  rU  rW  re  rx   r{  r  r  r  r  r  r  r  r  r  r?   r@   r  r  contextmanagerr  r{   r/   r-   <module>r     s
         



        				 



   9 9 9 9 9 9 9 9 9 9 : : : : : : : : : : : : : : ' ' ' ' ' '              6 6 6 6 6 6 2 2 2 2 2 2 8 8 8 8 8 8 8 8 8 8 8 8            A @ @ @ @ @ @ @ @ @ I I I I I I I I I I * * * * * * * * "&HU % % %   	BBB $	g!!Yt__>& >8EL+A > > > >. . . . . .$ $ $"H H H%8?%(+%36%HK%	#Y% % % %P	E3 	E4 	E 	E 	E 	E 
 Au| A A A A 
 A 
	tCy%S/4S>9	:
   

Es EuU\5-@'A E E E E,3    
 
S 
 
s 
D 
 
 
 
 QR%
 %
 %
%
(+%
47%
<?%
JM%
%
 %
 %
 %
P       ,       <       
 
 
 
 
 
 
 
>A A A A A A A A(. . . . . .C C C C C Cc c    , , , , , ,      #'*. !8 8
8c8 8 3-	8
 #3-8 8 
8 8 8 8B
(,U\(:c3h    !	
, 
,
,
, 
, 	
,
 	
, 
, 
, 
,  ',2 2
3-2SM2 ;2 #u|#$	2
 2 \2 2 2 2: WT]]/T / / / /
	hr2v. 	# 	(2r6BR 	 	 	 	" !%DOK  	  	
  #s(+,hsCx.@@A 
   >xB' HRV,<    6xB' 6HRV,< 6 6 6 68BF+ R0@    Xb"f% (2r6*:    HRV$ "b&)9    xB/ HRV4D    hr2v&6 8BF;K    hr2v&6 8BF;K    
5 5T 5d 5 5 5 5B "359    :> 6 Fy	@ F F F F F Fs   -B2 2B<;B<