~L igDUdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZmZmZmZmZmZddlmZddlmZddlZddlmZddlmZdd lmZd d lm 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 dl m-Z-m.Z.m/Z/d dl0m1Z1m2Z2dZ3ee jhe5d< ddl6Z3e!jpZ8dZ9ejte;Z<edZ=deej|deej|fdZ?de@de@fdZAdZBdejjdedededeEef dZFdedeGfdZHedej|dej|fd ZIedeeEeeJed!feKeeffdeLfd"ZIdedeej|eLffd#ZIde@fd$ZMdmde@d%e jd&e@ddfd'ZOdd(d)e.d*ePd+ed,ed-ePde-f d.ZQGd/d0ZRGd1d2ZSGd3d4ZTGd5d6ZUGd7d8ZVd%e@de@fd9ZWd%e@de@fd:ZXd;e@de@fd<ZYd%e@de@fd=ZZ dnd>ed?ed!efd@ePdAeePdBeePdCePddfdDZ[dEejdeEej|ded!effdFZ] dodGeLdHeLdIeGdJeLde@f dKZ^ejdLdfdMe ePdNe ePdOejdPee@ejfdQePdej|f dRZbedSZcdeGfdTZdd?ee=ecfdUedee=ecffdVZeddWdXdYefdZe@d[e@dUed\ee@d]eed!efged!effdeffd^Zgd?ee=ecfdee=ecffd_Zhd?ee=ecfdee=ecffd`Zid?ee=ecfdee=ecffdaZjd?ee=ecfdee=ecffdbZkd?ee=ecfdee=ecffdcZld?ee=ecfdee=ecffddZmd?ee=ecfdee=ecffdeZnd?ee=ecfdee=ecffdfZodpdgeGddfdhZpdiee=ecfdje=jdke=jdecfdlZsy#e7$rdZ3YwxYw)qa1Testing 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)Sequence)AnyCallableOptionaloverloadTypeVarUnion) ParamSpec)patch)fx) aot_eager) OutputGraph)config eval_frameoptimize_assertreset)create_instruction debug_checks is_generatortransform_code_object)CheckFunctionManager CompileId GuardedCode)ConvertFrameReturnDynamoFrameTypewrap_guarded_code)CompileCounterIntsamenp_Pxreturncv|y|jjj|jSN)detachclonerequires_grad_ requires_gradr#s [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/_dynamo/testing.pyclone_mer-?s.y 88:    , ,Q__ ==namec0tjdd|S)Nz ^_orig_mod[.]resub)r/s r,remove_optimized_module_prefixr5E 66"B --r.cddlmddfd}tj|d||i|jfS)Nr)InstructionTranslatorcT|jjj|Sr&) current_txoutputregion_tracker)_gmargskwargsr8gmr<s r,extract_graph_backendz8extract_graph_and_tracker..extract_graph_backendOs).99;BBQQ r.T)backend fullgraph)torch._dynamo.symbolic_convertr8torchcompilegraph)fnr>r?rAr8r@r<s @@@r,extract_graph_and_trackerrIIsJD BNE@EMM/4@DdUfU 88^ ##r.model predictionlossexample_inputscg}|j||j|i}i}|jD]f\}}t|tjr t |}|} |j } |j tj|} | ||dz<| ||<h|j||j|i} |jD]/\}} t|tjr t |}| | |<1|j| |D]g} t| ttfr|jd| D2t| tjsM|j| j i|S)Nz.gradc3jK|]+}t|tjs|j-ywr&) isinstancerETensorgrad).0inps r, z"collect_results..{s!X*S%,,:W388Xs33)appendnamed_parametersrPrOptimizedModuler5rRrE zeros_like named_bufferstuplelistextendrQ)rJrKrLrMresultsgradsparamsr/param param_copyrRbuffersbufferexamples r,collect_resultsrfZsbG NN: NN4 E F--/ " e eZ77 81$7D zz :: ##E*D $dWn!t  " NN5 NN6G++- f eZ77 81$7D  NN7!- gt} - NNXwX X'5<<0w||, - Nr.outct|tjr |jSt|tt frt d|DS|yt|trytdt|)Nc32K|]}t|ywr&)requires_bwd_passrSr#s r,rUz$requires_bwd_pass..s5A$Q'5FDon't know how to reduce) rPrErQr*r\r[anyintNotImplementedErrortypergs r,rjrjsb#u||$   C$ '5555  C  8$s) DDr.cyr&rrs r,reduce_to_scalar_lossrus>Ar..cyr&rtrrs r,rurus r.cZt|tjr!|j|j z St|t t frtd|Dt|z St|jdvrt|jSt|jdk(r|jjSt|tr:td|jDt|jz St!dt|)z/Reduce the output of a model to get scalar lossc32K|]}t|ywr&rurks r,rUz(reduce_to_scalar_loss..s9(+9rl)MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsSquashedNormalc32K|]}t|ywr&ry)rSvalues r,rUz(reduce_to_scalar_loss..sJE(/Jrlrm)rPrErQsumnumelr\r[lenrq__name__rulogitsmeandictvalueskeysrprrs r,rurus#u||$wwy399;&& C$ '9S99CHDD c     %SZZ00 c  / /xx||~ C JSZZ\JJS HHJN    8$s) DDr.ctjjtjjtd}tjj |stj ||S)Nz../debug)ospathjoindirname__file__existsmkdir)rs r, debug_dirrsC 77<<1: >D 77>>$   Kr.codeextrac Jttjjt |d5}|j t j|jdt j|j d|ddddy#1swYyxYw)Nwz  ) openrrrrwritedisBytecodeinfo)r/rrfds r, debug_dumprs} bggll9;-s 3 r ||D!&&()cll4.@.D.D.F-GtE7RT U    s ABB")skipframe cache_sizehooks_rcdttdtddfd}tjjj }tjjj d5|5t|jrtcdddcdddSt|jt|j|\}}tidddgdd itt|jgd }tt!|t#|j|j$t'd d cdddcdddS#1swYnxYwdddy#1swYyxYw) zused to debug jump updates instructions code_optionsr$Ncp|jdtd|jdtdy)NrNOP)insertr)rrs r, insert_nopsz&debug_insert_nops..insert_nopss.A1%89A1%89r.debug_insert_nopsF_idr) r compiler_fnroot_txexportexport_constraints frame_state local_scope global_scopef_codetorch_function_mode_stackpackage)frame_idframe_compile_id)r\rrE_dynamoutilsget_metrics_context dynamo_timedrrrrrrlocalsglobalsrrr guard_managerr) rrrrrrmetrics_contextrrGs r,rrs1 :$s):3:4:mm))==?O    ) )*= >   %%'    U\\"' kBa!  <<&(  ! $U\\59GG1q9  +       s1+E&.E E& BE> E&E E&&E/c|eZdZd dZdej j deejde de ffdZ d dZ y) CompileCounterr$Nc2d|_|jyNr) frame_countclearselfs r,__init__zCompileCounter.__init__s:; r.r@rM.c|xjdz c_|jjD]&}d|jvs|xjdz c_(|j S)Nrcall)rrGnodesopop_countforward)rr@rMnodes r,__call__zCompileCounter.__call__sR AHHNN #D  "  #zzr.cptjrtd|_d|_yd|_d|_yr)rdebug_disable_compile_counterrrrrs r,rzCompileCounter.clears2  / /03D   !D  r.r$N) r __module__ __qualname__rrEr GraphModuler\rQrrrrrtr.r,rrsE((&&8.fw_compiler.! NN ! !" %:: r.cRjj||jSr&)rrVrrs r, bw_compilerz5AotEagerAndRecordGraphs.__call__..bw_compiler4rr.)rr) rrVrEr rr\rQrrr )rr@rMrrs` r,rz AotEagerAndRecordGraphs.__call__)s 2 $$ 6:5<<6H  c3h    $$ 6:5<<6H  c3h     ##   r.rrrtr.r,rr#s@8  ((&& 8r?old_compile_fx_innerrs r,patchedz1InductorAndRecordGraphs.__call__..patchedNs+  ' 'Q 0'88 8r._compile_fx_inner)new)torch._inductor.compile_fx _inductor compile_fxrrVrr object)rr@rMcompile_fx_modrrs` @r,rz InductorAndRecordGraphs.__call__Gsh;; 2-?? 9\\.*=7 K A!,,R@ A A As A--A6r)rrrrrrtr.r,rrBs > Ar.rc0tjdd|S)Nz (?m)^ *#.*\n?r1r2)rs r, strip_commentrVr6r.cdj|jdDcgc]}|jc}Scc}w)Nr)rsplitrstrip)rlines r,remove_trailing_spacerZs. 99 40@AdkkmA BBAs=gm_strc*tt|Sr&)rr)rs r, normalize_gmr ^s !v!6 77r.c4tjdd|}|S)z- Normalize code: remove empty lines. z[\r\n]+rr2)r normal_codes r,empty_line_normalizerr ds&&T40K r.rrHnargs expected_opsexpected_ops_dynamicexpected_frame_countctjs||}t}t|Dcgc]}t j dd}}t|Dcgc]}t j dd} }||} || } t t||} | |} | | }| |}| | }t |jt| | |jt|| |jt|| |jt|| |j|j|||j|j|yycc}wcc}w)N ) rassume_static_by_defaultrrangerErandnrr assertTruer assertEqualrr)rrHr rrractualrargs1args2correct1correct2opt_fnval1aval2aval1bval2bs r, standard_testr"ls?  * */C/O+  F*/, 7QU[[R 7E 7*/, 7QU[[R 7E 75zH5zH G $_V $R (F ENE ENE ENE ENE GOOD)*OOD)*OOD)*OOD)*V'')=> ,7 ! 8 7s E"E'r@c|jSr&)r)r@rMs r,dummy_fx_compiler$s ::r.speeduppvalue is_correctpvalue_thresholdc0|sy||kDr|ddS|dd|dS)NERRORz.3fzx SAMEzx p=z.2frt)r%r&r'r(s r,format_speedupr+s7    #f%%c]$vcl ++r.cpusizestridedtypedevice extra_sizec|}td|Dr"|tdt||Ddzz }|jr`|jdk(r8 t j |t j|j|}n2t j |||}nt j|g||}t j|||S)Nc3&K|] }|dkD yw)rNrt)rSss r,rUzrand_strided..s Q1q5 sc32K|]\}}|dz |zyw)rNrt)rSshaper.s r,rUzrand_strided..sLf$Lrlr)r/r0)r/)r-r/r0) allrzipis_floating_pointitemsizerErfloat16tozeros as_strided)r-r.r/r0r1 needed_sizerds r, rand_stridedr@sK $  L#dF:KL Lq P   >>Q  [[EMM&QTTUF[[E&IF;-uVL   FD& 11r._Tc$tj Sr&)rrrtr.r,check_dynamic_shape_capturerCs.. ..r.patchesctjdtjdtjdt ffd }|S)Nr>r?r$c tj5}D],\}}}|jtj|||.|i|cdddS#1swYyxYwr&) contextlib ExitStack enter_contextr r)r>r?stackmoduleattrvalrHrDs r,_fnz"_make_fn_with_patches.._fnsh  ! ! # 'u%, E!c##ELLs$CD Et&v&  ' ' 's 9AA") functoolswrapsr"r>r?rA)rHrDrNs`` r,_make_fn_with_patchesrQsB__R'277'bii'B'' Jr.c|Sr&rtr+s r,rSsar.) xfail_prop decoratorcls cls_prefix fn_suffixrTrUc t||j|ji}|j|_t |D]}|j drt ||}t|st||t ||C||} t|g|} | | _|!t||rtj| } t|| || t||rt||t |||S)Ntest_) rqr __bases__rdir startswithgetattrcallablesetattrrQhasattrunittestexpectedFailure) rVrWrXrTrUrDDummyTestClassr/rHnew_namenew_fns r,make_test_cls_with_patchesrgsZL7KN"0"9"9NC> ??7 #d#BB<gc4.@A {+H*288F&FO%'"j*A!11&9 NHi.? @. ND'#t*< => r.cVtjdk\r|Stj|S)N)r! sys version_inforbrrHs r,skipIfNotPy311rns$ 7" == r.cbtjdk\r|Stjd|S)Nr! zRequires Python 3.12+rjrms r,skipIfNotPy312rrs, 7" 18==0 1" 55r.cVtjdk\rtj|S|S)Nrp)rkrlrbrcrms r, xfailIfPy312rts& 7"''++ Ir.cbtjdk\rtjd|S|S)NrpzNot supported in Python 3.12+rjrms r, skipIfPy312rvs, 7"=x}}<=bAA Ir.cbtjdk\r|Stjd|S)N)r!rzRequires Python 3.10+rjrms r, requiresPy310rxs, 7" 5x}}45b99r.cd|_|SNT)_expected_failure_dynamicrms r,expectedFailureDynamicr|s#'B Ir.cd|_|Srz)!_expected_failure_codegen_dynamicrms r,expectedFailureCodegenDynamicr+/B( Ir.cd|_|Srz)!_expected_failure_dynamic_wrapperrms r,expectedFailureDynamicWrapperrrr.use_xlac tjdtjdtrtjjd|r3ddlmcm}|jdt|jyy)Ni9r) rE manual_seedrandomseedr torch_xla.core.xla_modelcore xla_model set_rng_stater xla_device)rxms r,reset_rng_stater"sX d KK  t-- s2==?34r.fr>r?c||i|Sr&rt)rr>r?s r,&_skipped_function_for_test_reconstructr-s d f r.)r1)NNr)Tg?)F)t__doc__rGrrOloggingos.pathrrr3rktypesrbcollections.abcrtypingrrrrrr typing_extensionsr unittest.mockr rEr torch._dynamo.backends.debuggingr torch._dynamo.output_graphrr1rrrrbytecode_transformationrrrrguardsrrrrrrrrrr ModuleType__annotations__numpyModuleNotFoundError unsupportedthree getLoggerrlogr"rQr-rr5rInnModuler\rfboolrjrur[rfloatrCodeTyperrorrrrrrrrr r r"rr$r+float32r/r0r@rArCrQrqrgrnrrrtrvrxr|rrrr>r?rrtr.r,rs4   $DD' 6288 A@II*"&HU  % $$  g!t_>&>8ELL+A> ...$"% 88??%(+%36%HK% #Y%P E3 E4 E Au||A A A  tCy%S/4S>9 :   EsEuU\\5-@'AE,3 S  s D QR% % (+% 47% AA(...CCC888 #'*. ! 8 8c8 83- 8 #3- 8  8 8B (,U\\(: c3h! ,  ,  , , ,  , ', 2 3-2 SM2 ;;2 #u||# $ 2  2  \\ 2: T]/T/ hr2v. # (2r6BR "!%DO      #s(+,hsCx.@@A  >xB'HRV,< 6xB'6HRV,<6 Xb"f%(2r6*: HRV$"b&)9 :hr2v&:8BF+;:xB/HRV4D hr2v&68BF;K hr2v&68BF;K 5T5d5B "3599u Bs-N77OO