
    hN                    D   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJr  S SKJrJrJrJrJr  S SKJr  S SKrS SKrS SKrS SKJrJrJrJrJrJr  S SK J!r!  S SK"J#r#  S S	K$J%r%  S S
K&J'r'   " S S\RP                  5      r)SS jr* " S S5      r+g)    )annotationsN)defaultdict)AnyCallableIterablePatternSequence)urlretrieve)ONNX_ML
ModelProto	NodeProto	TypeProtoValueInfoProtonumpy_helper)Backend)TestCase)load_model_tests)TestItemc                      \ rS rSrSrg)!BackendIsNotSupposedToImplementIt     N)__name__
__module____qualname____firstlineno____static_attributes__r       [/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/backend/test/runner/__init__.pyr   r       s    r   r   c                (   ^  T S:  d   eSU 4S jjnU$ )N   c                N   >^  [         R                  " T 5      SU U4S jj5       nU$ )Nc                    > [        STS-   5       H  n T" U 0 UD6s  $    g ! [         a2    [        U S35        UT:X  a  e [        R                  " SU-  5         ML  f = f)Nr!   z times tried   )range	Exceptionprinttimesleep)argskwargsifunctimess      r   wrapped/retry_execute.<locals>.wrapper.<locals>.wrapped(   sg    1eai(&000 ) ! &QC|,-EzJJq1u%	&s   "8AA)r*   r   r+   r   returnr   )	functoolswraps)r-   r/   r.   s   ` r   wrapperretry_execute.<locals>.wrapper'   s%    			& 
	& r   )r-   Callable[..., Any]r1   r6   r   )r.   r4   s   ` r   retry_executer7   $   s    A:: Nr   c                     \ rS rSr  S       SS jjrSS jrSS jrSS jrSS jrSS jr	\
SS	 j5       r\
SS
 j5       r\
SS j5       r\
SS j5       r\          SS j5       r\\" S5              S S j5       5       r\S!S j5       r S"             S#S jjr\ S$         S%S jj5       rS&S jr        S'S jrSrg)(Runner8   Nc                   Xl         X l        [        5       U l        [        5       U l        [        5       U l        U=(       d    0 U l        [        [        5      U l	        [        SS9 H  nU R                  US5        M     [        SS9 H  nU R                  US5        M     [        SS9 H  nU R                  US5        M     [        SS9 H  nU R                  US	5        M     [        S
S9 H  nU R                  US5        M     g )Nnode)kindNoderealRealsimpleSimplezpytorch-convertedPyTorchConvertedzpytorch-operatorPyTorchOperator)backend_parent_moduleset_include_patterns_exclude_patterns_xfail_patterns_test_kwargsr   dict_test_itemsr   _add_model_test)selfrE   parent_moduletest_kwargsrtctots          r   __init__Runner.__init__9   s     +47E47E25%"-"3 <Gt;L"/B  V, 0 #/B  V, 0 #1B  X. 2 #(;<B  %78 = #(:;B  %67 <r   c                    [        [        U5      [        R                  40 5      nU R                  (       a  U R                  Ul        U$ N)typestrunittestr   rF   r   )rO   name	test_cases      r   _get_test_caseRunner._get_test_case[   s:    TX%6%6$8"=	#'#6#6I r   c                d    U R                   R                  [        R                  " U5      5        U $ rX   )rH   addrecompilerO   patterns     r   includeRunner.includea   $    ""2::g#67r   c                d    U R                   R                  [        R                  " U5      5        U $ rX   )rI   ra   rb   rc   rd   s     r   excludeRunner.excludee   rh   r   c                d    U R                   R                  [        R                  " U5      5        U $ rX   )rJ   ra   rb   rc   rd   s     r   xfailRunner.xfaili   s$      G!45r   c                    SS K nU R                  R                  5        HW  u  p#UR                  5        H>  nUR                  R                  UR                  U5      " UR                  5      Ul        M@     MY     U $ )Nr   )pytestrM   itemsvaluesmarkonnx_coverageprotor-   )rO   rp   category	items_mapitems        r   enable_reportRunner.enable_reportm   s`    #'#3#3#9#9#;H!((*"KK55djj(KDIIV	 + $< r   c                  ^ 0 nU R                   R                  5        GHA  u  p#0 X'   UR                  5        GH"  u  mnU R                  (       aO  [        U4S jU R                   5       5      (       d+  [        R
                  " S5      " UR                  5      Ul        U R                   HT  nUR                  T5      (       d  M  [        R
                  " SUR                   S35      " UR                  5      Ul        MV     U R                   H@  nUR                  T5      (       d  M  [        R                  " UR                  5      Ul        MB     XAU   T'   GM%     GMD     U$ )Nc              3  D   >#    U  H  oR                  T5      v   M     g 7frX   )search).0rf   r\   s     r   	<genexpr>.Runner._filtered_test_items.<locals>.<genexpr>|   s     W@VWNN400@Vs    zno matched include patternzmatched exclude pattern "")rM   rq   rH   anyr[   skipr-   rI   r}   re   rJ   expectedFailure)rO   filteredrv   rw   rx   rj   rm   r\   s          @r   _filtered_test_itemsRunner._filtered_test_itemsu   s   35#'#3#3#9#9#;H!#H'oo/
d))W@V@VWWW (.J KDII VDI#55G~~d++$,MM77HJ%))%%	  6
 "11E||D))$,$<$<TYY$G	 2 ,0"4( 0 $<  r   c                    0 nU R                   R                  5        HX  u  p#SU S3nU R                  U5      n[        UR                  5       5       H  u  pg[	        XVUR
                  5        M     XQU'   MZ     U$ )z{
List of test cases to be applied on the parent scope
Example usage:
    globals().update(BackendTest(backend).test_cases)
OnnxBackendTest)r   rq   r^   sortedsetattrr-   )rO   
test_casesrv   rw   test_case_namer]   r\   rx   s           r   r   Runner.test_cases   sz     
#'#<#<#B#B#DH*8*D9N++N;I$Y__%67
	3 8)2~& $E r   c                    [         R                  " 5       n[        U R                  R	                  5       S S9 H1  nUR                  [         R                  R                  U5      5        M3     U$ )z{
TestSuite that can be run by TestRunner
Example usage:
    unittest.TextTestRunner().run(BackendTest(backend).test_suite)
c                .    U R                   R                  $ rX   	__class__r   cls    r   <lambda>#Runner.test_suite.<locals>.<lambda>   s    R\\5J5Jr   key)r[   	TestSuiter   r   rr   addTestsdefaultTestLoaderloadTestsFromTestCase)rO   suitecases      r   
test_suiteRunner.test_suite   sZ     ""$OO""$*J
D NN855KKDQR
 r   c                    U R                  S5      n[        U R                  R                  5       S S9 H;  n[        UR	                  5       5       H  u  p4[        XUR                  5        M     M=     U$ )z
One single unittest.TestCase that hosts all the test functions
Example usage:
    onnx_backend_tests = BackendTest(backend).tests
OnnxBackendTestc                .    U R                   R                  $ rX   r   r   s    r   r   Runner.tests.<locals>.<lambda>   s    r||?T?Tr   r   )r^   r   r   rr   rq   r   r-   )rO   testsrw   r\   rx   s        r   r   Runner.tests   sh     ##$56%%,,.4T
I %Y__%67
TYY/ 8

 r   c                ~   [         R                  R                  [        U5      [        U5      5        [	        [        U5      5       H  n[        X%   [        [        45      (       a<  [	        [        X%   5      5       H   nU R                  X   U   X%   U   X45        M"     M\  [         R                  R                  X%   R                  X   R                  5        X   R                  [        :X  a&  [         R                  R                  X%   X   5        M  [         R                  R                  X%   X   X4S9  M     g )Nrtolatol)nptestingassert_equallenr%   
isinstancelisttupleassert_similar_outputsdtypeobjectassert_array_equalassert_allclose)clsref_outputsoutputsr   r   r,   js          r   r   Runner.assert_similar_outputs   s     	

Gc+.>?s7|$A'*tUm44s7:/A..#q)7:a=$ 0
 

''
(8(8+.:N:NO>''61JJ11'*knMJJ..
KN /  %r      c                   [         R                  " SS9n UR                  5         UR                  (       d   e[	        SUR
                   SUR                   35        [        UR                  UR                  5        [	        S5        [        R                  " UR                  5       nUR                  U5        S S S 5        [        R                  " UR                  5        g ! , (       d  f       N/= f! [         a!  n[	        SUR
                   SU 35        e S nAff = f! [        R                  " UR                  5        f = f)NF)deletezStart downloading model z from Donez!Failed to prepare data for model z: )tempfileNamedTemporaryFilecloseurlr'   
model_namer
   r\   tarfileopen
extractallr&   osremove)r   
model_test	model_dir
models_dirdownload_filetes          r   download_modelRunner.download_model   s     !335A	*!>>!>*:+@+@*A
GWX 
(:(:;&Mm001QZ( 2 IIm(() 21 	5j6K6K5LBqcRS	 IIm(()sH   BC5 )C$;C5 $
C2.C5 1D# 2C5 5
D ?DD  D# #"Ec           	        [         R                  R                  [         R                  " S[         R                  R	                  SS5      5      5      n[         R                  " S[         R                  R	                  US5      5      n[         R                  R	                  X1R
                  5      n[         R                  R                  [         R                  R	                  US5      5      (       d  [         R                  R                  U5      (       aL  Sn U SU 3n[         R                  R                  U5      (       a  US	-  nM3  [        R                  " XF5         [         R                  " U5        U R                  XUS
9  U$ )N	ONNX_HOME~.onnxONNX_MODELSmodels
model.onnxr   z.old.r!   )r   r   r   )r   path
expandusergetenvjoinr   existsshutilmovemakedirsr   )r   r   	onnx_homer   r   bidests          r   prepare_model_dataRunner.prepare_model_data   s   GG&&IIk277<<W#=>
	 YY}bggll9h.OP
j2G2GH	ww~~bggll9lCDDww~~i(('[bT2Dww~~d++a KK	0KK	"%z   r   c                   ^ ^^^^^ TR                  S5      (       d  [        ST 35      eSUUUU UU4S jjnU H  nU" U5        M     g )Ntest_z!Test name must start with test_: c                t  >^ ^ T ST R                  5        3mTTR                  T   ;   a  [        ST ST S35      e[        R                  " TR
                  R                  T 5      (       + ST  35      [        R                  " T5      SU UUU4S jj5       5       n[        UT5      TR                  T   T'   g )N_zDuplicated test name "z" in category "r   zBackend doesn't support device c                    >  0 TEUEnT" / U QTP70 UD6$ ! [          aH  nS[        R                  ;   d  S[        R                  ;   a  [        ST SU 35         S nAg  S nAg S nAff = f)Nz-vz	--verbosezTest z is effectively skipped: )r   sysargvr'   )r*   device_test_kwargmerged_kwargsr   devicedevice_test_namer+   	test_funcs       r   device_test_funcCRunner._add_test.<locals>.add_device_test.<locals>.device_test_func  s}    V$Cv$C1B$CM$DdDFDmDD8 Vsxx';#((+B&6%77PQRPSTUU ,CVs    
A(9A##A()r*   r   r   r   r1   r   )
lowerrM   
ValueErrorr[   skipIfrE   supports_devicer2   r3   r   )	r   r   r   rv   r+   report_itemrO   r   	test_names	   ` @r   add_device_test)Runner._add_test.<locals>.add_device_test  s    "+Aflln-=>4#3#3H#== ,-=,>ohZWXY  __LL00881&: __Y'V V (	
V <D +<DX&'78r   )r   rZ   r1   None)
startswithr   )	rO   rv   r   r   r   devicesr+   r   r   s	   ````` `  r   	_add_testRunner._add_test   sG     ##G,,@LMM	 	2 FF# r   c                ~   U R                   R                  (       d  [        SU< SU  S35      eU R                   R                  R                  S:w  a  [        SU< SU  S35      e[	        S U R                   R                  R
                  R                   5       5      nU(       a=  [        R                  R                  US9nUR                  U[        R                  5      $ [        R                  " U5      n[        R                  " U5      R                  U5      U-  R                  [        R                  5      $ )z:
Generates a random tensor based on the input definition.
zMInput expected to have tensor type. Unable to generate random data for model z and input .r!   zMCurrently limited to float tensors. Unable to generate random data for model c              3  j   #    U  H)  nUR                  S 5      (       a  UR                  OSv   M+     g7f)	dim_valuer!   N)HasFieldr  )r~   ds     r   r   -Runner.generate_dummy_data.<locals>.<genexpr>:  s.      
1 ::k22AKK91s   13)seed)rY   tensor_typeNotImplementedError	elem_typer   shapedimr   randomdefault_rngfloat32prodarangereshapeastype)xr	  r\   r  r  genns          r   generate_dummy_dataRunner.generate_dummy_data)  s    vv!!%<<@8;qcQRT  66''1,%<<@8;qcQRT   
VV''--11
 
 ))''T'2C::eRZZ00GGEN		!$$U+a/77

CCr   c                  ^ ^^ S /mSUUU 4S jjnTR                   T R                  ;   a;  T R                  " US-   TR                   UT40 T R                  TR                      D6  g T R                  US-   TR                   UT5        g )Nc           
       > T#R                   Gb  T#R                   R                  S5      (       Ga  [        R                  R	                  [        R                  R                  [        R                  R                  [        5      SSSST#R                   5      5      n[        R                  R                  U5      (       d  [        SU< S35      e[        R                  R                  [        R                  " S[        R                  R                  SS5      5      5      n[        R                  " S[        R                  R                  US	S
5      5      n[        R                  R                  UT#R                  5      n[        R                  R                  U5      (       d  [        R                  " U5        SnOMT#R                  c  T$R                  T#5      nOT#R                  n[        R                  R                  US5      nSn[         (       d  SU;   a  g ["        R$                  " U5      nUT"S'   ['        T$R(                  S5      (       aZ  [+        T$R(                  R,                  5      (       a6  T$R(                  R-                  U5      (       d  [.        R0                  " S5      eT$R(                  R2                  " X40 UD6n	U	c   eU(       Ga  [5        US5       n
["        R$                  " U
5      nS S S 5        [        R                  R                  US5      n[        R                  R                  U5      (       d  [        R6                  " U5        0 nWR8                  R:                   Vs1 s H  oR<                  iM     nnSn/ n[?        [A        UR8                  RB                  5      5       H  nUR8                  RB                  U   R<                  U;   a  M,  [        R                  R                  USU S35      nURE                  U5        US-  nUR8                  RB                  U   nT$RG                  UST#R                  SS9nUUUR<                  '   [5        US5       n
U
RI                  ["        RJ                  RM                  U5      RO                  5       5        S S S 5        M     [        R                  RQ                  U5      S   n/ n[?        [A        UR8                  RR                  5      5       HD  nU SU S3n[        R                  R                  U5      (       a  URE                  U5        MB  S n  O   Uc  ["        RT                  RW                  U5      nURY                  S U5      n[[        U5       H{  u  nn[        R                  R                  USU S35      n[5        US5       n
U
RI                  ["        RJ                  RM                  U5      RO                  5       5        S S S 5        M}     O[[        U5       HA  u  nn[        R                  R                  USU S35      n[\        R^                  " UU5        MC     O[`        R`                  " [        R                  R                  US5      5       Hk  n[b        R$                  " USS9n[e        US   5      n[e        U	RY                  U5      5      nUS   nT$Rg                  UUT#Rh                  T#Rj                  S 9  Mm     [`        R`                  " [        R                  R                  US!5      5       GH  n/ n[A        [`        R`                  " [        R                  R                  US"5      5      5      n[?        U5       H[  n[        R                  R                  USU S35      nT$Rm                  UUUR8                  RB                  U   Rn                  5        M]     / n[A        [`        R`                  " [        R                  R                  US#5      5      5      n [?        U 5       H[  n[        R                  R                  USU S35      n!T$Rm                  U!UUR8                  RR                  U   Rn                  5        M]     [e        U	RY                  U5      5      nT$Rg                  UUT#Rh                  T#Rj                  S 9  GM     g ! , (       d  f       GN= fs  snf ! , (       d  f       GM=  = f! , (       d  f       GM~  = f)$Nzonnx/backend/test/data/light/z..zUnable to find model r  r   r   r   r   r   lightTr   F
ai_onnx_mlr   is_compatiblezNot compatible with backendrbtest_data_set_0input_z.pbr!   )r	  r\   r  wb_output_output_ztest_data_*.npzbytes)encodinginputsr   r   ztest_data_set*z
input_*.pbzoutput_*.pb)8r   r   r   r   normpathr   dirname__file__r   FileNotFoundErrorr   r   r   r   r   r   r   onnxloadhasattrrE   callabler  r[   SkipTestpreparer   mkdirgraphinitializerr\   r%   r   inputappendr  writer   
from_arraySerializeToStringsplitextoutput	referenceReferenceEvaluatorrun	enumerater   copyglobr   r   r   r   r   _load_protorY   )%	test_selfr   r+   model_pb_pathr   r   r   	use_dummymodelprepared_modelfonxtest_data_setfeedsr,   initsn_inputr(  r\   r  valueprefixexpected_outputsrefr   otest_data_npz	test_datar   test_data_dir
inputs_num
input_fileref_outputs_numoutput_filemodel_markerr   rO   s%                                     r   r?  #Runner._add_model_test.<locals>.runI  s   ~~)jnn.G.G// / !# 0 0GGLL1"	! ww~~m44+.CMCTTU,VWWGG..IIk277<<W+EF	  YY!277<<	8W#M
 "$j*:O:O!P	ww~~i00KK	* 	''/ $ 7 7
 CI * 4 4I "Y E!	7|y8IIm,E#LOo66T\\778822599''(EFF!\\11%J6JN!--- -.!))A,C / !#Y8I Jww~~m44HH]+),)>)>?)>A)>?s399??34Ayyq)..%7 77<<y7LMDMM$'qLG		*A 44
(=(=e 5 E %*E!&&MdD)Q 1 1 < <U C U U WX *) 5 ))-8;#% s399#3#345A$XXaS4Dww~~d++(//5 '+$ 6 $+..;;C@C!ggdE2G )' 21!ww||MWQCs;KL!$-GGD$5$5$@$@$C$U$U$WX .- !3
 !**: ;1!ww||MWQCs;KLAt, !<
 &*YYGGLL,=>&M !# HI!)H"56F">#5#5f#=>G"+I"6K//#W:?? 0 & "&277<<	CS+T!U 277<<|+T!UV
z*A!#mvaS_!MJ$$Z9J9J19M9R9RS + !"%IIbggll=-HI# /A"$'',,}s#>N"OK$$#[%++2D2DQ2G2L2L 0
 ~11&9:++zZ__ , ! "Vw /. @ *)& .-s*   %c8c#1=c(=c;
c (
c8	;
d	Model)rD  r   r   rZ   r1   r   )r\   rK   r   )rO   r   r=   r?  r[  s   ``  @r   rN   Runner._add_model_testD  s     >BFF	 F	P ??d///NNw	
 ##JOO4 NN4'>:??CNr   c                   [        US5       nUR                  5       nUR                  S5      (       aL  [        R                  " 5       nUR                  U5        UR                  [        R                  " U5      5        OUR                  S5      (       aL  [        R                  " 5       nUR                  U5        UR                  [        R                  " U5      5        OmUR                  S5      (       aL  [        R                  " 5       nUR                  U5        UR                  [        R                  " U5      5        O[        S5        S S S 5        g ! , (       d  f       g = f)Nr   sequence_typer
  optional_typezRLoading proto of that specific type (Map/Sparse Tensor) is currently not supported)r   readr  r-  SequenceProtoParseFromStringr7  r   to_listTensorPrototo_arrayOptionalPrototo_optionalr'   )	rO   proto_filenametarget_listmodel_type_protorI  protobuf_contentsequencetensoroptionals	            r   rC  Runner._load_proto  s    .$'1 vvx((99--/(()9:""<#7#7#AB!**=99))+&&'78""<#8#8#@A!**?;;--/(()9:""<#;#;H#EFh (''s   EE
E&)rI   rH   rF   rM   rK   rJ   rE   )NN)rE   ztype[Backend]rP   z
str | NonerQ   zdict | Noner1   r   )r\   rZ   r1   type[unittest.TestCase])re   rZ   r1   r9   )r1   r9   )r1   zdict[str, dict[str, TestItem]])r1   z"dict[str, type[unittest.TestCase]])r1   zunittest.TestSuite)r1   rr  )
r   Sequence[Any]r   rs  r   floatr   rt  r1   r   )r   r   r   rZ   r   rZ   r1   r   )r   r   r1   rZ   ))CPUCUDA)rv   rZ   r   rZ   r   r6   r   z#list[ModelProto | NodeProto | None]r   zIterable[str]r+   r   r1   r   )r    F)
r  r   r	  intr\   rZ   r  boolr1   z
np.ndarray)r   r   r=   rZ   r1   r   )rj  rZ   rk  zlist[np.ndarray | list[Any]]rl  r   r1   r   )r   r   r   r   rU   r^   rf   rj   rm   ry   propertyr   r   r   r   classmethodr   r7   r   r   r   staticmethodr  rN   rC  r   r   r   r   r9   r9   8   s     %)#'	 8 8 " 8 !	 8
 
 8D  (       "  	
  
 . 1*!*.1*?B*	*  *,  : "1'$'$ '$ &	'$
 9'$ '$ '$ 
'$R INDD!$D03DBFD	D D4VOp 2 $	
 
r   r9   )r.   rx  r1   z2Callable[[Callable[..., Any]], Callable[..., Any]]),
__future__r   r2   rB  r   rb   r   r   r   r   r(   r[   collectionsr   typingr   r   r   r   r	   urllib.requestr
   numpyr   r-  onnx.referencer   r   r   r   r   r   onnx.backend.baser    onnx.backend.test.case.test_caser   onnx.backend.test.loaderr   onnx.backend.test.runner.itemr   r1  r   r7   r9   r   r   r   <module>r     sr   
 #   	 	  
     # = = &    X X % 5 5 2	(9(9 	({ {r   