o
    ¦¸¢iR  ã                   @   s¤   d dl mZmZ d dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZmZ G d	d
„ d
ejƒZG dd„ dejƒZedkrPe ¡  dS dS )é    )ÚproductÚpermutations)ÚdefaultdictN)ÚOverloadSelector)Ú
cpu_target)Úbuiltin_registryÚRegistryLoader)Útypes)ÚNumbaNotImplementedErrorÚNumbaTypeErrorc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestOverloadSelectorc                 C   s
  t ƒ }| dtjtjf¡ | dtjtjf¡ | dtjtjf¡ | dtjtjf¡ | tjtjf¡}|  t	|ƒd¡ | 
|¡\}}|  t	|ƒd¡ |  t	|ƒd¡ |  |d tjtjf¡ |  |tjtjf d¡ |  |tjtjf d¡ |  |tjtjf d¡ d S ©Né   é   é   é   r   )r   Úappendr	   ÚAnyÚBooleanÚIntegerÚ_select_compatibleÚbooleanÚassertEqualÚlenÚ_sort_signatures©ÚselfÚosÚcompatsÚorderedÚscoring© r!   úf/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_target_overloadselector.pyÚtest_select_and_sort_1   s   z+TestOverloadSelector.test_select_and_sort_1c                 C   sú   t ƒ }| dtjf¡ | dtjf¡ | dtjf¡ | dtjf¡ | tjf¡}|  t	|ƒd¡ | 
|¡\}}|  t	|ƒd¡ |  t	|ƒd¡ |  |d tjf¡ |  |tjf d¡ |  |tjf d¡ |  |tjf d¡ |  |tjf d¡ d S r   )r   r   r	   Ú	ContainerÚSequenceÚMutableSequenceÚListr   r   r   r   r   r!   r!   r"   Útest_select_and_sort_2   s   z+TestOverloadSelector.test_select_and_sort_2c                 C   sÆ   t ƒ }|  |jtjtjd¡ |  |jtjtjd¡ |  ttjtjƒ¡ |  |jtjtjd¡ |  	|jtjtjd¡ |  |jtj
tj
d¡ |  |jtj
tjd¡ |  	|jtjtj
d¡ d S )N)ÚformalÚactual)r   Ú
assertTrueÚ_matchr	   r   r   Ú
issubclassr%   r$   ÚassertFalser   ©r   r   r!   r!   r"   Ú
test_match.   s   ÿÿzTestOverloadSelector.test_matchc                 C   s`  t ƒ }| dtjtjf¡ | dtjtjf¡ |  | tjtjf¡d¡ |  	t
¡}| tjtjf¡ W d   ƒ n1 s=w   Y  | dtjtjf¡ |  | tjtjf¡d¡ |  | tjtjf¡d¡ | dtjtjf¡ |  	t¡}| tjtjf¡ W d   ƒ n1 s‰w   Y  |  dt|jƒ¡ | dtjtjf¡ |  | tjtjf¡d¡ d S )Nr   r   r   r   z2 ambiguous signaturesé   )r   r   r	   r   r   r   r   Úfindr   ÚassertRaisesr
   Úint32r   ÚassertInÚstrÚ	exception)r   r   Úraisesr!   r!   r"   Útest_ambiguous_detection=   s"   ÿÿz-TestOverloadSelector.test_ambiguous_detectionc                 C   s~   t ƒ }|  ttjtjƒ¡ | dtjtjf¡ t tj¡}|  	| 
||f¡d¡ | dtjtjf¡ |  	| 
||f¡d¡ d S )Nr   r   )r   r+   r-   r	   r%   r$   r   r'   r   r   r2   )r   r   Úlsttyr!   r!   r"   Útest_subclass_specializationS   s   z1TestOverloadSelector.test_subclass_specializationc                 C   sž   t ƒ }|  t|jƒd¡ | dtjf¡ |  | tjf¡d¡ |  t|jƒd¡ | dtj	f¡ |  t|jƒd¡ |  | tjf¡d¡ |  t|jƒd¡ d S )Nr   r   r   )
r   r   r   Ú_cacher   r	   r   r2   r4   r   r/   r!   r!   r"   Ú
test_cache\   s   zTestOverloadSelector.test_cacheN)	Ú__name__Ú
__module__Ú__qualname__r#   r(   r0   r9   r;   r=   r!   r!   r!   r"   r      s    	r   c                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
ÚTestAmbiguousOverloadsc                 C   s   t j ¡  d S ©N)r   Útarget_contextÚrefresh)Úclsr!   r!   r"   Ú
setUpClassj   s   z!TestAmbiguousOverloads.setUpClassc                 C   s2   t ƒ }ttƒ}| |¡D ]
\}}| ||¡ q|S rB   )r   r   r   Únew_registrationsr   )r   Úkindr   ÚloaderÚimplÚsigr!   r!   r"   Úcreate_overload_selectoro   s
   z/TestAmbiguousOverloads.create_overload_selectorc              	   C   sV   | j dd}tdd„ |jD ƒƒ}t|ddD ]}z| |¡ W q ty(   Y qw d S )NÚcasts)rH   c                 s   ó"    | ]\}}|D ]}|V  qqd S rB   r!   ©Ú.0rK   rJ   Útr!   r!   r"   Ú	<genexpr>x   ó   €  z>TestAmbiguousOverloads.test_ambiguous_casts.<locals>.<genexpr>r   )Úr)rL   ÚsetÚversionsr   r2   r
   )r   r   Ú	all_typesrK   r!   r!   r"   Útest_ambiguous_castsv   s   ÿýz+TestAmbiguousOverloads.test_ambiguous_castsc              
   C   s”   t tƒ}ttƒ}| d¡D ]\}}}|| }| ||¡ q| ¡ D ]&\}}tdd„ |jD ƒƒ}t	||ƒD ]}z| 
|¡ W q4 tyF   Y q4w q!d S )NÚ	functionsc                 s   rN   rB   r!   rO   r!   r!   r"   rR   ‰   rS   zBTestAmbiguousOverloads.test_ambiguous_functions.<locals>.<genexpr>)r   r   r   r   rG   r   ÚitemsrU   rV   r   r2   r
   )r   rI   Ú	selectorsrJ   ÚfnrK   r   rW   r!   r!   r"   Útest_ambiguous_functions   s   ÿýýz/TestAmbiguousOverloads.test_ambiguous_functionsN)r>   r?   r@   ÚclassmethodrF   rL   rX   r]   r!   r!   r!   r"   rA   h   s    
rA   Ú__main__)Ú	itertoolsr   r   Úcollectionsr   ÚunittestÚnumba.core.baser   Únumba.core.registryr   Únumba.core.imputilsr   r   Ú
numba.corer	   Únumba.core.errorsr
   r   ÚTestCaser   rA   r>   Úmainr!   r!   r!   r"   Ú<module>   s    \+ÿ