
    bIg+                        d dl mZ d dlZd dlmZ d dlZd dlmZmZmZmZ  G d dej                        Z
edk(  r ej                  d	       yy)
    )annotationsN)parameterized)
GraphProtoOperatorSetIdProtoTensorProtocheckerc                  H   e Zd Zd,dZd-dZd-dZd-dZd-dZd-dZ e	j                  di fdd	d
ifdddifdd
ddfg      	 	 	 	 	 	 d.d       Zd Z e	j                  g d      d        Z e	j                  dej                  fdej                   fdej"                  fdej$                  fdej&                  fdej(                  fdej*                  fdej,                  fdej.                  fdej0                  fdej2                  fdej4                  fd ej6                  fd!ej8                  fd"ej:                  fd#ej<                  fd$ej>                  fd%ej@                  fd&ejB                  fd'ejD                  fd(ejF                  fd)ejH                  fg      d-d*       Z%y+)/TestBasicFunctionsc                D   | j                  t        |j                        d       | j                  |j                  d   j                  d       | j                  |j                  d   j                  d       | j                  |j                  d   j                  d       y )N   r   MatMul   Add   Softmax)assertEquallennodeop_type)selfgraphs     R/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/test/parser_test.pycheck_graphzTestBasicFunctions.check_graph   st    UZZ!,A..9A..6A..	:    c                h    d}t         j                  j                  |      }| j                  |       y )Nz
           agraph (float[N, 128] X, float[128,10] W, float[10] B) => (float[N] C)
           {
              T = MatMul(X, W)
              S = Add(T, B)
              C = Softmax(S)
           }
           )onnxparserparse_graphr   )r   inputr   s      r   test_parse_graphz#TestBasicFunctions.test_parse_graph   s-     ''.r   c                    d}t         j                  j                  |      }| j                  |j                  d       | j                  t        |j                        d       | j                  |j                         y )Na@  
           <
             ir_version: 7,
             opset_import: [ "" : 10, "com.microsoft": 1]
           >
           agraph (float[N, 128] X, float[128,10] W, float[10] B) => (float[N] C)
           {
              T = MatMul(X, W)
              S = Add(T, B)
              C = Softmax(S)
           }
              r   )	r   r   parse_modelr   
ir_versionr   opset_importr   r   r   r   models      r   test_parse_modelz#TestBasicFunctions.test_parse_model!   sb     ''.))1-U//0!4%r   c                d    d| j                  t        j                  j                  fd       y )Nz
           agraph (float[N, 128] X, float[128,10] W, float[10] B) => (float[N] C)
           {
              T = MatMul[X, W]
              S = Add(T, B)
              C = Softmax(S)
           }
           c                 B    t         j                  j                         S N)r   r   r   r   s   r   <lambda>z;TestBasicFunctions.test_parse_graph_error.<locals>.<lambda>=       DKK,C,CE,J r   assertRaisesr   r   
ParseErrorr   r   s    @r   test_parse_graph_errorz)TestBasicFunctions.test_parse_graph_error3   s*     	KK""$J	
r   c                d    d| j                  t        j                  j                  fd       y )NaA  
           <
             ir_version: 7,
             opset_import: [ "" : 10   "com.microsoft": 1]
           >
           agraph (float[N, 128] X, float[128,10] W, float[10] B) => (float[N] C)
           {
              T = MatMul(X, W)
              S = Add(T, B)
              C = Softmax(S)
           }
           c                 B    t         j                  j                         S r+   r   r   r#   r,   s   r   r-   z;TestBasicFunctions.test_parse_model_error.<locals>.<lambda>N   r.   r   r/   r2   s    @r   test_parse_model_errorz)TestBasicFunctions.test_parse_model_error@   s*     	KK""$J	
r   c                p    d}t         j                  j                  |      }t        j                  |       y )Nac  
            <
            ir_version: 9,
            opset_import: [ "" : 15, "custom_domain" : 1],
            producer_name: "FunctionProtoTest",
            producer_version: "1.0",
            model_version: 1,
            doc_string: "A test model for model local functions."
          >
         agraph (float[N] x) => (float[N] out)
         {
            out = custom_domain.Selu<alpha=2.0, gamma=3.0>(x)
         }
         <
         domain: "custom_domain",
         opset_import: [ "" : 15],
         doc_string: "Test function proto"
         >
           Selu
           <alpha: float=1.67326319217681884765625, gamma: float=1.05070102214813232421875>
           (X) => (C)
           {
               constant_alpha = Constant<value_float: float=@alpha>()
               constant_gamma = Constant<value_float: float=@gamma>()
               alpha_x = CastLike(constant_alpha, X)
               gamma_x = CastLike(constant_gamma, X)
               exp_x = Exp(X)
               alpha_x_exp_x = Mul(alpha_x, exp_x)
               alpha_x_exp_x_ = Sub(alpha_x_exp_x, alpha_x)
               neg = Mul(gamma_x, alpha_x_exp_x_)
               pos = Mul(gamma_x, X)
               _zero = Constant<value_float=0.0>()
               zero = CastLike(_zero, X)
               less_eq = LessOrEqual(X, zero)
               C = Where(less_eq, neg, pos)
           }
        )r   r   r#   r   check_modelr&   s      r   #test_parse_function_with_attributesz6TestBasicFunctions.test_parse_function_with_attributesQ   s.    $L ''.E"r   zEagraph (float[N] x) => (float[N] out) { out = custom_domain.Selu(x) }zPagraph (float[N] x) => (float[N] out) { out = custom_domain.Selu<alpha=2.0>(x) }alphag       @zPagraph (float[N] x) => (float[N] out) { out = custom_domain.Selu<gamma=3.0>(x) }gammag      @z[agraph (float[N] x) => (float[N] out) { out = custom_domain.Selu<alpha=2.0, gamma=3.0>(x) })r;   r<   c                  
 d
dd }
fd}d
 d d}t         j                  j                  |      g}t         j                  j                  |      }t	        dd	
      t	        dd
      g}t         j
                  j                  |||      }	t        j                  |	        ||	        ||	j                  j                  d   |       y )Ng   ?g   ?c                    |D ]R  }| j                   D cg c]  }|j                  |k(  s| }}t        |      dk(  sJ |d   j                  ||   k(  rRJ  y c c}w )Nr   r   )	attributenamer   f)r   
attributeskeyattr
match_attrs        r   expect_custom_node_attributezfTestBasicFunctions.test_composite_parse_function_with_attributes.<locals>.expect_custom_node_attribute   sb    ! :/3~~RtcAQdR
R:!+++!!}*S/999:Rs
   AAc                   t        | j                  d   j                        dk(  sJ | j                  d   j                  D cg c]  }|j                  dk(  r| }}t        |      dk(  r|d   j                  k(  sJ | j                  d   j                  D cg c]  }|j                  dk(  r| }}t        |      dk(  r|d   j                  k(  sJ y c c}w c c}w )Nr   r   r;   r   r<   )r   	functionsattribute_protor@   rA   )r'   
attr_protoattr_proto_alphaattr_proto_gammadefault_alphadefault_gammas       r   expect_model_function_attributeziTestBasicFunctions.test_composite_parse_function_with_attributes.<locals>.expect_model_function_attribute   s    uq)99:a??? #(//!"4"D"D ??g-    
 '(A-2B12E2G2G=2XXX #(//!"4"D"D ??g-    
 '(A-2B12E2G2G=2XXX2X  s   CCz
         <
         domain: "custom_domain",
         opset_import: [ "" : 15],
         doc_string: "Test function proto"
         >
           Selu
           <alpha: float=z, gamma: float=a  >
           (X) => (C)
           {
               constant_alpha = Constant<value_float: float=@alpha>()
               constant_gamma = Constant<value_float: float=@gamma>()
               alpha_x = CastLike(constant_alpha, X)
               gamma_x = CastLike(constant_gamma, X)
               exp_x = Exp(X)
               alpha_x_exp_x = Mul(alpha_x, exp_x)
               alpha_x_exp_x_ = Sub(alpha_x_exp_x, alpha_x)
               neg = Mul(gamma_x, alpha_x_exp_x_)
               pos = Mul(gamma_x, X)
               _zero = Constant<value_float=0.0>()
               zero = CastLike(_zero, X)
               less_eq = LessOrEqual(X, zero)
               C = Where(less_eq, neg, pos)
           }
            )domainversioncustom_domainr   )rH   opset_importsr   )r   r   parse_functionr   r   helper
make_modelr   r9   r   r   )r   
graph_textexpected_attributerF   rO   function_textrH   r   rU   r'   rM   rN   s             @@r   -test_composite_parse_function_with_attributesz@TestBasicFunctions.test_composite_parse_function_with_attributes{   s    . 21	:	Y ( G	4 [[//>?	''
3b"5oqA

 &&Ym ' 
 	E"'.$U[[%5%5a%8:LMr   c                   t         j                  j                  d      }| j                  t	        |j
                        ddg       | j                  t	        |j                        ddg       | j                  t        |j                        d       t         j                  j                  |d      }| j                  |d       | j                  |j                  d       | j                  |j                  d	       y )
Nz5out1, out2 = SomeDomain.SomeOp <attr1 = 1> (in1, in2)in1in2out1out2r   attr1
SomeDomainSomeOp)r   r   
parse_noder   listr   outputr   r?   rW   get_node_attr_valuerR   r   )r   r   attr_vals      r   test_parse_nodez"TestBasicFunctions.test_parse_node   s    {{%%C
 	djj)E5>:dkk*VV,<=T^^,a0;;224A1%l3x0r   ))not_a_good_floatT)inf1T)z-inf1T)nan0T)z-nan0T)naninfT)infF)z-infF)infinityF)z	-infinityF)nanF)z-NaNFc                   d| d|r.| j                  t        j                  j                  fd       y t        j                  j	                        }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  t        |j                  j                        d       | j                  t        |j                  j                  d   j                        d       | j                  |j                  j                  d   j                  d   j                  d	       | j                  |j                  j                  d   j                  d   j                  t        j                  j                          | j                  t#        |j                  j                  d   j                  d   j$                        t#        t'        |                   y )
Nz
        <
        ir_version: 8,
        opset_import: ["" : 18, "this" : 1],
        producer_name: "FunctionProtoTest",
        producer_version: "1.0"
        >
        _func () => ()
        {
        tmp = Constant <value_float = z>()
        }
        c                 B    t         j                  j                         S r+   r6   )
model_texts   r   r-   zDTestBasicFunctions.test_parse_various_float_values.<locals>.<lambda>   s    0G0G
0S r      FunctionProtoTestz1.0r   r   value_float)r0   r   r   r1   r#   r   r$   producer_nameproducer_versionr   r   r   r?   r@   typeAttributeProtoFLOATstrrA   float)r   test_literalexpect_exceptionr'   rt   s       @r   test_parse_various_float_valuesz2TestBasicFunctions.test_parse_various_float_values   s   "	' (4n 5	
 &&(S KK++J7EU--q1U002EFU33U;S!1!12A6S!1!1!!4!>!>?CU[[--a0::1=BBMR  #--a055t7J7J7P7P EKK$$Q'11!4667U<=P9Qr   bfloat16bool	complex64
complex128doublefloat16r~   float8e4m3fnfloat8e4m3fnuz
float8e5m2float8e5m2fnuzint4int8int16int32int64stringuint4uint8uint16uint32uint64c           	         |t         j                  k(  rdnd}d| d| d| d| d	}t        j                  j	                  |      }| j                  t        |j                  j                        d       y )	Nz{"0"}z{0}z
           <
             ir_version: 10,
             opset_import: [ "" : 19]
           >
           agraph (float[N] X) => (z![N] C)
           <
             z[1] weight = z5
           >
           {
              C = Cast<to=z>(X)
           }
           r   )	r   STRINGr   r   r#   r   r   r   r   )r   r@   itypew
text_graphr   s         r   test_parse_graph_typesz)TestBasicFunctions.test_parse_graph_types  s    6  2 22G$
 %)6 *V= $ !' "
 ''
3U[[--.2r   N)r   r   returnNone)r   r   )rY   r}   rZ   dictr   r   )&__name__
__module____qualname__r   r    r(   r3   r7   r:   r   expandr\   rj   r   r   BFLOAT16BOOL	COMPLEX64
COMPLEX128DOUBLEFLOAT16r|   FLOAT8E4M3FNFLOAT8E4M3FNUZ
FLOAT8E5M2FLOAT8E5M2FNUZINT4INT8INT16INT32INT64r   UINT4UINT8UINT16UINT32UINT64r    r   r   r
   r
      s5   ;
 &$

"(#T ] X
 c#
 c#
 n,	
(BNBN37BN	BN)(BNH
1 ]	
 ! @ ]--.[%%&+//0;112{))*++,k''([556{99:;112{99:[%%&[%%&k''(k''(k''({))*k''(k''({))*{))*{))*-	
43543r   r
   __main__r   )	verbosity)
__future__r   unittestr   r   r   r   r   r   TestCaser
   r   mainr   r   r   <module>r      sK    #  '  E Ek3** k3\	 zHMMA r   