U
    Ã9%eR  ã                   @   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rœe ¡  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ÚosZcompatsZorderedZscoring© r   úg/var/www/html/Darija-Ai-API/env/lib/python3.8/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)ZformalÚactual)r   Ú
assertTrueZ_matchr	   r   r   Ú
issubclassr"   r!   ZassertFalser   ©r   r   r   r   r   Ú
test_match.   s    ÿÿzTestOverloadSelector.test_matchc              	   C   s8  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 5 Q R X | 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 5 Q R X |  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   ZassertInÚstrÚ	exception)r   r   Z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   r,   )r   r   Z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   r,   r.   r   r)   r   r   r   Ú
test_cache\   s    zTestOverloadSelector.test_cacheN)	Ú__name__Ú
__module__Ú__qualname__r    r%   r*   r1   r2   r4   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   Ztarget_contextÚrefresh)Úclsr   r   r   Ú
setUpClassj   s    z!TestAmbiguousOverloads.setUpClassc                 C   s2   t ƒ }ttƒ}| |¡D ]\}}| ||¡ q|S r9   )r   r   r   Únew_registrationsr   )r   Úkindr   ÚloaderÚimplÚsigr   r   r   Úcreate_overload_selectoro   s
    z/TestAmbiguousOverloads.create_overload_selectorc              	   C   sZ   | j dd}tdd„ |jD ƒƒ}t|ddD ](}z| |¡ W q, tk
rR   Y q,X q,d S )NZcasts)r>   c                 s   s    | ]\}}|D ]
}|V  qqd S r9   r   ©Ú.0rA   r@   Útr   r   r   Ú	<genexpr>x   s       z>TestAmbiguousOverloads.test_ambiguous_casts.<locals>.<genexpr>r   )Úr)rB   ÚsetÚversionsr   r,   r
   )r   r   Ú	all_typesrA   r   r   r   Útest_ambiguous_castsv   s    z+TestAmbiguousOverloads.test_ambiguous_castsc              
   C   s˜   t tƒ}ttƒ}| d¡D ]\}}}|| }| ||¡ q| ¡ D ]P\}}tdd„ |jD ƒƒ}t	||ƒD ](}z| 
|¡ W qh tk
rŽ   Y qhX qhqBd S )NZ	functionsc                 s   s    | ]\}}|D ]
}|V  qqd S r9   r   rC   r   r   r   rF   ‰   s       zBTestAmbiguousOverloads.test_ambiguous_functions.<locals>.<genexpr>)r   r   r   r   r=   r   ÚitemsrH   rI   r   r,   r
   )r   r?   Ú	selectorsr@   ÚfnrA   r   rJ   r   r   r   Útest_ambiguous_functions   s    z/TestAmbiguousOverloads.test_ambiguous_functionsN)r5   r6   r7   Úclassmethodr<   rB   rK   rO   r   r   r   r   r8   h   s
   
r8   Ú__main__)Ú	itertoolsr   r   Úcollectionsr   ZunittestZnumba.core.baser   Znumba.core.registryr   Znumba.core.imputilsr   r   Z
numba.corer	   Znumba.core.errorsr
   r   ZTestCaser   r8   r5   Úmainr   r   r   r   Ú<module>   s   \+