U
    iâËdHÆ  ã                   @   s`  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	d
„ ZG dd„ de ƒZ!G dd„ de ƒZ"G dd„ deƒZ#G dd„ de#ƒZ$G dd„ deƒZ%G dd„ de%ƒZ&G dd„ deƒZ'G dd„ deƒZ(G dd„ deƒZ)e*dk�r\e +¡  dS )é    N)Úcompile_isolatedÚFlags)Újit)ÚtypesÚutilsÚerrorsÚ	typeinfer)Ú_header_lead)ÚTestCaseÚtagÚ
needs_blas)Úmatmul_usecaseÚimatmul_usecaseÚ
DumbMatrixTc                    s   ‡ fdd„}|S )Nc                    s   | ˆ  S ©N© ©Úx©Úexpr   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_operators.pyÚpow_usecase   s    z&make_static_power.<locals>.pow_usecaser   )r   r   r   r   r   Úmake_static_power   s    r   c                   @   sè  e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZer”eeƒZeeƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZed%d&„ ƒZed'd(„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZed1d2„ ƒZed3d4„ ƒZed5d6„ ƒZ ed7d8„ ƒZ!ed9d:„ ƒZ"ed;d<„ ƒZ#ed=d>„ ƒZ$ed?d@„ ƒZ%edAdB„ ƒZ&edCdD„ ƒZ'edEdF„ ƒZ(edGdH„ ƒZ)edIdJ„ ƒZ*edKdL„ ƒZ+dMS )NÚLiteralOperatorImplc                 C   s   | | S r   r   ©r   Úyr   r   r   Úadd_usecase    s    zLiteralOperatorImpl.add_usecasec                 C   s   | |7 } | S r   r   r   r   r   r   Úiadd_usecase$   s    z LiteralOperatorImpl.iadd_usecasec                 C   s   | | S r   r   r   r   r   r   Úsub_usecase)   s    zLiteralOperatorImpl.sub_usecasec                 C   s   | |8 } | S r   r   r   r   r   r   Úisub_usecase-   s    z LiteralOperatorImpl.isub_usecasec                 C   s   | | S r   r   r   r   r   r   Úmul_usecase2   s    zLiteralOperatorImpl.mul_usecasec                 C   s   | |9 } | S r   r   r   r   r   r   Úimul_usecase6   s    z LiteralOperatorImpl.imul_usecasec                 C   s   | | S r   r   r   r   r   r   Úfloordiv_usecase;   s    z$LiteralOperatorImpl.floordiv_usecasec                 C   s   | | } | S r   r   r   r   r   r   Úifloordiv_usecase?   s    z%LiteralOperatorImpl.ifloordiv_usecasec                 C   s   | | S r   r   r   r   r   r   Útruediv_usecaseD   s    z#LiteralOperatorImpl.truediv_usecasec                 C   s   | | } | S r   r   r   r   r   r   Úitruediv_usecaseH   s    z$LiteralOperatorImpl.itruediv_usecasec                 C   s   | | S r   r   r   r   r   r   Úmod_usecaseQ   s    zLiteralOperatorImpl.mod_usecasec                 C   s   | |; } | S r   r   r   r   r   r   Úimod_usecaseU   s    z LiteralOperatorImpl.imod_usecasec                 C   s   | | S r   r   r   r   r   r   r   Z   s    zLiteralOperatorImpl.pow_usecasec                 C   s   | |C } | S r   r   r   r   r   r   Úipow_usecase^   s    z LiteralOperatorImpl.ipow_usecasec                 C   s   | |> S r   r   r   r   r   r   Úbitshift_left_usecasec   s    z)LiteralOperatorImpl.bitshift_left_usecasec                 C   s   | |K } | S r   r   r   r   r   r   Úbitshift_ileft_usecaseg   s    z*LiteralOperatorImpl.bitshift_ileft_usecasec                 C   s   | |? S r   r   r   r   r   r   Úbitshift_right_usecasel   s    z*LiteralOperatorImpl.bitshift_right_usecasec                 C   s   | |L } | S r   r   r   r   r   r   Úbitshift_iright_usecasep   s    z+LiteralOperatorImpl.bitshift_iright_usecasec                 C   s   | |@ S r   r   r   r   r   r   Úbitwise_and_usecaseu   s    z'LiteralOperatorImpl.bitwise_and_usecasec                 C   s   | |M } | S r   r   r   r   r   r   Úbitwise_iand_usecasey   s    z(LiteralOperatorImpl.bitwise_iand_usecasec                 C   s   | |B S r   r   r   r   r   r   Úbitwise_or_usecase~   s    z&LiteralOperatorImpl.bitwise_or_usecasec                 C   s   | |O } | S r   r   r   r   r   r   Úbitwise_ior_usecase‚   s    z'LiteralOperatorImpl.bitwise_ior_usecasec                 C   s   | |A S r   r   r   r   r   r   Úbitwise_xor_usecase‡   s    z'LiteralOperatorImpl.bitwise_xor_usecasec                 C   s   | |N } | S r   r   r   r   r   r   Úbitwise_ixor_usecase‹   s    z(LiteralOperatorImpl.bitwise_ixor_usecasec                 C   s   |  S r   r   ©r   Z_unusedr   r   r   Úbitwise_not_usecase_binary�   s    z.LiteralOperatorImpl.bitwise_not_usecase_binaryc                 C   s   |  S r   r   r   r   r   r   Úbitwise_not_usecase”   s    z'LiteralOperatorImpl.bitwise_not_usecasec                 C   s   |  S r   r   r   r   r   r   Únot_usecase˜   s    zLiteralOperatorImpl.not_usecasec                 C   s   |  S r   r   r   r   r   r   Únegate_usecaseœ   s    z"LiteralOperatorImpl.negate_usecasec                 C   s   | 
 S r   r   r   r   r   r   Úunary_positive_usecase    s    z*LiteralOperatorImpl.unary_positive_usecasec                 C   s   | |k S r   r   r   r   r   r   Ú
lt_usecase¤   s    zLiteralOperatorImpl.lt_usecasec                 C   s   | |kS r   r   r   r   r   r   Ú
le_usecase¨   s    zLiteralOperatorImpl.le_usecasec                 C   s   | |kS r   r   r   r   r   r   Ú
gt_usecase¬   s    zLiteralOperatorImpl.gt_usecasec                 C   s   | |kS r   r   r   r   r   r   Ú
ge_usecase°   s    zLiteralOperatorImpl.ge_usecasec                 C   s   | |kS r   r   r   r   r   r   Ú
eq_usecase´   s    zLiteralOperatorImpl.eq_usecasec                 C   s   | |kS r   r   r   r   r   r   Ú
ne_usecase¸   s    zLiteralOperatorImpl.ne_usecasec                 C   s   | |kS r   r   r   r   r   r   Ú
in_usecase¼   s    zLiteralOperatorImpl.in_usecasec                 C   s   | |kS r   r   r   r   r   r   Únot_in_usecaseÀ   s    z"LiteralOperatorImpl.not_in_usecasec                 C   s   | |kS r   r   r   r   r   r   Ú
is_usecaseÄ   s    zLiteralOperatorImpl.is_usecaseN),Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r   r   r    r!   r"   r#   r$   r%   r   r   r&   r'   r   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   r   r   r   r   r      sž   




































r   c                   @   sì  e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZed%d&„ ƒZed'd(„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZed1d2„ ƒZed3d4„ ƒZed5d6„ ƒZed7d8„ ƒZed9d:„ ƒZ ed;d<„ ƒZ!ed=d>„ ƒZ"ed?d@„ ƒZ#edAdB„ ƒZ$edCdD„ ƒZ%edEdF„ ƒZ&edGdH„ ƒZ'edIdJ„ ƒZ(edKdL„ ƒZ)edMdN„ ƒZ*edOdP„ ƒZ+dQS )RÚFunctionalOperatorImplc                 C   s   t  | |¡S r   )ÚoperatorÚaddr   r   r   r   r   Ë   s    z"FunctionalOperatorImpl.add_usecasec                 C   s   t  | |¡S r   )rG   Úiaddr   r   r   r   r   Ï   s    z#FunctionalOperatorImpl.iadd_usecasec                 C   s   t  | |¡S r   )rG   Úsubr   r   r   r   r   Ó   s    z"FunctionalOperatorImpl.sub_usecasec                 C   s   t  | |¡S r   )rG   Úisubr   r   r   r   r   ×   s    z#FunctionalOperatorImpl.isub_usecasec                 C   s   t  | |¡S r   )rG   Úmulr   r   r   r   r    Û   s    z"FunctionalOperatorImpl.mul_usecasec                 C   s   t  | |¡S r   )rG   Úimulr   r   r   r   r!   ß   s    z#FunctionalOperatorImpl.imul_usecasec                 C   s   t  | |¡S r   )rG   Úfloordivr   r   r   r   r"   ã   s    z'FunctionalOperatorImpl.floordiv_usecasec                 C   s   t  | |¡S r   )rG   Ú	ifloordivr   r   r   r   r#   ç   s    z(FunctionalOperatorImpl.ifloordiv_usecasec                 C   s   t  | |¡S r   )rG   Útruedivr   r   r   r   r$   ë   s    z&FunctionalOperatorImpl.truediv_usecasec                 C   s   t  | |¡S r   )rG   Úitruedivr   r   r   r   r%   ï   s    z'FunctionalOperatorImpl.itruediv_usecasec                 C   s   t  | |¡S r   )rG   Úmodr   r   r   r   r&   ó   s    z"FunctionalOperatorImpl.mod_usecasec                 C   s   t  | |¡S r   )rG   Úimodr   r   r   r   r'   ÷   s    z#FunctionalOperatorImpl.imod_usecasec                 C   s   t  | |¡S r   )rG   Úpowr   r   r   r   r   û   s    z"FunctionalOperatorImpl.pow_usecasec                 C   s   t  | |¡S r   )rG   Úipowr   r   r   r   r(   ÿ   s    z#FunctionalOperatorImpl.ipow_usecasec                 C   s   t  | |¡S r   )rG   Úmatmulr   r   r   r   r     s    z%FunctionalOperatorImpl.matmul_usecasec                 C   s   t  | |¡S r   )rG   Úimatmulr   r   r   r   r     s    z&FunctionalOperatorImpl.imatmul_usecasec                 C   s   t  | |¡S r   )rG   Úlshiftr   r   r   r   r)     s    z,FunctionalOperatorImpl.bitshift_left_usecasec                 C   s   t  | |¡S r   )rG   Úilshiftr   r   r   r   r*     s    z-FunctionalOperatorImpl.bitshift_ileft_usecasec                 C   s   t  | |¡S r   )rG   Úrshiftr   r   r   r   r+     s    z-FunctionalOperatorImpl.bitshift_right_usecasec                 C   s   t  | |¡S r   )rG   Úirshiftr   r   r   r   r,     s    z.FunctionalOperatorImpl.bitshift_iright_usecasec                 C   s   t  | |¡S r   )rG   Úand_r   r   r   r   r-     s    z*FunctionalOperatorImpl.bitwise_and_usecasec                 C   s   t  | |¡S r   )rG   Úiandr   r   r   r   r.     s    z+FunctionalOperatorImpl.bitwise_iand_usecasec                 C   s   t  | |¡S r   )rG   Úor_r   r   r   r   r/   #  s    z)FunctionalOperatorImpl.bitwise_or_usecasec                 C   s   t  | |¡S r   )rG   Úiorr   r   r   r   r0   '  s    z*FunctionalOperatorImpl.bitwise_ior_usecasec                 C   s   t  | |¡S r   )rG   Úxorr   r   r   r   r1   +  s    z*FunctionalOperatorImpl.bitwise_xor_usecasec                 C   s   t  | |¡S r   )rG   Úixorr   r   r   r   r2   /  s    z+FunctionalOperatorImpl.bitwise_ixor_usecasec                 C   s
   t  | ¡S r   ©rG   Úinvertr3   r   r   r   r4   3  s    z1FunctionalOperatorImpl.bitwise_not_usecase_binaryc                 C   s
   t  | ¡S r   rb   r   r   r   r   r5   7  s    z*FunctionalOperatorImpl.bitwise_not_usecasec                 C   s
   t  | ¡S r   )rG   Únot_r   r   r   r   r6   ;  s    z"FunctionalOperatorImpl.not_usecasec                 C   s
   t  | ¡S r   )rG   Únegr   r   r   r   r7   ?  s    z%FunctionalOperatorImpl.negate_usecasec                 C   s
   t  | ¡S r   )rG   Úposr   r   r   r   r8   C  s    z-FunctionalOperatorImpl.unary_positive_usecasec                 C   s   t  | |¡S r   )rG   Últr   r   r   r   r9   G  s    z!FunctionalOperatorImpl.lt_usecasec                 C   s   t  | |¡S r   )rG   Úler   r   r   r   r:   K  s    z!FunctionalOperatorImpl.le_usecasec                 C   s   t  | |¡S r   )rG   Úgtr   r   r   r   r;   O  s    z!FunctionalOperatorImpl.gt_usecasec                 C   s   t  | |¡S r   )rG   Úger   r   r   r   r<   S  s    z!FunctionalOperatorImpl.ge_usecasec                 C   s   t  | |¡S r   )rG   Úeqr   r   r   r   r=   W  s    z!FunctionalOperatorImpl.eq_usecasec                 C   s   t  | |¡S r   )rG   Úner   r   r   r   r>   [  s    z!FunctionalOperatorImpl.ne_usecasec                 C   s   t  || ¡S r   ©rG   Úcontainsr   r   r   r   r?   _  s    z!FunctionalOperatorImpl.in_usecasec                 C   s   t  || ¡ S r   rm   r   r   r   r   r@   c  s    z%FunctionalOperatorImpl.not_in_usecasec                 C   s   t  | |¡S r   )rG   Úis_r   r   r   r   rA   g  s    z!FunctionalOperatorImpl.is_usecaseN),rB   rC   rD   rE   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r   r(   r   r   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   r   r   r   r   rF   É   s    






































rF   c                   @   sž  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d„Zefdd„Zdd„ Zed	fd
d„ZdddddgZejejejejejejgZ ej!ej"gZ#efdd„Z$dd„ Z%efdd„Z&dd„ Z'efdd„Z(dd„ Z)efdd„Z*dd „ Z+efd!d"„Z,d#d$„ Z-efd%d&„Z.d'd(„ Z/d)d*„ Z0d+d,„ Z1efd-d.„Z2efd/d0„Z3efd1d2„Z4efd3d4„Z5efd5d6„Z6d¤d8d9„Z7e7e8ƒ d:d;d<d=d>œƒ e7e8ƒ d?d;d<d=d>œƒ e7e8ƒ d@d;dAdBœƒ ed7fdCdD„Z9efdEdF„Z:dGdH„ Z;efdIdJ„Z<dKdL„ Z=efdMdN„Z>dOdP„ Z?efdQdR„Z@efdSdT„ZAe7e8ƒ dUdVdWdBœƒ efdXdY„ZBdZd[„ ZCefd\d]„ZDd^d_„ ZEefd`da„ZFdbdc„ ZGefddde„ZHdfdg„ ZIefdhdi„ZJdjdk„ ZKdldm„ ZLdndo„ ZMdpdq„ ZNeOdrds„ ƒZPdtdu„ ZQdvdw„ ZRefdxdy„ZSe7e8ƒ dzd{d|iƒ efd}d~„ZTe7e8ƒ dd{d€iƒ efd�d‚„ZUe7e8ƒ dƒd„d…d†œƒ efd‡dˆ„ZVd‰dŠ„ ZWd‹dŒ„ ZXd�dŽ„ ZYd�d�„ ZZd‘d’„ Z[d“d”„ Z\d•d–„ Z]d—d˜„ Z^d™dš„ Z_efd›dœ„Z`d�dž„ ZaefdŸd „Zbd¡d¢„ Zcd£S )¥ÚTestOperatorszw
    Test standard Python operators on scalars.

    NOTE: operators on array are generally tested in test_ufuncs.
    ©r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   c                 C   sœ   |D ]’}t |||d�}|j}t ||¡D ]l\}	}
t |	¡}t |	¡}|||
ƒ}|||
ƒ}| j||d|	|
|||f d� | j||d|	|
|||f d� q(qd S )N©Úflagsz-mismatch for (%r, %r) with types %s: %r != %r©Úmsg)r   Úentry_pointÚ	itertoolsÚproductÚcopyÚassertPreciseEqual©ÚselfÚpyfuncÚ
x_operandsÚ
y_operandsÚ
types_listrs   Ú	arg_typesÚcrÚcfuncr   r   Zx_gotZ
x_expectedÚgotÚexpectedr   r   r   Úrun_test_intsƒ  s,    



 ÿþ ÿþzTestOperators.run_test_intsc                 C   s„   |D ]z}t |||d�}|j}t ||¡D ]T\}	}
t |	¡}t |	¡}|||
ƒ}|||
ƒ}tjj||dd� tjj||dd� q(qd S )Nrr   gñhãˆµøä>)Zrtol)r   rv   rw   rx   ry   ÚnpÚtestingZassert_allcloser{   r   r   r   Úrun_test_floats˜  s    



zTestOperators.run_test_floatsc                 C   s\   t |dƒr| |¡S |tjkr,tt|jƒƒS |tjkr@t|jƒS |tjkrTt	|jƒS |S d S )NÚdtype)
ÚhasattrZcast_python_valuer   Zunsigned_domainÚabsÚintÚrealZinteger_domainZreal_domainÚfloat)r|   ÚopZ
numba_typer   r   r   Úcoerce_operand§  s    






zTestOperators.coerce_operandTc              
   C   s®   | j }| j}|s|| j }|D ]Š}t|||f|d�}|j}t ||¡D ]`\}	}
|  |	|¡}	|  |
|¡}
||	|
ƒ}||	|
ƒ}|  t	|ƒt	|ƒ¡ |  
||d||	|
f ¡ qFqd S )Nrr   zmismatch with %r (%r, %r))Úcompare_scalar_operandsÚcompare_typesÚcompare_unordered_typesr   rv   rw   rx   r‘   ÚassertIsÚtypeÚassertEqual)r|   r}   rs   ÚorderedZopsr€   Útypr‚   rƒ   r   r   r…   r„   r   r   r   Úrun_test_scalar_compare³  s$    


ÿÿz%TestOperators.run_test_scalar_compareg      à¿y      ð¿      ð?y      ð¿       @y      à¿      ð?ç      ø?c                 C   s   |   | jj|¡ d S r   )rš   r�   r9   ©r|   rs   r   r   r   Útest_lt_scalarÒ  s    zTestOperators.test_lt_scalarc                 C   s   | j td� d S ©Nrr   )r�   ÚNoflags©r|   r   r   r   Útest_lt_scalar_npmÕ  s    z TestOperators.test_lt_scalar_npmc                 C   s   |   | jj|¡ d S r   )rš   r�   r:   rœ   r   r   r   Útest_le_scalarØ  s    zTestOperators.test_le_scalarc                 C   s   | j td� d S rž   )r¢   rŸ   r    r   r   r   Útest_le_scalar_npmÛ  s    z TestOperators.test_le_scalar_npmc                 C   s   |   | jj|¡ d S r   )rš   r�   r;   rœ   r   r   r   Útest_gt_scalarÞ  s    zTestOperators.test_gt_scalarc                 C   s   | j td� d S rž   )r¤   rŸ   r    r   r   r   Útest_gt_scalar_npmá  s    z TestOperators.test_gt_scalar_npmc                 C   s   |   | jj|¡ d S r   )rš   r�   r<   rœ   r   r   r   Útest_ge_scalarä  s    zTestOperators.test_ge_scalarc                 C   s   | j td� d S rž   )r¦   rŸ   r    r   r   r   Útest_ge_scalar_npmç  s    z TestOperators.test_ge_scalar_npmc                 C   s   | j | jj|dd� d S ©NF)r˜   )rš   r�   r=   rœ   r   r   r   Útest_eq_scalarê  s    zTestOperators.test_eq_scalarc                 C   s   | j td� d S rž   )r©   rŸ   r    r   r   r   Útest_eq_scalar_npmí  s    z TestOperators.test_eq_scalar_npmc                 C   s   | j | jj|dd� d S r¨   )rš   r�   r>   rœ   r   r   r   Útest_ne_scalarð  s    zTestOperators.test_ne_scalarc                 C   s   | j td� d S rž   )r«   rŸ   r    r   r   r   Útest_ne_scalar_npmó  s    z TestOperators.test_ne_scalar_npmc                 C   s0   t | jjtjtjfƒ}|j}|  |ttƒ¡ d S r   )r   r�   rA   r   Úellipsisrv   Ú
assertTrueÚEllipsis)r|   Úcresrƒ   r   r   r   Útest_is_ellipsisö  s    zTestOperators.test_is_ellipsisc                    sV   t tjtjfdd�| jjƒ‰ t dd�‡ fdd„ƒ}|  |ddƒ¡ |  |ddƒ¡ d S )NT©Únopythonc                    s
   ˆ | |ƒS r   r   r   ©Z
cfunc_voidr   r   rƒ     s    z-TestOperators.test_is_void_ptr.<locals>.cfuncé   é   )r   r   Zvoidptrr�   rA   r®   ZassertFalse)r|   rƒ   r   r´   r   Útest_is_void_ptrû  s    
 ÿþzTestOperators.test_is_void_ptrc                 C   s>   ddddg}ddddg}t jt jfg}| j|||||d� d S )NFTrr   )r   Úbooleanr†   ©r|   r}   rs   r~   r   r€   r   r   r   Úrun_binop_bools  s    ÿzTestOperators.run_binop_boolsc                 C   sŽ   ddddg}ddddg}t jt jft jt jfg}| j|||||d� ddg}ddg}t jt jft jt jft jt jfg}| j|||||d� d S )	Néûÿÿÿr   rµ   r¶   éýÿÿÿéÿÿÿÿé   rr   ©r   Úint32Úint64r†   ÚbyteÚuint32Úuint64r¹   r   r   r   Úrun_binop_ints  s"    

ÿÿ


þÿzTestOperators.run_binop_intsc                 C   sD   dddg}dddg}t jt jft jt jfg}| j|||||d� d S )Ngš™™™™™ñ¿ç        gš™™™™™ñ?g      ø¿gš™™™™™é?gÍÌÌÌÌÌ @rr   ©r   Úfloat32Úfloat64r‰   r¹   r   r   r   Úrun_binop_floats*  s    



ÿÿzTestOperators.run_binop_floatsc                 C   s   | j ||d� d S rž   )rÊ   )r|   r}   rs   r   r   r   Úrun_binop_floats_floordiv4  s    z'TestOperators.run_binop_floats_floordivc                 C   sD   dddg}dddg}t jt jft jt jfg}| j|||||d� d S )Nyš™™™™™ñ¿333333Ó?y                y        š™™™™™ñ?y      ø¿ffffffæ¿y        š™™™™™é?yÍÌÌÌÌÌ @       Àrr   )r   Ú	complex64Ú
complex128r‰   r¹   r   r   r   Úrun_binop_complex7  s    



ÿÿzTestOperators.run_binop_complexFc                    s¦   |D ]œ}|  ¡ D ]Ž\}}dD ]€}d||f }|r8|d7 }|r@tnt}	d| }
||
|	fdd„‰ |rzd|krz|sz‡ fdd	„}nˆ }||_|r”td
ƒ|ƒ}|| |< qqqd S )N©FTz
test_%s_%sZ_npmz
%s_usecasec                 S   s$   t | |ƒ}t | j|ƒ}|||ƒ d S r   )Úgetattrr�   )r|   Úrunner_nameÚusecase_namers   ÚrunnerZ
op_usecaser   r   r   ÚinnerK  s    
z1TestOperators.generate_binop_tests.<locals>.innerÚarrayc              	      s   |   ¡ � ˆ ƒ  W 5 Q R X d S r   )ÚassertTypingErrorr    ©rÔ   r   r   Ú	test_methR  s    
z5TestOperators.generate_binop_tests.<locals>.test_methZ	important)ÚitemsrŸ   Úforce_pyobj_flagsrB   r   )ÚnsZusecasesZ
tp_runnersZ	npm_arrayZusecaseZtp_namerÑ   r³   Z	test_namers   rÒ   rØ   r   r×   r   Úgenerate_binop_testsA  s&     ÿ
z"TestOperators.generate_binop_tests)rH   rI   rJ   rK   rL   rM   rÅ   rÊ   rÎ   )ÚintsÚfloatsÚcomplex)rP   rQ   )rN   rO   rR   rS   rË   )rÝ   rÞ   c              
   C   sŒ   t | j|ƒ}tjtjtjg}|r,| tj¡ |D ]V}t|||f|d�}|j	}	|  
t¡�}
|	ddƒ W 5 Q R X |tk	r0|  |t|
jƒ¡ q0d S )Nrr   rµ   r   )rÐ   r�   r   rÀ   rÃ   rÉ   ÚappendrÍ   r   rv   ÚassertRaisesÚZeroDivisionErrorrÚ   ÚassertInÚstrÚ	exception)r|   rÒ   ru   rs   Úallow_complexr}   r�   Útpr‚   rƒ   Úcmr   r   r   Úcheck_div_errorsu  s    zTestOperators.check_div_errorsc                 C   s   | j dd|dd� d S )Nr$   údivision by zeroT)rs   ræ   ©ré   rœ   r   r   r   Útest_truediv_errors†  s    
ÿz!TestOperators.test_truediv_errorsc                 C   s   | j td� d S rž   )rì   rŸ   r    r   r   r   Útest_truediv_errors_npmŠ  s    z%TestOperators.test_truediv_errors_npmc                 C   s   | j dd|d� d S )Nr"   rê   rr   rë   rœ   r   r   r   Útest_floordiv_errors�  s    z"TestOperators.test_floordiv_errorsc                 C   s   | j td� d S rž   )rî   rŸ   r    r   r   r   Útest_floordiv_errors_npm�  s    z&TestOperators.test_floordiv_errors_npmc                 C   s   | j dd|d� d S )Nr&   zmodulo by zerorr   rë   rœ   r   r   r   Útest_mod_errors“  s    zTestOperators.test_mod_errorsc                 C   s   | j td� d S rž   )rð   rŸ   r    r   r   r   Útest_mod_errors_npm–  s    z!TestOperators.test_mod_errors_npmc                 C   s’   dddddg}dddg}t jt jft jt jfg}| j|||||d� dddg}dddg}t jt jft jt jft jt jfg}| j|||||d� d S )Néþÿÿÿr½   r   rµ   r¶   rr   r¿   r¹   r   r   r   Úrun_pow_ints™  s"    


ÿÿ




þÿzTestOperators.run_pow_intsc                 C   s†   ddddg}ddddd	g}t jt jft jt jfg}| j|||||d
� dg}ddd	g}t jt jft jt jfg}| j|||||d
� d S )NgÉv¾ŸÇkÀgÉv¾ŸÇ[ÀgÉv¾ŸÇ[@gÉv¾ŸÇk@rò   r½   r   rµ   r¶   rr   rÆ   rÇ   r¹   r   r   r   Úrun_pow_floats­  s     

ÿÿ


ÿÿzTestOperators.run_pow_floats)rT   rU   ró   rô   c                 C   sF   | j j}dddg}|}tjtjftjtjfg}| j|||||d� d S )Nù      ð?        ù              ð?ù      ð¿      ð¿rr   )r�   r   r   rÌ   rÍ   r‰   ©r|   rs   r}   r~   r   r€   r   r   r   Útest_add_complexÇ  s    


ÿÿzTestOperators.test_add_complexc                 C   s   | j td� d S rž   )rù   rŸ   r    r   r   r   Útest_add_complex_npmÓ  s    z"TestOperators.test_add_complex_npmc                 C   sL   | j j}dddg}dddg}tjtjftjtjfg}| j|||||d� d S ©Nrõ   rö   r÷   rµ   r¶   r¾   rr   )r�   r   r   rÌ   rÍ   r‰   rø   r   r   r   Útest_sub_complexÖ  s    



ÿÿzTestOperators.test_sub_complexc                 C   s   | j td� d S rž   )rü   rŸ   r    r   r   r   Útest_sub_complex_npmâ  s    z"TestOperators.test_sub_complex_npmc                 C   sL   | j j}dddg}dddg}tjtjftjtjfg}| j|||||d� d S rû   )r�   r    r   rÌ   rÍ   r‰   rø   r   r   r   Útest_mul_complexå  s    



ÿÿzTestOperators.test_mul_complexc                 C   s   | j td� d S rž   )rþ   rŸ   r    r   r   r   Útest_mul_complex_npmñ  s    z"TestOperators.test_mul_complex_npmc                 C   sL   | j j}dddg}dddg}tjtjftjtjfg}| j|||||d� d S rû   )r�   r$   r   rÌ   rÍ   r‰   rø   r   r   r   Útest_truediv_complexô  s    



ÿÿz"TestOperators.test_truediv_complexc                 C   s   | j td� d S rž   )r   rŸ   r    r   r   r   Útest_truediv_complex_npm   s    z&TestOperators.test_truediv_complex_npmc              	   C   s2   | j j}|  ¡ � t|tjtjfƒ}W 5 Q R X d S r   )r�   r&   rÖ   r   r   rÌ   )r|   rs   r}   r°   r   r   r   Útest_mod_complex  s    
zTestOperators.test_mod_complexc                 C   s   | j td� d S rž   )r  rŸ   r    r   r   r   Útest_mod_complex_npm  s    z"TestOperators.test_mod_complex_npmc                 C   sj   t |dtd�}|j}tdƒ}tdƒ}|||ƒ}|  |jd¡ |rN|  ||¡ n|  ||¡ |  ||¡ d S )Nr   rr   r¾   é   é   )r   rÚ   rv   r   r—   Úvaluer•   ÚassertIsNot)r|   r}   Úinplacer°   rƒ   ÚaÚbr„   r   r   r   Úcheck_matmul_objmode  s    
z"TestOperators.check_matmul_objmodec                 C   s   | j | jjdd� d S )NF©r  )r  r�   r   r    r   r   r   Útest_matmul  s    zTestOperators.test_matmulc                 C   s   | j | jjdd� d S )NTr  )r  r�   r   r    r   r   r   Útest_imatmul!  s    zTestOperators.test_imatmulc                 C   s~   t  t jdd¡}t|||ftd�}|j}t ddg¡}t ddg¡}|||ƒ}|  |t ||¡¡ |  	||¡ |  	||¡ d S )Nrµ   ÚCrr   r¶   r¾   r  )
r   ZArrayrÈ   r   rŸ   rv   r‡   rz   Údotr  )r|   r}   Zarrtyr°   rƒ   r	  r
  r„   r   r   r   Úcheck_matmul_npm$  s    
zTestOperators.check_matmul_npmc                 C   s   |   | jj¡ d S r   )r  r�   r   r    r   r   r   Útest_matmul_npm1  s    zTestOperators.test_matmul_npmc              	   C   s&   |   ¡ �}|  | jj¡ W 5 Q R X d S r   )rÖ   r  r�   r   )r|   Úraisesr   r   r   Útest_imatmul_npm4  s    
zTestOperators.test_imatmul_npmc                 C   sø   ddg}dddddddg}t jt jfg}| j|||||d� ddg}ddddddd	d
g}t jt jfg}| j|||||d� ddg}dddddddg}t jt jfg}| j|||||d� ddg}ddddddd	d
g}t jt jfg}| j|||||d� d S )Nr   rµ   r¶   r  é   é   é   rr   é    é?   r½   ©r   rÃ   r†   rÄ   rÀ   rÁ   r¹   r   r   r   Úrun_bitshift_left<  s0    ÿÿÿÿzTestOperators.run_bitshift_left)Zbitshift_leftZbitshift_ileftrÝ   r  c                 C   s   dddg}dddddddg}t jt jfg}| j|||||d	� ddd
g}ddddddddg}t jt jfg}| j|||||d	� dddg}dddddddg}t jt jfg}| j|||||d	� dddg}ddddddddg}t jt jfg}| j|||||d	� d S )Nr   rµ   ì   ÿÿ r¶   r  r  r  r  rr   ì   ÿÿÿÿ r  r  é   €r½   r  r¹   r   r   r   Úrun_bitshift_rightb  s0    
ÿ
ÿ
ÿ
ÿz TestOperators.run_bitshift_right)Zbitshift_rightZbitshift_irightr  c                 C   s4  t tddƒƒdg }t tddƒƒdg }tjtjfg}| j|||||d� t tddƒƒdg }t tddƒƒdg }tjtjfg}| j|||||d� t tddƒƒdd	g }t tddƒƒdd	g }tjtjfg}| j|||||d� t tddƒƒd
dg }t tddƒƒd
dg }tjtjfg}| j|||||d� d S )Nr   r  r  rr   r  éüÿÿÿr  r  éÿÿÿìûÿÿÿ         ì   ÿÿÿÿ )ÚlistÚranger   rÃ   r†   rÄ   rÀ   rÁ   r¹   r   r   r   Úrun_logicalˆ  s0    ÿÿÿÿzTestOperators.run_logical)Zbitwise_andZbitwise_iandZ
bitwise_orZbitwise_iorZbitwise_xorZbitwise_ixorr&  rº   )rÝ   Zboolsc           
      C   sx  | j j}ttddƒƒdg }dd„ |D ƒ}dg}tjtjfg}| j|||||d� ttddƒƒd	d
g }dg}tjtjfg}| j|||||d� ttddƒƒdg }dd„ |D ƒ}dg}tjtjfg}| j|||||d� ttddƒƒddg }dg}tj	tj	fg}| j|||||d� ddddg}tt
tj|ƒƒ}| j j}t|tjf|d�}|j}|D ]}	|  ||	ƒ||	ƒ¡ �qXd S )Nr   r  r  c                 S   s   g | ]}t  |¡‘qS r   )r‡   rÃ   ©Ú.0r   r   r   r   Ú
<listcomp>¹  s     z2TestOperators.test_bitwise_not.<locals>.<listcomp>rr   r   r  r  r!  r  c                 S   s   g | ]}t  |¡‘qS r   )r‡   rÄ   r'  r   r   r   r)  Ê  s     r"  r#  FT)r�   r4   r$  r%  r   rÃ   r†   rÀ   rÄ   rÁ   Úmapr‡   Zbool_r5   r   r¸   rv   rz   )
r|   rs   r}   r~   r   r€   Úvaluesr°   rƒ   Úvalr   r   r   Útest_bitwise_notµ  sD    ÿÿÿÿzTestOperators.test_bitwise_notc                 C   s   | j td� d S rž   )r-  rŸ   r    r   r   r   Útest_bitwise_not_npmå  s    z"TestOperators.test_bitwise_not_npmc                    s\   ‡ fdd„}ddddddd	d
dddg}|D ],}t ˆ j|ƒ}||tjtjfˆ j| d� q*dS )zI
        Make sure that bitwise float operations are not allowed
        c              	      sl   d  | ¡}ˆ jtj|d��}t| |ƒ W 5 Q R X td }|  t|tƒrJ|nd  |¡¡}ˆ  |t|j	ƒ¡ d S )Nz'expecting TypingError when compiling {}rt   z {}zFunction({}))
Úformatrá   r   ZTypingErrorr   r	   Ú
isinstancerä   rã   rå   )r}   ZargtypesÚopnameru   r  ÚfmtZ	expectingr    r   r   Úassert_reject_compileì  s    
ÿþz?TestOperators.test_bitwise_float.<locals>.assert_reject_compiler)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   )r1  N)rÐ   r�   r   rÈ   Ú_bitwise_opnames)r|   r3  ÚmethodsÚnamer}   r   r    r   Útest_bitwise_floatè  s$    õÿz TestOperators.test_bitwise_floatc                 C   sL   | j j}dddddg}t|dtd�}|j}|D ]}|  ||ƒ||ƒ¡ q.d S )Nrµ   r¶   r¾   ç333333ó?ù        333333@r   rr   )r�   r6   r   rÚ   rv   r—   ©r|   r}   r+  r°   rƒ   r,  r   r   r   Útest_not
  s    ûzTestOperators.test_notc                 C   s~   | j j}tjtjtjtjtjg}dddddg}t||ƒD ]@\}}t	||gƒ}|  
|jjtj¡ |j}|  
||ƒ||ƒ¡ q8d S )Nrµ   r¶   r¾   r8  r9  )r�   r6   r   Úint8rÀ   rÁ   rÈ   rÍ   Úzipr   r—   Ú	signatureÚreturn_typer¸   rv   ©r|   r}   Zargtysr+  Útyr,  r°   rƒ   r   r   r   Útest_not_npm  s$    ûûzTestOperators.test_not_npmc                 C   s~   | j j}tjtjtjtjtjtjtj	tj	g}ddddddddg}t
||ƒD ].\}}t||gƒ}|j}|  ||ƒ||ƒ¡ qJd S ©	Nrµ   r¶   r¾   r8  g333333@r9  TF)r�   r7   r   r<  rÀ   rÁ   rÈ   rÉ   rÍ   r¸   r=  r   rv   ÚassertAlmostEqualr@  r   r   r   Útest_negate_npm3  s.    øø
zTestOperators.test_negate_npmc                 C   sP   | j j}dddddddg}t|dtd	�}|j}|D ]}|  ||ƒ||ƒ¡ q2d S ©
Nrµ   r¶   r¾   r8  r9  TFr   rr   )r�   r7   r   rÚ   rv   r—   r:  r   r   r   Útest_negateP  s    ù	zTestOperators.test_negatec                 C   s~   | j j}tjtjtjtjtjtjtj	tj	g}ddddddddg}t
||ƒD ].\}}t||gƒ}|j}|  ||ƒ||ƒ¡ qJd S rC  )r�   r8   r   r<  rÀ   rÁ   rÈ   rÉ   rÍ   r¸   r=  r   rv   rD  r@  r   r   r   Útest_unary_positive_npm`  s.    øø
z%TestOperators.test_unary_positive_npmc                 C   sP   | j j}dddddddg}t|dtd	�}|j}|D ]}|  ||ƒ||ƒ¡ q2d S rF  )r�   r8   r   rÚ   rv   r—   r:  r   r   r   Útest_unary_positive|  s    ù	z!TestOperators.test_unary_positivec                 C   sP   t j}t||t  |d¡f|d�}|j}dD ] }d}|  |||ƒ|||ƒ¡ q*d S )Nr¾   rr   )r¾   r  é   é   é*   )r¾   rL  rJ  )r   rÁ   r   ZUniTuplerv   rz   )r|   r}   rs   rŠ   r°   rƒ   ÚiÚtupr   r   r   Ú	_check_inŒ  s    ÿzTestOperators._check_inc                 C   s   |   | jj|¡ d S r   )rO  r�   r?   rœ   r   r   r   Útest_in•  s    zTestOperators.test_inc                 C   s   | j td� d S rž   )rP  rŸ   r    r   r   r   Útest_in_npm˜  s    zTestOperators.test_in_npmc                 C   s   |   | jj|¡ d S r   )rO  r�   r@   rœ   r   r   r   Útest_not_in›  s    zTestOperators.test_not_inc                 C   s   | j td� d S rž   )rR  rŸ   r    r   r   r   Útest_not_in_npmž  s    zTestOperators.test_not_in_npmN)F)drB   rC   rD   Ú__doc__r   r�   rG   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rc   r4  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Ü   Ú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.  r7  r;  rB  rE  rG  rH  rI  rO  rP  rQ  rR  rS  r   r   r   r   rp   l  s  õÿ
ÿ
ÿ
  þ	


þþþþÿþÿ
ÿþ
!þ!þ!ÿü0"	rp   c                   @   sB   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 )ÚTestOperatorModulerq   N)rB   rC   rD   rF   r�   rG   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rc   r4  r   r   r   r   rV  ¢  s   õrV  c                   @   sf  e Zd ZdZeZdddddddd	d
ddddgZejej	ej
ejgZdd„ eD ƒZdd„ eD ƒZee ee¡ƒZdd„ eD ƒZdd„ eD ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ fd d!„Zefd"d#„Zed$d„ fd%d&„Zd'd(„ Zd)d*„ Zd+d,„ Z d-d.„ Z!d/d0„ Z"d1d2„ Z#d3d4„ Z$d5d6„ Z%d7d8„ Z&d9d:„ Z'd;d<„ Z(d=d>„ Z)d?d@„ Z*dAdB„ Z+dCdD„ Z,dEdF„ Z-dGS )HÚTestMixedIntsz<
    Tests for operator calls with mixed integer types.
    r   rµ   r¾   é
   rL  é   i'  r½   r¼   iöÿÿÿiÖÿÿÿi�ÿÿÿiðØÿÿc                 C   s   g | ]}|j r|‘qS r   ©Úsigned©r(  rç   r   r   r   r)  ¿  s      zTestMixedInts.<listcomp>c                 C   s   g | ]}|j s|‘qS r   rZ  r\  r   r   r   r)  À  s      c                 C   s$   g | ]\}}|j s|j r||f‘qS r   rZ  ©r(  ÚuÚvr   r   r   r)  Â  s     ÿc                 C   s$   g | ]\}}|j s|j s||f‘qS r   rZ  r]  r   r   r   r)  Ä  s     ÿc                 G   s.   t dd„ |D ƒƒ}t |tjjƒ}ttd| ƒS )Nc                 s   s   | ]}|j jd  V  qdS ©r  N©rŠ   Úitemsize©r(  r_  r   r   r   Ú	<genexpr>È  s     z8TestMixedInts.get_numpy_signed_upcast.<locals>.<genexpr>zint%d©Úmaxr   ÚintpÚbitwidthrÐ   r‡   ©r|   Úvalsrh  r   r   r   Úget_numpy_signed_upcastÇ  s    z%TestMixedInts.get_numpy_signed_upcastc                 G   s.   t dd„ |D ƒƒ}t |tjjƒ}ttd| ƒS )Nc                 s   s   | ]}|j jd  V  qdS r`  ra  rc  r   r   r   rd  Í  s     z:TestMixedInts.get_numpy_unsigned_upcast.<locals>.<genexpr>zuint%dre  ri  r   r   r   Úget_numpy_unsigned_upcastÌ  s    z'TestMixedInts.get_numpy_unsigned_upcastc                 C   s   t t|jƒ|ƒS r   )rÐ   r‡   r6  )r|   r™   r,  r   r   r   Úget_typed_intÑ  s    zTestMixedInts.get_typed_intc                    s   t t|ƒ‰ ‡ ‡fdd„}|S )Nc                    s   ˆ  | |¡}ˆ || ƒ||ƒƒS r   ©rk  ©r	  r
  rç   ©r�   r|   r   r   Úcontrol_signedÖ  s    z8TestMixedInts.get_control_signed.<locals>.control_signed©rÐ   rG   )r|   r1  rq  r   rp  r   Úget_control_signedÔ  s    
z TestMixedInts.get_control_signedc                    s   t t|ƒ‰ ‡ ‡fdd„}|S )Nc                    s   ˆ  | |¡}ˆ || ƒ||ƒƒS r   ©rl  ro  rp  r   r   Úcontrol_unsignedÝ  s    z<TestMixedInts.get_control_unsigned.<locals>.control_unsignedrr  )r|   r1  ru  r   rp  r   Úget_control_unsignedÛ  s    
z"TestMixedInts.get_control_unsignedc                 C   s   | S r   r   r   r   r   r   Ú<lambda>ã  ó    zTestMixedInts.<lambda>c                 K   s´   |D ]ª\}}	t |||	ftd�}
|
j}t ||¡D ]|\}}|  ||¡}|  |	|¡}|||ƒ}|||ƒ}|  ||¡ d||||	ff }||ƒ||ƒ }}| j||fd|i|—Ž q0qd S )Nrr   ú#mismatch for (%r, %r) with types %sru   )r   rŸ   rv   rw   rx   rm  ÚassertIsInstancerz   )r|   r}   Úcontrol_funcÚoperandsr   Úexpected_typeÚ
force_typeÚassertPreciseEqualArgsÚxtÚytr‚   rƒ   r   r   r…   r„   ru   r   r   r   Ú
run_binaryâ  s     

ÿÿzTestMixedInts.run_binaryc              
   C   sr   |D ]h}t ||ftd�}|j}|D ]H}	|  ||	¡}	||	ƒ}
||	ƒ}|  ||¡ | j||
d|	|||
f d� q"qd S )Nrr   z&mismatch for %r with type %s: %r != %rrt   )r   rŸ   rv   rm  rz  rz   )r|   r}   r{  r|  r   r}  r€  r‚   rƒ   r   r…   r„   r   r   r   Ú	run_unaryõ  s     
ÿþzTestMixedInts.run_unaryc                 C   s   | S r   r   r   r   r   r   rw    rx  c                 K   sP   | j ||  |¡|| j|fd|i|—Ž | j ||  |¡|| j|fd|i|—Ž d S )Nr~  )r‚  rs  Úsigned_pairsrv  Úunsigned_pairs)r|   r}   r1  Úsamplesr}  r~  r  r   r   r   Úrun_arith_binop  s$      ÿþý  ÿþýzTestMixedInts.run_arith_binopc                 C   s   |   | jjd| j¡ d S )NrH   )r‡  r�   r   Úint_samplesr    r   r   r   Útest_add  s    zTestMixedInts.test_addc                 C   s   |   | jjd| j¡ d S )NrJ   )r‡  r�   r   rˆ  r    r   r   r   Útest_sub  s    zTestMixedInts.test_subc                 C   s   |   | jjd| j¡ d S )NrL   )r‡  r�   r    rˆ  r    r   r   r   Útest_mul  s    zTestMixedInts.test_mulc                 C   s&   dd„ | j D ƒ}|  | jjd|¡ d S )Nc                 S   s   g | ]}|d kr|‘qS ©r   r   r'  r   r   r   r)    s      z/TestMixedInts.test_floordiv.<locals>.<listcomp>rN   )rˆ  r‡  r�   r"   ©r|   r†  r   r   r   Útest_floordiv  s    zTestMixedInts.test_floordivc                 C   s&   dd„ | j D ƒ}|  | jjd|¡ d S )Nc                 S   s   g | ]}|d kr|‘qS rŒ  r   r'  r   r   r   r)    s      z*TestMixedInts.test_mod.<locals>.<listcomp>rR   )rˆ  r‡  r�   r&   r�  r   r   r   Útest_mod  s    zTestMixedInts.test_modc                    s„   i }t jdkrt|d< ˆ jj}dd„ ˆ jD ƒ}ˆ j|d|f|Ž ‡ fdd„}dd„ ˆ jD ƒ}d	d„ ˆ jD ƒ}ˆ j||||f|Ž d S )
N)r¾   é   r~  c                 S   s   g | ]}|d kr|‘qS rŒ  r   r'  r   r   r   r)  (  s      z*TestMixedInts.test_pow.<locals>.<listcomp>rT   c                    sT   ˆ   | |¡}|dkr$|| ƒ||ƒ S || ƒ|| ƒ }|dkrBdS t d| ¡S d S )Nr   g      ð?)rk  r‡   rg  )r	  r
  rç   Úinvr    r   r   rq  ,  s    z.TestMixedInts.test_pow.<locals>.control_signedc                 S   s   g | ]}|d kr|‘qS rŒ  r   r'  r   r   r   r)  6  s      c                 S   s$   g | ]\}}|j r|j r||f‘qS r   rZ  r]  r   r   r   r)  7  s     ÿ)	r   Z	PYVERSIONr�   r�   r   rˆ  r‡  Ú
type_pairsr‚  )r|   Z
extra_castr}   r†  rq  r„  r   r    r   Útest_pow!  s    

 ÿÿzTestMixedInts.test_powc                 C   sT   dd„ }dd„ | j D ƒ}| jj}| j|||| jtdd� | j|||| jtdd� d S )Nc                 S   s   t | ƒt |ƒ S r   )r�   ©r	  r
  r   r   r   Úcontrol>  s    z+TestMixedInts.test_truediv.<locals>.controlc                 S   s   g | ]}|d kr|‘qS rŒ  r   r'  r   r   r   r)  @  s      z.TestMixedInts.test_truediv.<locals>.<listcomp>Údouble)r}  Úprec)rˆ  r�   r$   r‚  r„  r�   r…  ©r|   r•  r†  r}   r   r   r   Útest_truediv<  s     ÿ ÿzTestMixedInts.test_truedivc                 C   s   |   | jjd| j¡ d S )Nr\   )r‡  r�   r-   rˆ  r    r   r   r   Útest_andK  s    zTestMixedInts.test_andc                 C   s   |   | jjd| j¡ d S )Nr^   )r‡  r�   r/   rˆ  r    r   r   r   Útest_orN  s    zTestMixedInts.test_orc                 C   s   |   | jjd| j¡ d S )Nr`   )r‡  r�   r1   rˆ  r    r   r   r   Útest_xorQ  s    zTestMixedInts.test_xorc           
         s”   t t|ƒ‰ ‡ ‡fdd„}‡ ‡fdd„}ˆj‰‡‡‡fdd„}dd„ ˆjD ƒ}d	d„ ˆjD ƒ}|D ]\}}	|||	|ƒ q`|D ]\}}	|||	|ƒ qzd S )
Nc                    s   ˆ  | |¡}ˆ || ƒ||ƒƒS r   rn  ro  ©Úopfuncr|   r   r   rq  V  s    z5TestMixedInts.run_shift_binop.<locals>.control_signedc                    s   ˆ  | |¡}ˆ || ƒ||ƒƒS r   rt  ro  r�  r   r   ru  Y  s    z7TestMixedInts.run_shift_binop.<locals>.control_unsignedc                    s˜   t ˆ | |ftd�}|j}ˆD ]v}| jd }dddd|d |fD ]R}ˆ | |¡}ˆ ||¡}|||ƒ}|||ƒ}	d||| |ff }
ˆj|	||
d� q>qd S )Nrr   rµ   r   r¾   rJ  ry  rt   )r   rŸ   rv   rh  rm  rz   )r€  r�  r{  r‚   rƒ   r   Zmaxshiftr   r…   r„   ru   )r}   r†  r|   r   r   Úcheck_  s    


ÿz,TestMixedInts.run_shift_binop.<locals>.checkc                 S   s   g | ]\}}|j r||f‘qS r   rZ  r]  r   r   r   r)  r  s    ÿz1TestMixedInts.run_shift_binop.<locals>.<listcomp>c                 S   s   g | ]\}}|j s||f‘qS r   rZ  r]  r   r   r   r)  t  s    ÿ)rÐ   rG   rˆ  r’  )
r|   r}   r1  rq  ru  rŸ  r„  r…  r€  r�  r   )rž  r}   r†  r|   r   Úrun_shift_binopT  s    
zTestMixedInts.run_shift_binopc                 C   s   |   | jjd¡ d S )NrX   )r   r�   r)   r    r   r   r   Útest_lshift|  s    zTestMixedInts.test_lshiftc                 C   s   |   | jjd¡ d S )NrZ   )r   r�   r+   r    r   r   r   Útest_rshift  s    zTestMixedInts.test_rshiftc                 C   s,   dd„ }| j }| jj}|  |||| j¡ d S )Nc                 S   s   | S r   r   ©r	  r   r   r   r•  ƒ  s    z2TestMixedInts.test_unary_positive.<locals>.control)rˆ  r�   r8   rƒ  Ú	int_typesr˜  r   r   r   rI  ‚  s    z!TestMixedInts.test_unary_positivec                    sN   ‡ fdd„}‡ fdd„}ˆ j }ˆ jj}ˆ  |||ˆ j¡ ˆ  |||ˆ j¡ d S )Nc                    s   ˆ   | ¡}||  ƒS r   rn  ©r	  rç   r    r   r   rq  ‹  s    
z9TestMixedInts.test_unary_negative.<locals>.control_signedc                    s   ˆ   | ¡}||  ƒS r   rt  r¥  r    r   r   ru  Ž  s    
z;TestMixedInts.test_unary_negative.<locals>.control_unsigned)rˆ  r�   r7   rƒ  Úsigned_typesÚunsigned_types©r|   rq  ru  r†  r}   r   r    r   Útest_unary_negativeŠ  s    z!TestMixedInts.test_unary_negativec                    sN   ‡ fdd„}‡ fdd„}ˆ j }ˆ jj}ˆ  |||ˆ j¡ ˆ  |||ˆ j¡ d S )Nc                    s   ˆ   | ¡}||  ƒS r   rn  r¥  r    r   r   rq  ˜  s    
z1TestMixedInts.test_invert.<locals>.control_signedc                    s   ˆ   | ¡}||  ƒS r   rt  r¥  r    r   r   ru  ›  s    
z3TestMixedInts.test_invert.<locals>.control_unsigned)rˆ  r�   r5   rƒ  r¦  r§  r¨  r   r    r   Útest_invert—  s    zTestMixedInts.test_invertN).rB   rC   rD   rT  r   r�   rˆ  r   r<  Zuint8rÁ   rÄ   r¤  r¦  r§  r$  rw   rx   r’  r„  r…  rk  rl  rm  rs  rv  r�   r‚  rƒ  r‡  r‰  rŠ  r‹  rŽ  r�  r“  r™  rš  r›  rœ  r   r¡  r¢  rI  r©  rª  r   r   r   r   rW  µ  sL    ÿ
ÿ
 ÿ
(rW  c                   @   s   e Zd ZeZdS )ÚTestMixedIntsOperatorModuleN)rB   rC   rD   rF   r�   r   r   r   r   r«  ¥  s   r«  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestStaticPowerz`
    Test the ** operator with a static exponent, to exercise a
    dedicated optimization.
    c                 C   sœ   |D ]’}t j}t|ƒ}tdd�|ƒ}tdd�|ƒ}|D ]^}z|||ƒ}	W n2 tk
rz   |  t¡� ||ƒ W 5 Q R X Y q6X ||ƒ}
| j|	|
dd� q6qd S )NTr²   r–  )r—  )r   r   r   r   râ   rá   rz   )r|   Ú	exponentsr+  r   Zregular_funcZstatic_funcZstatic_cfuncZregular_cfuncr_  r…   r„   r   r   r   Ú
_check_pow°  s    zTestStaticPower._check_powc              	   C   sD   ddddddddd	g	}ddddd
t  d	¡t  d¡g}|  ||¡ d S )Nrµ   r¶   r¾   rJ  é   r   r½   rò   r¼   r   r  )r‡   r<  Zuint16r®  ©r|   r­  rj  r   r   r   Útest_int_valuesÂ  s    zTestStaticPower.test_int_valuesc                 C   sH   ddddddddd	d
dg}dddt  d¡tdƒtdƒg}|  ||¡ d S )Nrµ   r¶   r¾   rJ  r¯  r   r½   rò   r¼   i iîîîÿr›   g      
@g      ô¿g       ÀÚinfÚnan)r‡   rÈ   r�   r®  r°  r   r   r   Útest_real_valuesÈ  s    z TestStaticPower.test_real_valuesN)rB   rC   rD   rT  r®  r±  r´  r   r   r   r   r¬  ª  s   r¬  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestStringConstComparisonz-
    Test comparison of string constants
    c                 C   sP   dd„ }dd„ }t dd�|ƒ}t dd�|ƒ}|  |ƒ |ƒ ¡ |  |ƒ |ƒ ¡ d S )Nc                  S   s   d} | dkS ©NÚtestr   ©Úsr   r   r   Ú
test_impl1Ó  s    z5TestStringConstComparison.test_eq.<locals>.test_impl1c                  S   s   d} | dkS ©NZtest1r·  r   r¸  r   r   r   Ú
test_impl2×  s    z5TestStringConstComparison.test_eq.<locals>.test_impl2Tr²   ©r   r—   ©r|   rº  r¼  Úcfunc1Úcfunc2r   r   r   Útest_eqÒ  s    z!TestStringConstComparison.test_eqc                 C   sP   dd„ }dd„ }t dd�|ƒ}t dd�|ƒ}|  |ƒ |ƒ ¡ |  |ƒ |ƒ ¡ d S )Nc                  S   s   d} | dkS r¶  r   r¸  r   r   r   rº  á  s    z6TestStringConstComparison.test_neq.<locals>.test_impl1c                  S   s   d} | dkS r»  r   r¸  r   r   r   r¼  å  s    z6TestStringConstComparison.test_neq.<locals>.test_impl2Tr²   r½  r¾  r   r   r   Útest_neqà  s    z"TestStringConstComparison.test_neqN)rB   rC   rD   rT  rÁ  rÂ  r   r   r   r   rµ  Î  s   rµ  c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestBooleanLiteralOperatorsz/
    Test operators with Boolean constants
    c           	         s¾   ‡ fdd„}‡fdd„}dd„ }t jddgd	d
�D ]*\‰ }tdd�|ƒ}|  ||ƒ||ƒ¡ q2t jddgd	d
�D ]*\}‰tdd�|ƒ}|  ||ƒ||ƒ¡ qptdd�|ƒ}|  |ƒ |ƒ ¡ d S )Nc                    s   ˆ | kS r   r   ©r
  ©Úa_valr   r   rº  ô  s    z7TestBooleanLiteralOperators.test_eq.<locals>.test_impl1c                    s   | ˆ kS r   r   r£  ©Úb_valr   r   r¼  ÷  s    z7TestBooleanLiteralOperators.test_eq.<locals>.test_impl2c                  S   s,   ddk} ddk}ddk}ddk}| |||fS ©NTFr   ©Úr1Úr2Zr3Zr4r   r   r   Ú
test_impl3ú  s
    z7TestBooleanLiteralOperators.test_eq.<locals>.test_impl3TFr¶   ©Úrepeatr²   ©rw   rx   r   r—   ©	r|   rº  r¼  rÍ  r
  r¿  r	  rÀ  Zcfunc3r   ©rÆ  rÈ  r   rÁ  ò  s    z#TestBooleanLiteralOperators.test_eqc           	         s¾   ‡ fdd„}‡fdd„}dd„ }t jddgd	d
�D ]*\‰ }tdd�|ƒ}|  ||ƒ||ƒ¡ q2t jddgd	d
�D ]*\}‰tdd�|ƒ}|  ||ƒ||ƒ¡ qptdd�|ƒ}|  |ƒ |ƒ ¡ d S )Nc                    s   ˆ | kS r   r   rÄ  rÅ  r   r   rº    s    z7TestBooleanLiteralOperators.test_ne.<locals>.test_impl1c                    s   | ˆ kS r   r   r£  rÇ  r   r   r¼    s    z7TestBooleanLiteralOperators.test_ne.<locals>.test_impl2c                  S   s,   ddk} ddk}ddk}ddk}| |||fS rÉ  r   rÊ  r   r   r   rÍ    s
    z7TestBooleanLiteralOperators.test_ne.<locals>.test_impl3TFr¶   rÎ  r²   rÐ  rÑ  r   rÒ  r   Útest_ne  s    z#TestBooleanLiteralOperators.test_nec                    st   ‡ fdd„}dd„ }t jddgdd�D ]*\‰ }tdd	�|ƒ}|  ||ƒ||ƒ¡ q&tdd	�|ƒ}|  |ƒ |ƒ ¡ d S )
Nc                    s   ˆ | kS r   r   rÄ  rÅ  r   r   rº  (  s    z7TestBooleanLiteralOperators.test_is.<locals>.test_impl1c                  S   s,   ddk} ddk}ddk}ddk}| |||fS rÉ  r   rÊ  r   r   r   r¼  +  s
    z7TestBooleanLiteralOperators.test_is.<locals>.test_impl2TFr¶   rÎ  r²   rÐ  )r|   rº  r¼  r
  r¿  rÀ  r   rÅ  r   Útest_is&  s    z#TestBooleanLiteralOperators.test_isc                 C   s*   dd„ }t dd�|ƒ}|  |ƒ |ƒ ¡ d S )Nc                  S   s   d\} }|  | fS ©NrÏ   r   r”  r   r   r   Ú	test_impl;  s    z7TestBooleanLiteralOperators.test_not.<locals>.test_implTr²   r½  ©r|   rÖ  rƒ   r   r   r   r;  9  s    z$TestBooleanLiteralOperators.test_notc                 C   s*   dd„ }t dd�|ƒ}|  |ƒ |ƒ ¡ d S )Nc                  S   s   d\} }t | ƒt |ƒfS rÕ  )Úboolr”  r   r   r   rÖ  D  s    z8TestBooleanLiteralOperators.test_bool.<locals>.test_implTr²   r½  r×  r   r   r   Ú	test_boolB  s    z%TestBooleanLiteralOperators.test_boolc                 C   s*   dd„ }t dd�|ƒ}|  |ƒ |ƒ ¡ d S )Nc                  S   s   d\} }t | ƒt |ƒfS rÕ  )rä   r”  r   r   r   rÖ  M  s    z?TestBooleanLiteralOperators.test_bool_to_str.<locals>.test_implTr²   r½  r×  r   r   r   Útest_bool_to_strK  s    z,TestBooleanLiteralOperators.test_bool_to_strN)
rB   rC   rD   rT  rÁ  rÓ  rÔ  r;  rÙ  rÚ  r   r   r   r   rÃ  î  s   		rÃ  Ú__main__),ry   rw   rG   ÚsysÚwarningsÚnumpyr‡   ZunittestZnumba.core.compilerr   r   Znumbar   Z
numba.corer   r   r   r   Znumba.core.types.functionsr	   Znumba.tests.supportr
   r   r   Znumba.tests.matmul_usecaser   r   r   rŸ   rÚ   Zforce_pyobjectr   Úobjectr   rF   rp   rV  rW  r«  r¬  rµ  rÃ  rB   Úmainr   r   r   r   Ú<module>   sH    , $      < q$ g
