
    ܙdH                        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
 d dlmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZmZ  e
            Z e
            Zde_        d	 Z G d
 de           Z! G d de           Z" G d de          Z# G d de#          Z$ G d de          Z% G d de%          Z& G d de          Z' G d de          Z( G d de          Z)e*dk    r ej+                     dS dS )    N)compile_isolatedFlags)jit)typesutilserrors	typeinfer)_header_lead)TestCasetag
needs_blas)matmul_usecaseimatmul_usecase
DumbMatrixTc                       fd}|S )Nc                     | z  S N )xexps    :lib/python3.11/site-packages/numba/tests/test_operators.pypow_usecasez&make_static_power.<locals>.pow_usecase   s    Cx    r   )r   r   s   ` r   make_static_powerr      s"        r   c                      e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zer ee          Z ee          Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Z ed             Z!ed             Z"ed             Z#ed             Z$ed              Z%ed!             Z&ed"             Z'ed#             Z(ed$             Z)ed%             Z*ed&             Z+d'S )(LiteralOperatorImplc                     | |z   S r   r   r   ys     r   add_usecasezLiteralOperatorImpl.add_usecase        1ur   c                     | |z  } | S r   r   r   s     r   iadd_usecasez LiteralOperatorImpl.iadd_usecase$       	Qr   c                     | |z
  S r   r   r   s     r   sub_usecasezLiteralOperatorImpl.sub_usecase)   r!   r   c                     | |z  } | S r   r   r   s     r   isub_usecasez LiteralOperatorImpl.isub_usecase-   r$   r   c                     | |z  S r   r   r   s     r   mul_usecasezLiteralOperatorImpl.mul_usecase2   r!   r   c                     | |z  } | S r   r   r   s     r   imul_usecasez LiteralOperatorImpl.imul_usecase6   r$   r   c                     | |z  S r   r   r   s     r   floordiv_usecasez$LiteralOperatorImpl.floordiv_usecase;       Avr   c                     | |z  } | S r   r   r   s     r   ifloordiv_usecasez%LiteralOperatorImpl.ifloordiv_usecase?       	ar   c                     | |z  S r   r   r   s     r   truediv_usecasez#LiteralOperatorImpl.truediv_usecaseD   r!   r   c                     | |z  } | S r   r   r   s     r   itruediv_usecasez$LiteralOperatorImpl.itruediv_usecaseH   r$   r   c                     | |z  S r   r   r   s     r   mod_usecasezLiteralOperatorImpl.mod_usecaseQ   r!   r   c                     | |z  } | S r   r   r   s     r   imod_usecasez LiteralOperatorImpl.imod_usecaseU   r$   r   c                     | |z  S r   r   r   s     r   r   zLiteralOperatorImpl.pow_usecaseZ   r/   r   c                     | |z  } | S r   r   r   s     r   ipow_usecasez LiteralOperatorImpl.ipow_usecase^   r2   r   c                     | |z  S r   r   r   s     r   bitshift_left_usecasez)LiteralOperatorImpl.bitshift_left_usecasec   r/   r   c                     | |z  } | S r   r   r   s     r   bitshift_ileft_usecasez*LiteralOperatorImpl.bitshift_ileft_usecaseg   r2   r   c                     | |z	  S r   r   r   s     r   bitshift_right_usecasez*LiteralOperatorImpl.bitshift_right_usecasel   r/   r   c                     | |z  } | S r   r   r   s     r   bitshift_iright_usecasez+LiteralOperatorImpl.bitshift_iright_usecasep   r2   r   c                     | |z  S r   r   r   s     r   bitwise_and_usecasez'LiteralOperatorImpl.bitwise_and_usecaseu   r!   r   c                     | |z  } | S r   r   r   s     r   bitwise_iand_usecasez(LiteralOperatorImpl.bitwise_iand_usecasey   r$   r   c                     | |z  S r   r   r   s     r   bitwise_or_usecasez&LiteralOperatorImpl.bitwise_or_usecase~   r!   r   c                     | |z  } | S r   r   r   s     r   bitwise_ior_usecasez'LiteralOperatorImpl.bitwise_ior_usecase   r$   r   c                     | |z  S r   r   r   s     r   bitwise_xor_usecasez'LiteralOperatorImpl.bitwise_xor_usecase   r!   r   c                     | |z  } | S r   r   r   s     r   bitwise_ixor_usecasez(LiteralOperatorImpl.bitwise_ixor_usecase   r$   r   c                     |  S r   r   r   _unuseds     r   bitwise_not_usecase_binaryz.LiteralOperatorImpl.bitwise_not_usecase_binary   	    r	r   c                     |  S r   r   r   s    r   bitwise_not_usecasez'LiteralOperatorImpl.bitwise_not_usecase   rV   r   c                     |  S r   r   rX   s    r   not_usecasezLiteralOperatorImpl.not_usecase   s	    vr   c                     |  S r   r   rX   s    r   negate_usecasez"LiteralOperatorImpl.negate_usecase   rV   r   c                     | 
 S r   r   rX   s    r   unary_positive_usecasez*LiteralOperatorImpl.unary_positive_usecase   rV   r   c                     | |k     S r   r   r   s     r   
lt_usecasezLiteralOperatorImpl.lt_usecase       1ur   c                     | |k    S r   r   r   s     r   
le_usecasezLiteralOperatorImpl.le_usecase       Avr   c                     | |k    S r   r   r   s     r   
gt_usecasezLiteralOperatorImpl.gt_usecase   rb   r   c                     | |k    S r   r   r   s     r   
ge_usecasezLiteralOperatorImpl.ge_usecase   re   r   c                     | |k    S r   r   r   s     r   
eq_usecasezLiteralOperatorImpl.eq_usecase   re   r   c                     | |k    S r   r   r   s     r   
ne_usecasezLiteralOperatorImpl.ne_usecase   re   r   c                 
    | |v S r   r   r   s     r   
in_usecasezLiteralOperatorImpl.in_usecase       Avr   c                 
    | |vS r   r   r   s     r   not_in_usecasez"LiteralOperatorImpl.not_in_usecase   s    zr   c                 
    | |u S r   r   r   s     r   
is_usecasezLiteralOperatorImpl.is_usecase   rp   r   N),__name__
__module____qualname__staticmethodr    r#   r&   r(   r*   r,   r.   r1   r4   r6   r   r   r8   r:   r   r=   r?   rA   rC   rE   rG   rI   rK   rM   rO   rQ   rU   rY   r[   r]   r_   ra   rd   rg   ri   rk   rm   ro   rr   rt   r   r   r   r   r      s:         \   \   \   \   \   \   \   \   \   \  8%n55&,77  \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \   \  r   r   c                   ~   e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Z ed             Z!ed             Z"ed              Z#ed!             Z$ed"             Z%ed#             Z&ed$             Z'ed%             Z(ed&             Z)ed'             Z*ed(             Z+d)S )*FunctionalOperatorImplc                 ,    t          j        | |          S r   )operatoraddr   s     r   r    z"FunctionalOperatorImpl.add_usecase       |Aq!!!r   c                 ,    t          j        | |          S r   )r|   iaddr   s     r   r#   z#FunctionalOperatorImpl.iadd_usecase       }Q"""r   c                 ,    t          j        | |          S r   )r|   subr   s     r   r&   z"FunctionalOperatorImpl.sub_usecase   r~   r   c                 ,    t          j        | |          S r   )r|   isubr   s     r   r(   z#FunctionalOperatorImpl.isub_usecase   r   r   c                 ,    t          j        | |          S r   )r|   mulr   s     r   r*   z"FunctionalOperatorImpl.mul_usecase   r~   r   c                 ,    t          j        | |          S r   )r|   imulr   s     r   r,   z#FunctionalOperatorImpl.imul_usecase   r   r   c                 ,    t          j        | |          S r   )r|   floordivr   s     r   r.   z'FunctionalOperatorImpl.floordiv_usecase        A&&&r   c                 ,    t          j        | |          S r   )r|   	ifloordivr   s     r   r1   z(FunctionalOperatorImpl.ifloordiv_usecase   s    !!Q'''r   c                 ,    t          j        | |          S r   )r|   truedivr   s     r   r4   z&FunctionalOperatorImpl.truediv_usecase       1%%%r   c                 ,    t          j        | |          S r   )r|   itruedivr   s     r   r6   z'FunctionalOperatorImpl.itruediv_usecase   r   r   c                 ,    t          j        | |          S r   )r|   modr   s     r   r8   z"FunctionalOperatorImpl.mod_usecase   r~   r   c                 ,    t          j        | |          S r   )r|   imodr   s     r   r:   z#FunctionalOperatorImpl.imod_usecase   r   r   c                 ,    t          j        | |          S r   )r|   powr   s     r   r   z"FunctionalOperatorImpl.pow_usecase   r~   r   c                 ,    t          j        | |          S r   )r|   ipowr   s     r   r=   z#FunctionalOperatorImpl.ipow_usecase   r   r   c                 ,    t          j        | |          S r   )r|   matmulr   s     r   r   z%FunctionalOperatorImpl.matmul_usecase      q!$$$r   c                 ,    t          j        | |          S r   )r|   imatmulr   s     r   r   z&FunctionalOperatorImpl.imatmul_usecase  r   r   c                 ,    t          j        | |          S r   )r|   lshiftr   s     r   r?   z,FunctionalOperatorImpl.bitshift_left_usecase  r   r   c                 ,    t          j        | |          S r   )r|   ilshiftr   s     r   rA   z-FunctionalOperatorImpl.bitshift_ileft_usecase  r   r   c                 ,    t          j        | |          S r   )r|   rshiftr   s     r   rC   z-FunctionalOperatorImpl.bitshift_right_usecase  r   r   c                 ,    t          j        | |          S r   )r|   irshiftr   s     r   rE   z.FunctionalOperatorImpl.bitshift_iright_usecase  r   r   c                 ,    t          j        | |          S r   )r|   and_r   s     r   rG   z*FunctionalOperatorImpl.bitwise_and_usecase  r   r   c                 ,    t          j        | |          S r   )r|   iandr   s     r   rI   z+FunctionalOperatorImpl.bitwise_iand_usecase  r   r   c                 ,    t          j        | |          S r   )r|   or_r   s     r   rK   z)FunctionalOperatorImpl.bitwise_or_usecase#  r~   r   c                 ,    t          j        | |          S r   )r|   iorr   s     r   rM   z*FunctionalOperatorImpl.bitwise_ior_usecase'  r~   r   c                 ,    t          j        | |          S r   )r|   xorr   s     r   rO   z*FunctionalOperatorImpl.bitwise_xor_usecase+  r~   r   c                 ,    t          j        | |          S r   )r|   ixorr   s     r   rQ   z+FunctionalOperatorImpl.bitwise_ixor_usecase/  r   r   c                 *    t          j        |           S r   r|   invertrS   s     r   rU   z1FunctionalOperatorImpl.bitwise_not_usecase_binary3      q!!!r   c                 *    t          j        |           S r   r   rX   s    r   rY   z*FunctionalOperatorImpl.bitwise_not_usecase7  r   r   c                 *    t          j        |           S r   )r|   not_rX   s    r   r[   z"FunctionalOperatorImpl.not_usecase;  s    }Qr   c                 *    t          j        |           S r   )r|   negrX   s    r   r]   z%FunctionalOperatorImpl.negate_usecase?      |Ar   c                 *    t          j        |           S r   )r|   posrX   s    r   r_   z-FunctionalOperatorImpl.unary_positive_usecaseC  r   r   c                 ,    t          j        | |          S r   )r|   ltr   s     r   ra   z!FunctionalOperatorImpl.lt_usecaseG      {1a   r   c                 ,    t          j        | |          S r   )r|   ler   s     r   rd   z!FunctionalOperatorImpl.le_usecaseK  r   r   c                 ,    t          j        | |          S r   )r|   gtr   s     r   rg   z!FunctionalOperatorImpl.gt_usecaseO  r   r   c                 ,    t          j        | |          S r   )r|   ger   s     r   ri   z!FunctionalOperatorImpl.ge_usecaseS  r   r   c                 ,    t          j        | |          S r   )r|   eqr   s     r   rk   z!FunctionalOperatorImpl.eq_usecaseW  r   r   c                 ,    t          j        | |          S r   )r|   ner   s     r   rm   z!FunctionalOperatorImpl.ne_usecase[  r   r   c                 ,    t          j        ||           S r   r|   containsr   s     r   ro   z!FunctionalOperatorImpl.in_usecase_  r   r   c                 .    t          j        ||            S r   r   r   s     r   rr   z%FunctionalOperatorImpl.not_in_usecasec  s    $Q****r   c                 ,    t          j        | |          S r   )r|   is_r   s     r   rt   z!FunctionalOperatorImpl.is_usecaseg  r~   r   N),ru   rv   rw   rx   r    r#   r&   r(   r*   r,   r.   r1   r4   r6   r8   r:   r   r=   r   r   r?   rA   rC   rE   rG   rI   rK   rM   rO   rQ   rU   rY   r[   r]   r_   ra   rd   rg   ri   rk   rm   ro   rr   rt   r   r   r   rz   rz      sJ       " " \" # # \# " " \" # # \# " " \" # # \# ' ' \' ( ( \( & & \& ' ' \' " " \" # # \# " " \" # # \# % % \% & & \& % % \% & & \& % % \% & & \& # # \# # # \# " " \" " " \" " " \" # # \# " " \" " " \"     \    \   \ ! ! \! ! ! \! ! ! \! ! ! \! ! ! \! ! ! \! ' ' \' + + \+ " " \" " "r   rz   c                   ~   e Zd ZdZeZej        ej        ej	        ej
        ej        ej        ej        ej        ej        ej        ej        dZefdZefdZd ZedfdZg dZej        ej        ej        ej        ej        ej        gZ ej!        ej"        gZ#efd	Z$d
 Z%efdZ&d Z'efdZ(d Z)efdZ*d Z+efdZ,d Z-efdZ.d Z/d Z0d Z1efdZ2efdZ3efdZ4efdZ5efdZ6d^dZ7 e7 e8            ddd d!d"            e7 e8            d#dd d!d"            e7 e8            d$dd%d&           edfd'Z9efd(Z:d) Z;efd*Z<d+ Z=efd,Z>d- Z?efd.Z@efd/ZA e7 e8            d0d1d2d&           efd3ZBd4 ZCefd5ZDd6 ZEefd7ZFd8 ZGefd9ZHd: ZIefd;ZJd< ZKd= ZLd> ZMd? ZNeOd@             ZPdA ZQdB ZRefdCZS e7 e8            dDdEdFi           efdGZT e7 e8            dHdEdIi           efdJZU e7 e8            dKdLdMdN           efdOZVdP ZWdQ ZXdR ZYdS ZZdT Z[dU Z\dV Z]dW Z^dX Z_efdYZ`dZ Zaefd[Zbd\ Zcd]S )_TestOperatorszw
    Test standard Python operators on scalars.

    NOTE: operators on array are generally tested in test_ufuncs.
    r?   rA   rC   rE   rG   rI   rK   rM   rO   rQ   rU   c                    |D ]}t          |||          }|j        }t          j        ||          D ]\  }	}
t	          j        |	          }t	          j        |	          } |||
          } |||
          }|                     ||d|	d|
d|d|d|
           |                     ||d|	d|
d|d|d|
           d S )Nflagsmismatch for (, ) with types :  != msg)r   entry_point	itertoolsproductcopyassertPreciseEqualselfpyfunc
x_operands
y_operands
types_listr   	arg_typescrcfuncr   r   x_got
x_expectedgotexpecteds                  r   run_test_intszTestOperators.run_test_ints  s5   # 	@ 	@I!&)5AAABNE!)*jAA @ @1 	!!Yq\\
eE1oo!6*a00''11aaaCCC; ( < < < ''::11aaaEEE::? ( @ @ @ @@	@ 	@r   c                    |D ]}t          |||          }|j        }t          j        ||          D ]\  }	}
t	          j        |	          }t	          j        |	          } |||
          } |||
          }t
          j                            ||d           t
          j                            ||d           d S )Nr   gh㈵>)rtol)r   r   r   r   r   nptestingassert_allcloser   s                  r   run_test_floatszTestOperators.run_test_floats  s    # 	I 	II!&)5AAABNE!)*jAA I I1 	!!Yq\\
eE1oo!6*a00
**3t*DDD
**5*4*HHHHI	I 	Ir   c                 6   t          |d          r|                    |          S |t          j        v r!t	          t          |j                            S |t          j        v rt          |j                  S |t          j        v rt          |j                  S |S )Ndtype)
hasattrcast_python_valuer   unsigned_domainabsintrealinteger_domainreal_domainfloat)r   op
numba_types      r   coerce_operandzTestOperators.coerce_operand  s    2w 		//3335000s27||$$$5///rw<<5,,,>>!Ir   Tc                    | j         }| j        }|s
|| j        z   }|D ]}t          |||f|          }|j        }t          j        ||          D ]\  }	}
|                     |	|          }	|                     |
|          }
 ||	|
          } ||	|
          }|                     t          |          t          |                     | 
                    ||d|d|	d|
d           d S )Nr   zmismatch with z (r   ))compare_scalar_operandscompare_typescompare_unordered_typesr   r   r   r   r  assertIstypeassertEqual)r   r   r   orderedopsr   typr   r   r   r   r   r   s                r   run_test_scalar_comparez%TestOperators.run_test_scalar_compare  s(   *'
 	C#d&BBJ 	0 	0C!&3*EBBBBNE!)#s33 	0 	01''3//''3//!6!Q<<eAqkkd3iih888  hh$'CCAAA"/0 0 0 0	0	0 	0r   )g      y            ?y             @y            ?      ?c                 F    |                      | j        j        |           d S r   )r  r  ra   r   r   s     r   test_lt_scalarzTestOperators.test_lt_scalar  #    $$TW%7?????r   c                 <    |                      t                     d S Nr   )r  Noflagsr   s    r   test_lt_scalar_npmz TestOperators.test_lt_scalar_npm      '*****r   c                 F    |                      | j        j        |           d S r   )r  r  rd   r  s     r   test_le_scalarzTestOperators.test_le_scalar  r  r   c                 <    |                      t                     d S r  )r   r  r  s    r   test_le_scalar_npmz TestOperators.test_le_scalar_npm  r  r   c                 F    |                      | j        j        |           d S r   )r  r  rg   r  s     r   test_gt_scalarzTestOperators.test_gt_scalar  r  r   c                 <    |                      t                     d S r  )r$  r  r  s    r   test_gt_scalar_npmz TestOperators.test_gt_scalar_npm  r  r   c                 F    |                      | j        j        |           d S r   )r  r  ri   r  s     r   test_ge_scalarzTestOperators.test_ge_scalar  r  r   c                 <    |                      t                     d S r  )r(  r  r  s    r   test_ge_scalar_npmz TestOperators.test_ge_scalar_npm  r  r   c                 J    |                      | j        j        |d           d S NF)r  )r  r  rk   r  s     r   test_eq_scalarzTestOperators.test_eq_scalar  (    $$TW%7$NNNNNr   c                 <    |                      t                     d S r  )r-  r  r  s    r   test_eq_scalar_npmz TestOperators.test_eq_scalar_npm  r  r   c                 J    |                      | j        j        |d           d S r,  )r  r  rm   r  s     r   test_ne_scalarzTestOperators.test_ne_scalar  r.  r   c                 <    |                      t                     d S r  )r2  r  r  s    r   test_ne_scalar_npmz TestOperators.test_ne_scalar_npm  r  r   c                     t          | j        j        t          j        t          j        f          }|j        }|                      |t          t                               d S r   )r   r  rt   r   ellipsisr   
assertTrueEllipsis)r   cresr   s      r   test_is_ellipsiszTestOperators.test_is_ellipsis  sK     2U^U^4TUU h1122222r   c                 .    t          t          j        t          j        fd          | j        j                  t          d          fd            }|                      |dd                     |                      |dd                     d S )NTnopythonc                      | |          S r   r   )r   r   
cfunc_voids     r   r   z-TestOperators.test_is_void_ptr.<locals>.cfunc  s    :a###r         )r   r   voidptrr  rt   r7  assertFalse)r   r   r?  s     @r   test_is_void_ptrzTestOperators.test_is_void_ptr  s    
S]EM*T
 
 

'
 

 
d				$ 	$ 	$ 	$ 
		$ 	a$$$q!%%%%%r   c                 |    g d}g d}t           j        t           j        fg}|                     |||||           d S )NFFTT)FTFTr   )r   booleanr   r   r   r   r   r   r   s         r   run_binop_boolszTestOperators.run_binop_bools  s[    ///
///
}em45
6:z:!& 	 	( 	( 	( 	( 	(r   c                 |   g d}g d}t           j        t           j        ft           j        t           j        fg}|                     |||||           ddg}ddg}t           j        t           j        ft           j        t           j        ft           j        t           j        fg}|                     |||||           d S )N)r   r@  rA  )r@     r   rA  rN  r@  r   int32int64r   byteuint32uint64rH  s         r   run_binop_intszTestOperators.run_binop_ints  s    "]]
#^^
{EK0{EK02
 	6:z:!& 	 	( 	( 	( V
V
z5:.|U\2|U\24
 	6:z:!& 	 	( 	( 	( 	( 	(r   c                     g d}g d}t           j        t           j        ft           j        t           j        fg}|                     |||||           d S )N)g        g?)g      g?g @r   r   float32float64r   rH  s         r   run_binop_floatszTestOperators.run_binop_floats*  sk    %%%
%%%
}em4}em46
 	VZZ#( 	 	* 	* 	* 	* 	*r   c                 4    |                      ||           d S r  )r[  )r   r   r   s      r   run_binop_floats_floordivz'TestOperators.run_binop_floats_floordiv4  s!    fE22222r   c                     g d}g d}t           j        t           j        ft           j        t           j        fg}|                     |||||           d S )N)y333333?y                y        ?)y      ffffffy        ?y @       r   )r   	complex64
complex128r   rH  s         r   run_binop_complexzTestOperators.run_binop_complex7  sm    444
444
8')9:<
 	VZZ#( 	 	* 	* 	* 	* 	*r   Fc                    |D ]}|                                 D ]k\  }}dD ]c}d|d|}|r|dz  }|rt          nt          }	d|z  }
||
|	fd|rd|v r|sfd}n}||_        |r t	          d	          |          }|| |<   dld S )
NFTtest___npmz
%s_usecasec                 h    t          | |          }t          | j        |          } |||           d S r   )getattrr  )r   runner_nameusecase_namer   runner
op_usecases         r   innerz1TestOperators.generate_binop_tests.<locals>.innerK  s:    !({!;!;%,TWl%C%C
z511111r   arrayc                 v    |                                  5                d d d            d S # 1 swxY w Y   d S r   )assertTypingError)r   rm  s    r   	test_methz5TestOperators.generate_binop_tests.<locals>.test_methR  s    !%!7!7!9!9 ( ( %( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   .22	important)itemsr  force_pyobj_flagsru   r   )nsusecases
tp_runners	npm_arrayusecasetp_nameri  r=  	test_namer   rj  rq  rm  s               @r   generate_binop_testsz"TestOperators.generate_binop_testsA  s    	. 	.G(2(8(8(:(: . .$ - . .HH07 AI ,!V+	'/FGG5FE#/'#9L0;+7u2 2 2 2   *Gw$6$6y$6( ( ( ( ( ( %*	)2I& @$4C$4$4Y$?$?	$-ByMM3..	. 	.r   )r}   r   r   r   r   r   rU  r[  ra  )intsfloatscomplex)r   r   )r   r   r   r   r]  )r}  r~  c                    t          | j        |          }t          j        t          j        t          j        g}|r|                    t          j                   |D ]}t          |||f|          }|j	        }	| 
                    t                    5 }
 |	dd           d d d            n# 1 swxY w Y   |t          ur(|                     |t          |
j                             d S )Nr   r@  r   )rh  r  r   rP  rS  rZ  appendr`  r   r   assertRaisesZeroDivisionErrorrt  assertInstr	exception)r   rj  r   r   allow_complexr   r   tpr   r   cms              r   check_div_errorszTestOperators.check_div_errorsu  s!   ,// [%,>	 	/U-... 	6 	6B!&2r(%@@@BNE""#455 a               ---c3r|#4#4555	6 	6s   B,,B0	3B0	c                 8    |                      dd|d           d S )Nr4   division by zeroT)r   r  r  r  s     r   test_truediv_errorsz!TestOperators.test_truediv_errors  s4    /1C5,0 	 	2 	2 	2 	2 	2r   c                 <    |                      t                     d S r  )r  r  r  s    r   test_truediv_errors_npmz%TestOperators.test_truediv_errors_npm  s      w /////r   c                 6    |                      dd|           d S )Nr.   r  r   r  r  s     r   test_floordiv_errorsz"TestOperators.test_floordiv_errors  s%    02DERRRRRr   c                 <    |                      t                     d S r  )r  r  r  s    r   test_floordiv_errors_npmz&TestOperators.test_floordiv_errors_npm      !!!00000r   c                 6    |                      dd|           d S )Nr8   zmodulo by zeror   r  r  s     r   test_mod_errorszTestOperators.test_mod_errors  s$    m-=UKKKKKr   c                 <    |                      t                     d S r  )r  r  r  s    r   test_mod_errors_npmz!TestOperators.test_mod_errors_npm  s    7+++++r   c                 |   g d}g d}t           j        t           j        ft           j        t           j        fg}|                     |||||           g d}g d}t           j        t           j        ft           j        t           j        ft           j        t           j        fg}|                     |||||           d S )NrM  r   r@  rA  r   r@  rA  r   rO  rH  s         r   run_pow_intszTestOperators.run_pow_ints  s    &&&
YY
{EK0{EK02
 	6:z:!& 	 	( 	( 	( YY
YY
z5:.|U\2|U\24
 	6:z:!& 	 	( 	( 	( 	( 	(r   c                 L   g d}g d}t           j        t           j        ft           j        t           j        fg}|                     |||||           dg}g d}t           j        t           j        ft           j        t           j        fg}|                     |||||           d S )N)gvkgv[gv[@gvk@r  r   rW  r  rX  rH  s         r   run_pow_floatszTestOperators.run_pow_floats  s    ;;;
&&&
}em4}em46
 	VZZ#( 	 	* 	* 	* U
YY
}em4}em46
 	VZZ#( 	 	* 	* 	* 	* 	*r   )r   r   r  r  c                     | j         j        }g d}|}t          j        t          j        ft          j        t          j        fg}|                     |||||           d S )Ny      ?        y              ?y            r   )r  r    r   r_  r`  r   r   r   r   r   r   r   s         r   test_add_complexzTestOperators.test_add_complex  sq    $&&&

8')9:=
 	VZZ#( 	 	* 	* 	* 	* 	*r   c                 <    |                      t                     d S r  )r  r  r  s    r   test_add_complex_npmz"TestOperators.test_add_complex_npm      G,,,,,r   c                     | j         j        }g d}g d}t          j        t          j        ft          j        t          j        fg}|                     |||||           d S Nr  )r@  rA  rN  r   )r  r&   r   r_  r`  r   r  s         r   test_sub_complexzTestOperators.test_sub_complex  u    $&&&
YY
8')9:=
 	VZZ#( 	 	* 	* 	* 	* 	*r   c                 <    |                      t                     d S r  )r  r  r  s    r   test_sub_complex_npmz"TestOperators.test_sub_complex_npm  r  r   c                     | j         j        }g d}g d}t          j        t          j        ft          j        t          j        fg}|                     |||||           d S r  )r  r*   r   r_  r`  r   r  s         r   test_mul_complexzTestOperators.test_mul_complex  r  r   c                 <    |                      t                     d S r  )r  r  r  s    r   test_mul_complex_npmz"TestOperators.test_mul_complex_npm  r  r   c                     | j         j        }g d}g d}t          j        t          j        ft          j        t          j        fg}|                     |||||           d S r  )r  r4   r   r_  r`  r   r  s         r   test_truediv_complexz"TestOperators.test_truediv_complex  su    (&&&
YY
8')9:=
 	VZZ#( 	 	* 	* 	* 	* 	*r   c                 <    |                      t                     d S r  )r  r  r  s    r   test_truediv_complex_npmz&TestOperators.test_truediv_complex_npm   r  r   c                     | j         j        }|                                 5  t          |t          j        t          j        f          }d d d            d S # 1 swxY w Y   d S r   )r  r8   rp  r   r   r_  )r   r   r   r9  s       r   test_mod_complexzTestOperators.test_mod_complex  s    $##%% 	P 	P#FU_eo,NOOD	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   'AAAc                 <    |                      t                     d S r  )r  r  r  s    r   test_mod_complex_npmz"TestOperators.test_mod_complex_npm  r  r   c                 X   t          |dt                    }|j        }t          d          }t          d          } |||          }|                     |j        d           |r|                     ||           d S |                     ||           |                     ||           d S )Nr   r   rN        )r   rt  r   r   r  valuer  assertIsNot)r   r   inplacer9  r   abr   s           r   check_matmul_objmodez"TestOperators.check_matmul_objmode  s    2CDDD qMMqMMeAqkkB''' 	%MM#q!!!!!S!$$$S!$$$$$r   c                 H    |                      | j        j        d           d S )NFr  )r  r  r   r  s    r   test_matmulzTestOperators.test_matmul  s&    !!$'"8%!HHHHHr   c                 H    |                      | j        j        d           d S )NTr  )r  r  r   r  s    r   test_imatmulzTestOperators.test_imatmul!  s&    !!$'"94!HHHHHr   c                    t          j        t           j        dd          }t          |||ft                    }|j        }t          j        ddg          }t          j        ddg          } |||          }|                     |t          j        ||                     | 	                    ||           | 	                    ||           d S )Nr@  Cr   rA  rN  r  )
r   ArrayrY  r   r  r   r   r   dotr  )r   r   arrtyr9  r   r  r  r   s           r   check_matmul_npmzTestOperators.check_matmul_npm$  s    EM1c22gFFF J1vJ1veAqkkRVAq\\222a   a     r   c                 D    |                      | j        j                   d S r   )r  r  r   r  s    r   test_matmul_npmzTestOperators.test_matmul_npm1  s!    dg455555r   c                     |                                  5 }|                     | j        j                   d d d            d S # 1 swxY w Y   d S r   )rp  r  r  r   )r   raisess     r   test_imatmul_npmzTestOperators.test_imatmul_npm4  s    ##%% 	;!!$'"9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s    AA	Ac                    ddg}g d}t           j        t           j        fg}|                     |||||           ddg}g d}t           j        t           j        fg}|                     |||||           ddg}g d}t           j        t           j        fg}|                     |||||           ddg}g d}t           j        t           j        fg}|                     |||||           d S )Nr   r@  r   r@  rA  r           r   r   r@  rA  r  r  r      ?   rM  r   rS  r   rT  rP  rQ  rH  s         r   run_bitshift_leftzTestOperators.run_bitshift_left<  sF   V
,,,
|U\23
6:z:!& 	 	( 	( 	( V
000
|U\23
6:z:!& 	 	( 	( 	( W
,,,
{EK01
6:z:!& 	 	( 	( 	( W
000
{EK01
6:z:!& 	 	( 	( 	( 	( 	(r   )bitshift_leftbitshift_ileftr}  r  c                    g d}g d}t           j        t           j        fg}|                     |||||           g d}g d}t           j        t           j        fg}|                     |||||           g d}g d}t           j        t           j        fg}|                     |||||           g d}g d}t           j        t           j        fg}|                     |||||           d S )N)r   r@      r  r   )r   r@      r  )r   r@     )r   rM  r  r  rH  s         r   run_bitshift_rightz TestOperators.run_bitshift_rightb  sN   &&&
,,,
|U\23
6:z:!& 	 	( 	( 	( '&&
000
|U\23
6:z:!& 	 	( 	( 	( &%%
,,,
{EK01
6:z:!& 	 	( 	( 	( '&&
000
{EK01
6:z:!& 	 	( 	( 	( 	( 	(r   )bitshift_rightbitshift_irightr  c                    t          t          dd                    dgz   }t          t          dd                    dgz   }t          j        t          j        fg}|                     |||||           t          t          dd                    dgz   }t          t          dd                    dgz   }t          j        t          j        fg}|                     |||||           t          t          dd                    dd	gz   }t          t          dd                    dd	gz   }t          j        t          j        fg}|                     |||||           t          t          dd                    d
dgz   }t          t          dd                    d
dgz   }t          j        t          j        fg}|                     |||||           d S )Nr   r  r  r   r  r  r               )listranger   rS  r   rT  rP  rQ  rH  s         r   run_logicalzTestOperators.run_logical  s   %1++&&)4
%1++&&)4
|U\23
6:z:!& 	 	( 	( 	( %1++&&)4
%1++&&)4
|U\23
6:z:!& 	 	( 	( 	( %A,,''8Y*??
%A,,''8Y*??
{EK01
6:z:!& 	 	( 	( 	( %A,,''8Y*??
%A,,''8Y*??
{EK01
6:z:!& 	 	( 	( 	( 	( 	(r   )bitwise_andbitwise_iand
bitwise_orbitwise_iorbitwise_xorbitwise_ixorr  rI  )r}  boolsc                    | j         j        }t          t          dd                    dgz   }d |D             }dg}t          j        t          j        fg}|                     |||||           t          t          dd                    dd	gz   }dg}t          j        t          j        fg}|                     |||||           t          t          dd                    d
gz   }d |D             }dg}t          j        t          j        fg}|                     |||||           t          t          dd                    ddgz   }dg}t          j	        t          j	        fg}|                     |||||           g d}t          t          t          j        |                    }| j         j        }t          |t          j        f|          }|j        }|D ]*}	|                      ||	           ||	                     +d S )Nr   r  r  c                 6    g | ]}t          j        |          S r   )r   rS  .0r   s     r   
<listcomp>z2TestOperators.test_bitwise_not.<locals>.<listcomp>       777qbill777r   r   r  r  r  r  r  c                 6    g | ]}t          j        |          S r   )r   rT  r  s     r   r  z2TestOperators.test_bitwise_not.<locals>.<listcomp>  r  r   r  r  rF  )r  rU   r  r  r   rS  r   rP  rT  rQ  mapr   bool_rY   r   rG  r   r   )
r   r   r   r   r   r   valuesr9  r   vals
             r   test_bitwise_notzTestOperators.test_bitwise_not  sA   3%1++&&)4
77J777
S
|U\23
6:z:!& 	 	( 	( 	( %A,,''8Y*??
S
{EK01
6:z:!& 	 	( 	( 	( %1++&&)4
77J777
S
|U\23
6:z:!& 	 	( 	( 	( %A,,''8Y*??
S
{EK01
6:z:!& 	 	( 	( 	(
 ,++c"(F++,,,(8FFF  	= 	=C##FF3KKs<<<<	= 	=r   c                 <    |                      t                     d S r  )r   r  r  s    r   test_bitwise_not_npmz"TestOperators.test_bitwise_not_npm  r  r   c                       fd}g d}|D ]F}t           j        |          } ||t          j        t          j        f j        |                    GdS )zI
        Make sure that bitwise float operations are not allowed
        c                    d                     |           }                    t          j        |          5 }t	          | |           d d d            n# 1 swxY w Y   t
          dz   }|                     t          |t                    r|nd                     |                    }                    |t          |j	                             d S )Nz'expecting TypingError when compiling {}r   z {}zFunction({}))
formatr  r   TypingErrorr   r
   
isinstancer  r  r  )r   argtypesopnamer   r  fmt	expectingr   s          r   assert_reject_compilez?TestOperators.test_bitwise_float.<locals>.assert_reject_compile  s   ;BB6JJC""6#53"?? 36 2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 &C

&0&=&=$F66(6(=(=f(E(EG GI MM)S)9%:%:;;;;;s   AAAr   )r	  N)rh  r  r   rY  _bitwise_opnames)r   r  methodsnamer   s   `    r   test_bitwise_floatz TestOperators.test_bitwise_float  s    		< 		< 		< 		< 		<
 
 
  	F 	FDTWd++F!!&5=%-*H)-)>t)DF F F F F	F 	Fr   c                     | j         j        }g d}t          |dt                    }|j        }|D ]*}|                      ||           ||                     +d S )Nr@  rA  rN  333333?        333333@r   r   )r  r[   r   rt  r   r  r   r   r  r9  r   r  s         r   test_notzTestOperators.test_not
  s~    $
 
 
  2CDDD  	6 	6CVVC[[%%**5555	6 	6r   c                    | j         j        }t          j        t          j        t          j        t          j        t          j        g}g d}t          ||          D ]o\  }}t          ||g          }| 
                    |j        j        t          j                   |j        }| 
                     ||           ||                     pd S )Nr  )r  r[   r   int8rP  rQ  rY  r`  zipr   r  	signaturereturn_typerG  r   r   r   argtysr  tyr  r9  r   s           r   test_not_npmzTestOperators.test_not_npm  s    $ JKKM

 
 
 66** 	6 	6GB#FRD11DT^7GGG$EVVC[[%%**5555		6 	6r   c                    | j         j        }t          j        t          j        t          j        t          j        t          j        t          j        t          j	        t          j	        g}g d}t          ||          D ]E\  }}t          ||g          }|j        }|                      ||           ||                     Fd S N)r@  rA  rN  r  g333333@r  TF)r  r]   r   r  rP  rQ  rY  rZ  r`  rG  r  r   r   assertAlmostEqualr  s           r   test_negate_npmzTestOperators.test_negate_npm3  s    ' JKKMMMM	
	
 	
 	
 66** 	< 	<GB#FRD11D$E""66#;;c

;;;;	< 	<r   c                     | j         j        }g d}t          |dt                    }|j        }|D ]*}|                      ||           ||                     +d S N)r@  rA  rN  r  r  TFr   r   )r  r]   r   rt  r   r  r  s         r   test_negatezTestOperators.test_negateP  s~    '
 
 
  2CDDD  	6 	6CVVC[[%%**5555	6 	6r   c                    | j         j        }t          j        t          j        t          j        t          j        t          j        t          j        t          j	        t          j	        g}g d}t          ||          D ]E\  }}t          ||g          }|j        }|                      ||           ||                     Fd S r!  )r  r_   r   r  rP  rQ  rY  rZ  r`  rG  r  r   r   r"  r  s           r   test_unary_positive_npmz%TestOperators.test_unary_positive_npm`  s    / JKKMMMM	
	
 	
 	
 66** 	< 	<GB#FRD11D$E""66#;;c

;;;;	< 	<r   c                     | j         j        }g d}t          |dt                    }|j        }|D ]*}|                      ||           ||                     +d S r%  )r  r_   r   rt  r   r  r  s         r   test_unary_positivez!TestOperators.test_unary_positive|  s~    /
 
 
  2CDDD  	6 	6CVVC[[%%**5555	6 	6r   c                     t           j        }t          ||t          j        |d          f|          }|j        }dD ].}d}|                      |||           |||                     /d S )NrN  r   )rN  r        *   )rN  r.  r,  )r   rQ  r   UniTupler   r   )r   r   r   r   r9  r   itups           r   	_check_inzTestOperators._check_in  s    ua0H0H(I&+- - - ! 	C 	CAC##FF1cNNEE!SMMBBBB	C 	Cr   c                 F    |                      | j        j        |           d S r   )r2  r  ro   r  s     r   test_inzTestOperators.test_in  s!    tw)511111r   c                 <    |                      t                     d S r  )r4  r  r  s    r   test_in_npmzTestOperators.test_in_npm  s    7#####r   c                 F    |                      | j        j        |           d S r   )r2  r  rr   r  s     r   test_not_inzTestOperators.test_not_in  s!    tw-u55555r   c                 <    |                      t                     d S r  )r8  r  r  s    r   test_not_in_npmzTestOperators.test_not_in_npm  s    w'''''r   N)F)dru   rv   rw   __doc__r   r  r|   r   r   r   r   r   r   r   r   r   r   r   r  rt  r   r   r  r  r
  r   rP  rQ  rS  rT  rY  rZ  r  r_  r`  r  r  r  r   r"  r$  r&  r(  r*  r-  r0  r2  r4  r:  rD  rI  rU  r[  r]  ra  r|  localsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r   r  r  r  r  r#  r&  r(  r*  r2  r4  r6  r8  r:  r   r   r   r   r   l  sz         
B "*"*"2"*/#+#3'} (&l'|'| (&.o  .@ @ @ @, 0I I I I
 
 
 5F(,0 0 0 02 KJJ[%+\5<]EM3M  %0@A#4 @ @ @ @+ + + $5 @ @ @ @+ + + $5 @ @ @ @+ + + $5 @ @ @ @+ + + $5 O O O O+ + + $5 O O O O+ + +3 3 3
& & &$ -> ( ( ( ( ,= ( ( ( (( .? * * * * 7H 3 3 3 3 /@ * * * *. . . .> F"2$6%8    0"2$6%8    A"2$?    9J',6 6 6 6" ): 2 2 2 20 0 0 *; S S S S1 1 1 %6 L L L L, , , *; ( ( ( (( ,= * * * *( ("0$4    &7 
* 
* 
* 
*- - - &7 
* 
* 
* 
*- - - &7 
* 
* 
* 
*- - - *; 
* 
* 
* 
*1 1 1 &7 P P P P
- - -% % %I I II I I 
! 
! Z
!6 6 6; ; ; /@ ( ( ( (B < "5   
 0A ( ( ( (B > "6   
 ): ( ( ( (B 9 #0#4 	   &7 .= .= .= .=`- - - F  F  FD6 6 6 6 6 62< < <:6 6 6 < < <86 6 6 C C C . 2 2 2 2$ $ $ !2 6 6 6 6( ( ( ( (r   r   c                       e Zd ZeZej        ej        ej        ej	        ej
        ej        ej        ej        ej        ej        ej        dZdS )TestOperatorModuler   N)ru   rv   rw   rz   r  r|   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r>  r>    s]        	B "*"*"2"*/#+#3'} (&l'|'| (&.o r   r>  c                      e Zd ZdZeZg dZej        ej	        ej
        ej        gZd eD             Zd eD             Z e ej        ee                    Zd eD             Zd eD             Zd Zd Zd	 Zd
 Zd Zed fdZefdZed fdZd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d  Z-d!S )"TestMixedIntsz<
    Tests for operator calls with mixed integer types.
    )r   r@  rN  
   r.     i'  rM  rL  iiiic                      g | ]}|j         	|S r   signedr  r  s     r   r  zTestMixedInts.<listcomp>  s    8882bi8B888r   c                      g | ]}|j         	|S r   rD  rF  s     r   r  zTestMixedInts.<listcomp>  s    >>>RBI>b>>>r   c                 8    g | ]\  }}|j         s|j         ||fS r   rD  r  uvs      r   r  zTestMixedInts.<listcomp>  s@     - - -tq!x-#$8-QF - - -r   c                 8    g | ]\  }}|j         |j         ||fS r   rD  rI  s      r   r  zTestMixedInts.<listcomp>  s@     5 5 5Ah5*+(5q!f 5 5 5r   c                     t          d |D                       }t          |t          j        j                  }t	          t
          d|z            S )Nc              3   4   K   | ]}|j         j        d z  V  dS r  Nr   itemsizer  rK  s     r   	<genexpr>z8TestMixedInts.get_numpy_signed_upcast.<locals>.<genexpr>  ,      ::qw'!+::::::r   zint%dmaxr   intpbitwidthrh  r   r   valsrX  s      r   get_numpy_signed_upcastz%TestMixedInts.get_numpy_signed_upcast  sG    ::T:::::x!455r7X-...r   c                     t          d |D                       }t          |t          j        j                  }t	          t
          d|z            S )Nc              3   4   K   | ]}|j         j        d z  V  dS rO  rP  rR  s     r   rS  z:TestMixedInts.get_numpy_unsigned_upcast.<locals>.<genexpr>  rT  r   zuint%drU  rY  s      r   get_numpy_unsigned_upcastz'TestMixedInts.get_numpy_unsigned_upcast  sG    ::T:::::x!455r8h.///r   c                 H     t          t          |j                  |          S r   )rh  r   r  )r   r  r  s      r   get_typed_intzTestMixedInts.get_typed_int  s    $wr38$$S)))r   c                 @     t          t          |           fd}|S )Nc                 l                         | |          }  ||            ||                    S r   r[  r  r  r  r  r   s      r   control_signedz8TestMixedInts.get_control_signed.<locals>.control_signed  s:    --a33B2bbeeRRUU###r   rh  r|   )r   r	  re  r  s   `  @r   get_control_signedz TestMixedInts.get_control_signed  s9    Xv&&	$ 	$ 	$ 	$ 	$ 	$ r   c                 @     t          t          |           fd}|S )Nc                 l                         | |          }  ||            ||                    S r   r^  rd  s      r   control_unsignedz<TestMixedInts.get_control_unsigned.<locals>.control_unsigned  s:    //155B2bbeeRRUU###r   rf  )r   r	  rk  r  s   `  @r   get_control_unsignedz"TestMixedInts.get_control_unsigned  s9    Xv&&	$ 	$ 	$ 	$ 	$ 	$  r   c                     | S r   r   rX   s    r   <lambda>zTestMixedInts.<lambda>  s    1 r   c           	         |D ]\  }}	t          |||	ft                    }
|
j        }t          j        ||          D ]\  }}|                     ||          }|                     |	|          } |||          } |||          }|                     ||           d|d|d||	f} ||           ||          }} | j        ||fd|i| d S )Nr   r   r   r   r   )r   r  r   r   r   r`  assertIsInstancer   )r   r   control_funcoperandsr   expected_type
force_typeassertPreciseEqualArgsxtytr   r   r   r   r   r   r   s                    r   
run_binaryzTestMixedInts.run_binary  sA     	B 	BFB!&2r('BBBBNE!)(H== B B1&&r1--&&r1--'<1--eAqkk%%c=9999!!QQQR* *
3H1E1EX''X B B3 B*@B B B BB	B 	Br   c                 $   |D ]}t          ||ft                    }|j        }|D ]h}	|                     ||	          }	 ||	          }
 ||	          }|                     ||           |                     ||
d|	d|d|d|
           id S )Nr   zmismatch for z with type r   r   r   )r   r  r   r`  rp  r   )r   r   rq  rr  r   rs  rv  r   r   r   r   r   s               r   	run_unaryzTestMixedInts.run_unary  s     	2 	2B!&2%w???BNE 2 2&&r1--'<??eAhh%%c=999''11bbb###xx1 ( 2 2 2 22	2 	2r   c                     | S r   r   rX   s    r   rn  zTestMixedInts.<lambda>  s     r   c                      | j         ||                     |          || j        |fd|i|  | j         ||                     |          || j        |fd|i| d S )Nrt  )rx  rg  signed_pairsrl  unsigned_pairs)r   r   r	  samplesrs  rt  ru  s          r   run_arith_binopzTestMixedInts.run_arith_binop  s     	 7 7 ? ?!2M	2 	2#-	2 1	2 	2 	2 	 9 9& A A!4m	2 	2#-	2 1	2 	2 	2 	2 	2r   c                 R    |                      | j        j        d| j                   d S )Nr}   )r  r  r    int_samplesr  s    r   test_addzTestMixedInts.test_add  (    TW0%9IJJJJJr   c                 R    |                      | j        j        d| j                   d S )Nr   )r  r  r&   r  r  s    r   test_subzTestMixedInts.test_sub  r  r   c                 R    |                      | j        j        d| j                   d S )Nr   )r  r  r*   r  r  s    r   test_mulzTestMixedInts.test_mul  r  r   c                 j    d | j         D             }|                     | j        j        d|           d S )Nc                     g | ]
}|d k    |S r   r   r  s     r   r  z/TestMixedInts.test_floordiv.<locals>.<listcomp>      999!q&&1&&&r   r   )r  r  r  r.   r   r  s     r   test_floordivzTestMixedInts.test_floordiv  s;    99d.999TW5z7KKKKKr   c                 j    d | j         D             }|                     | j        j        d|           d S )Nc                     g | ]
}|d k    |S r  r   r  s     r   r  z*TestMixedInts.test_mod.<locals>.<listcomp>  r  r   r   )r  r  r  r8   r  s     r   test_modzTestMixedInts.test_mod  s;    99d.999TW0%AAAAAr   c                 
    i }t           j        dk    r
t          |d<    j        j        }d  j        D             }  j        |d|fi |  fd}d  j        D             }d  j        D             }  j        ||||fi | d S )N)rN     rt  c                     g | ]
}|d k    |S r  r   r  s     r   r  z*TestMixedInts.test_pow.<locals>.<listcomp>(  r  r   r   c                                          | |          }|dk    r ||            ||          z  S  ||            ||           z  }|dk    rdS t          j        d|z            S )Nr   g      ?)r[  r   rW  )r  r  r  invr   s       r   re  z.TestMixedInts.test_pow.<locals>.control_signed,  sx    --a33BAvvr!uu1~%beerr1"vvo!881wsSy)))r   c                     g | ]
}|d k    |S r  r   r  s     r   r  z*TestMixedInts.test_pow.<locals>.<listcomp>6  r  r   c                 8    g | ]\  }}|j         |j         ||fS r   rD  rI  s      r   r  z*TestMixedInts.test_pow.<locals>.<listcomp>7  s@     2 2 241a82()2A 2 2 2r   )	r   	PYVERSIONr  r  r   r  r  
type_pairsrx  )r   
extra_castr   r  re  r}  s   `     r   test_powzTestMixedInts.test_pow!  s    
?g%%',J|$$ :9d.999VUGBBzBBB		* 		* 		* 		* 		* :9d.9992 24? 2 2 2	= 	=1;	= 	= 	= 	= 	=r   c                     d }d | j         D             }| j        j        }|                     |||| j        t
          d           |                     |||| j        t
          d           d S )Nc                 @    t          |           t          |          z  S r   )r  r  r  s     r   controlz+TestMixedInts.test_truediv.<locals>.control>  s    88eAhh&&r   c                     g | ]
}|d k    |S r  r   r  s     r   r  z.TestMixedInts.test_truediv.<locals>.<listcomp>@  r  r   double)rs  prec)r  r  r4   rx  r}  r  r~  r   r  r  r   s       r   test_truedivzTestMixedInts.test_truediv<  s    	' 	' 	'99d.999(
 	$2C&+( 	 	< 	< 	<$2E&+( 	 	< 	< 	< 	< 	<r   c                 R    |                      | j        j        d| j                   d S )Nr   )r  r  rG   r  r  s    r   test_andzTestMixedInts.test_andK  s(    TW8&$BRSSSSSr   c                 R    |                      | j        j        d| j                   d S )Nr   )r  r  rK   r  r  s    r   test_orzTestMixedInts.test_orN  s(    TW7@PQQQQQr   c                 R    |                      | j        j        d| j                   d S )Nr   )r  r  rO   r  r  s    r   test_xorzTestMixedInts.test_xorQ  s(    TW8%AQRRRRRr   c                    
 t          t          |          

 fd}
 fd} j         fd}d  j        D             }d  j        D             }|D ]\  }}	 |||	|           |D ]\  }}	 |||	|           d S )Nc                 l                         | |          }  ||            ||                    S r   rc  r  r  r  opfuncr   s      r   re  z5TestMixedInts.run_shift_binop.<locals>.control_signedV  s:    --a33B6""Q%%A'''r   c                 l                         | |          }  ||            ||                    S r   rj  r  s      r   rk  z7TestMixedInts.run_shift_binop.<locals>.control_unsignedY  s:    //155B6""Q%%A'''r   c           	      T   t          | |ft                    }|j        }D ]}| j        dz
  }dddd|dz
  |fD ]k}                    | |          }                    ||          } |||          } |||          }	d|d|d| |f}
                    |	||
	           ld S )
Nr   r@  r   rN  r,  r   r   r   r   )r   r  r   rX  r`  r   )rv  rw  rq  r   r   r   maxshiftr   r   r   r   r   r  r   s              r   checkz,TestMixedInts.run_shift_binop.<locals>.check_  s    !&2r('BBBBNE D D ;?Q1hlH= D DA**2q11A**2q11A+|Aq11H%1++CCaaRHH.C++Cs+CCCCD	D Dr   c                 *    g | ]\  }}|j         ||fS r   rD  rI  s      r   r  z1TestMixedInts.run_shift_binop.<locals>.<listcomp>r  s6     % % %41a8%A % % %r   c                 *    g | ]\  }}|j         ||fS r   rD  rI  s      r   r  z1TestMixedInts.run_shift_binop.<locals>.<listcomp>t  s6     + + +TQ!"+1a& + + +r   )rh  r|   r  r  )r   r   r	  re  rk  r  r}  r~  rv  rw  r  r  s   ``        @@r   run_shift_binopzTestMixedInts.run_shift_binopT  s$   6**	( 	( 	( 	( 	( 	(	( 	( 	( 	( 	( 	( "	D 	D 	D 	D 	D 	D 	D&% %4? % % %+ +T_ + + + # 	* 	*FBE"b.))))$ 	, 	,FBE"b*++++	, 	,r   c                 F    |                      | j        j        d           d S )Nr   )r  r  r?   r  s    r   test_lshiftzTestMixedInts.test_lshift|  s#    TW:HEEEEEr   c                 F    |                      | j        j        d           d S )Nr   )r  r  rC   r  s    r   test_rshiftzTestMixedInts.test_rshift  s#    TW;XFFFFFr   c                 l    d }| j         }| j        j        }|                     |||| j                   d S )Nc                     | S r   r   )r  s    r   r  z2TestMixedInts.test_unary_positive.<locals>.control  s    Hr   )r  r  r_   rz  	int_typesr  s       r   r*  z!TestMixedInts.test_unary_positive  sC    	 	 	"/vw@@@@@r   c                       fd} fd} j         } j        j        }                     ||| j                                        ||| j                   d S )Nc                 F                         |           } ||            S r   rc  r  r  r   s     r   re  z9TestMixedInts.test_unary_negative.<locals>.control_signed  %    --a00B2qb66Mr   c                 F                         |           } ||            S r   rj  r  s     r   rk  z;TestMixedInts.test_unary_negative.<locals>.control_unsigned  %    //22B2qb66Mr   )r  r  r]   rz  signed_typesunsigned_typesr   re  rk  r  r   s   `    r   test_unary_negativez!TestMixedInts.test_unary_negative  s    	 	 	 	 		 	 	 	 	 "'v~w8IJJJv/$:MNNNNNr   c                       fd} fd} j         } j        j        }                     ||| j                                        ||| j                   d S )Nc                 F                         |           } ||            S r   rc  r  s     r   re  z1TestMixedInts.test_invert.<locals>.control_signed  r  r   c                 F                         |           } ||            S r   rj  r  s     r   rk  z3TestMixedInts.test_invert.<locals>.control_unsigned  r  r   )r  r  rY   rz  r  r  r  s   `    r   test_invertzTestMixedInts.test_invert  s    	 	 	 	 		 	 	 	 	 ",v~w8IJJJv/$:MNNNNNr   N).ru   rv   rw   r;  r   r  r  r   r  uint8rQ  rT  r  r  r  r  r   r   r  r}  r~  r[  r^  r`  rg  rl  r   rx  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r  r  r   r   r   r@  r@    s         
BOOOKU[%+u|DI88888L>>9>>>N'i'	9==>>J- -z - - -L5 5 5 5 5N/ / /
0 0 0
* * *        "%B B B B( !$2 2 2 2  '*kk
2 
2 
2 
2K K KK K KK K KL L LB B B= = =6< < <T T TR R RS S S&, &, &,PF F FG G GA A AO O OO O O O Or   r@  c                       e Zd ZeZdS )TestMixedIntsOperatorModuleN)ru   rv   rw   rz   r  r   r   r   r  r    s        	BBBr   r  c                   $    e Zd ZdZd Zd Zd ZdS )TestStaticPowerz`
    Test the ** operator with a static exponent, to exercise a
    dedicated optimization.
    c           	         |D ]}t           j        }t          |          } t          d          |          } t          d          |          }|D ]}	  |||          }	 ||          }
|                     |	|
d           3# t
          $ r@ |                     t
                    5   ||           d d d            n# 1 swxY w Y   Y |w xY wd S )NTr<  r  )r  )r   r   r   r   r   r  r  )r   	exponentsr  r   regular_funcstatic_funcstatic_cfuncregular_cfuncrK  r   r   s              r   
_check_powzTestStaticPower._check_pow  sY    	J 	JC.:L+C00K-3---k::L.C...|<<M J JJ,}Q44H
 ',q//C++Hc+IIII ) ( ( (**+<== ( ($Q( ( ( ( ( ( ( ( ( ( ( ( ( ( ((J	J 	Js6   B$C+C	7CCC
CCCc           	          g d}dddddt          j        d          t          j        d          g}|                     ||           d S )	N)	r@  rA  rN  r,     r   rM  r  rL  r   r@  rN  rM  r  rL  r  )r   r  uint16r  r   r  rZ  s      r   test_int_valueszTestStaticPower.test_int_values  sK    333	1aRbill;	4(((((r   c                     g d}dddt          j        d          t          d          t          d          g}|                     ||           d S )N)r@  rA  rN  r,  r  r   rM  r  rL  i ir  g      
@g      g       infnan)r   rY  r  r  r  s      r   test_real_valuesz TestStaticPower.test_real_values  sO    HHH	T5"*T"2"2E%LL%,,O	4(((((r   N)ru   rv   rw   r;  r  r  r  r   r   r   r  r    sN         
J J J$) ) )) ) ) ) )r   r  c                       e Zd ZdZd Zd ZdS )TestStringConstComparisonz-
    Test comparison of string constants
    c                    d }d } t          d          |          } t          d          |          }|                      |             |                       |                      |             |                       d S )Nc                      d} | dk    S Ntestr   ss    r   
test_impl1z5TestStringConstComparison.test_eq.<locals>.test_impl1      A;r   c                      d} | dk    S Ntest1r  r   r  s    r   
test_impl2z5TestStringConstComparison.test_eq.<locals>.test_impl2      A;r   Tr<  r   r  r   r  r  cfunc1cfunc2s        r   test_eqz!TestStringConstComparison.test_eq      	 	 		 	 	 $d###J//#d###J//vvxx000vvxx00000r   c                    d }d } t          d          |          } t          d          |          }|                      |             |                       |                      |             |                       d S )Nc                      d} | dk    S r  r   r  s    r   r  z6TestStringConstComparison.test_neq.<locals>.test_impl1  r  r   c                      d} | dk    S r  r   r  s    r   r  z6TestStringConstComparison.test_neq.<locals>.test_impl2  r  r   Tr<  r  r  s        r   test_neqz"TestStringConstComparison.test_neq  r  r   N)ru   rv   rw   r;  r  r  r   r   r   r  r    s<         1 1 11 1 1 1 1r   r  c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestBooleanLiteralOperatorsz/
    Test operators with Boolean constants
    c                   	
 	fd}
fd}d }t          j        ddgd          D ]F\  	} t          d          |          }|                      ||           ||                     Gt          j        ddgd          D ]F\  }
 t          d          |          }|                      ||           ||                     G t          d          |          }|                      |             |                       d S )	Nc                     | k    S r   r   r  a_vals    r   r  z7TestBooleanLiteralOperators.test_eq.<locals>.test_impl1      A:r   c                     | k    S r   r   r  b_vals    r   r  z7TestBooleanLiteralOperators.test_eq.<locals>.test_impl2      :r   c                  >    ddk    } ddk    }ddk    }ddk    }| |||fS NTFr   r1r2r3r4s       r   
test_impl3z7TestBooleanLiteralOperators.test_eq.<locals>.test_impl3  5    BB$B%BB##r   TFrA  repeatr<  r   r   r   r  r   r  r  r  r  r  r  r  cfunc3r  r  s            @@r   r  z#TestBooleanLiteralOperators.test_eq  ]   	 	 	 	 		 	 	 	 		$ 	$ 	$ ")4-BBB 	7 	7HE1'S$'''
33FZZ]]FF1II6666!)4-BBB 	7 	7HAu'S$'''
33FZZ]]FF1II6666#d###J//vvxx00000r   c                   	
 	fd}
fd}d }t          j        ddgd          D ]F\  	} t          d          |          }|                      ||           ||                     Gt          j        ddgd          D ]F\  }
 t          d          |          }|                      ||           ||                     G t          d          |          }|                      |             |                       d S )	Nc                     | k    S r   r   r  s    r   r  z7TestBooleanLiteralOperators.test_ne.<locals>.test_impl1  r   r   c                     | k    S r   r   r  s    r   r  z7TestBooleanLiteralOperators.test_ne.<locals>.test_impl2  r  r   c                  >    ddk    } ddk    }ddk    }ddk    }| |||fS r  r   r  s       r   r  z7TestBooleanLiteralOperators.test_ne.<locals>.test_impl3  r  r   TFrA  r  r<  r  r  s            @@r   test_nez#TestBooleanLiteralOperators.test_ne  r  r   c                 T   fd}d }t          j        ddgd          D ]F\  } t          d          |          }|                      ||           ||                     G t          d          |          }|                      |             |                       d S )Nc                     | u S r   r   r  s    r   r  z7TestBooleanLiteralOperators.test_is.<locals>.test_impl1(  s    A:r   c                  .    ddu } ddu }ddu }ddu }| |||fS r  r   r  s       r   r  z7TestBooleanLiteralOperators.test_is.<locals>.test_impl2+  s5    BB$B%BB##r   TFrA  r  r<  r  )r   r  r  r  r  r  r  s         @r   test_isz#TestBooleanLiteralOperators.test_is&  s    	 	 	 	 		$ 	$ 	$ ")4-BBB 	7 	7HE1'S$'''
33FZZ]]FF1II6666#d###J//vvxx00000r   c                     d } t          d          |          }|                      |             |                       d S )Nc                      d\  } }|  | fS Nrc  r   r  s     r   	test_implz7TestBooleanLiteralOperators.test_not.<locals>.test_impl;  s    DAqEq5>!r   Tr<  r  r   r   r   s      r   r  z$TestBooleanLiteralOperators.test_not9  sU    	" 	" 	" #T"""9--eegg.....r   c                     d } t          d          |          }|                      |             |                       d S )Nc                  H    d\  } }t          |           t          |          fS r  )boolr  s     r   r   z8TestBooleanLiteralOperators.test_bool.<locals>.test_implD  s"    DAqGGT!WW%%r   Tr<  r  r!  s      r   	test_boolz%TestBooleanLiteralOperators.test_boolB  sU    	& 	& 	& #T"""9--eegg.....r   c                     d } t          d          |          }|                      |             |                       d S )Nc                  H    d\  } }t          |           t          |          fS r  )r  r  s     r   r   z?TestBooleanLiteralOperators.test_bool_to_str.<locals>.test_implM  s"    DAqFFCFF##r   Tr<  r  r!  s      r   test_bool_to_strz,TestBooleanLiteralOperators.test_bool_to_strK  sU    	$ 	$ 	$ #T"""9--eegg.....r   N)
ru   rv   rw   r;  r  r  r  r  r%  r(  r   r   r   r  r    sx         1 1 141 1 141 1 1&/ / // / // / / / /r   r  __main__),r   r   r|   syswarningsnumpyr   unittestnumba.core.compilerr   r   numbar   
numba.corer   r   r   r	   numba.core.types.functionsr
   numba.tests.supportr   r   r   numba.tests.matmul_usecaser   r   r   r  rt  force_pyobjectr   objectr   rz   r   r>  r@  r  r  r  r  ru   mainr   r   r   <module>r7     s         



       7 7 7 7 7 7 7 7       6 6 6 6 6 6 6 6 6 6 6 6 3 3 3 3 3 3 9 9 9 9 9 9 9 9 9 95 5 5 5 5 5 5 5 5 5 %''EGG #'     h h h h h& h h hV`" `" `" `" `"V `" `" `"Fs( s( s( s( s(H s( s( s(l       &mO mO mO mO mOH mO mO mO`         -      
") ") ") ") ")h ") ") ")H1 1 1 1 1 1 1 1@d/ d/ d/ d/ d/( d/ d/ d/N zHMOOOOO r   