o
    Z۷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!   ^/home/ubuntu/vllm_env/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 sw   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    \+