ó
\K]c           @  sÚ   d  d l  m Z d  d l m Z m Z d  d l m Z d  d l j Z	 d  d l
 m Z d  d l m Z d  d l m Z m Z d  d l m Z d	 e	 j f d
 „  ƒ  YZ d e	 j f d „  ƒ  YZ e d k rÖ e	 j ƒ  n  d S(   iÿÿÿÿ(   t   print_function(   t   productt   permutations(   t   defaultdictN(   t   OverloadSelector(   t
   cpu_target(   t   builtin_registryt   RegistryLoader(   t   typest   TestOverloadSelectorc           B  s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C  so  t  ƒ  } | j d t j t j f ƒ | j d t j t j f ƒ | j d t j t j f ƒ | j d t j t j f ƒ | j t j t j f ƒ } |  j t	 | ƒ d ƒ | j
 | ƒ \ } } |  j t	 | ƒ d ƒ |  j t	 | ƒ d ƒ |  j | d t j t j f ƒ |  j | t j t j f d ƒ |  j | t j t j f d ƒ |  j | t j t j f d ƒ d  S(   Ni   i   i   i   i    (   R   t   appendR   t   Anyt   Booleant   Integert   _select_compatiblet   booleant   assertEqualt   lent   _sort_signatures(   t   selft   ost   compatst   orderedt   scoring(    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt   test_select_and_sort_1   s    	   c         C  sS  t  ƒ  } | j d t j f ƒ | j d t j f ƒ | j d t j f ƒ | j d t j f ƒ | j t j f ƒ } |  j t	 | ƒ d ƒ | j
 | ƒ \ } } |  j t	 | ƒ d ƒ |  j t	 | ƒ d ƒ |  j | d t j f ƒ |  j | t j f d ƒ |  j | t j f d ƒ |  j | t j f d ƒ |  j | t j f d ƒ d  S(   Ni   i   i   i   i    (   R   R
   R   t	   Containert   Sequencet   MutableSequencet   ListR   R   R   R   (   R   R   R   R   R   (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt   test_select_and_sort_2   s    	c         C  s,  t  ƒ  } |  j | j d t j d t j ƒ ƒ |  j | j d t j d t j ƒ ƒ |  j t t j t j ƒ ƒ |  j | j d t j d t j ƒ ƒ |  j	 | j d t j d t j ƒ ƒ |  j | j d t j
 d t j
 ƒ ƒ |  j | j d t j
 d t j ƒ ƒ |  j	 | j d t j d t j
 ƒ ƒ d  S(   Nt   formalt   actual(   R   t
   assertTruet   _matchR   R   R   t
   issubclassR   R   t   assertFalseR   (   R   R   (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt
   test_match/   s    	%%%%c         C  s¨  t  ƒ  } | j d t j t j f ƒ | j d t j t j f ƒ |  j | j t j t j f ƒ d ƒ |  j	 t
 ƒ   } | j t j t j f ƒ Wd  QX| j d t j t j f ƒ |  j | j t j t j f ƒ d ƒ |  j | j t j t j f ƒ d ƒ | j d t j t j f ƒ |  j	 t ƒ   } | j t j t j f ƒ Wd  QX|  j d t | j ƒ ƒ | j d t j t j f ƒ |  j | j t j t j f ƒ d ƒ d  S(   Ni   i   i   i   s   2 ambiguous signaturesi   (   R   R
   R   R   R   R   R   t   findR   t   assertRaisest   NotImplementedErrort   int32t	   TypeErrort   assertInt   strt	   exception(   R   R   t   raises(    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt   test_ambiguous_detection>   s    	%%%c         C  s±   t  ƒ  } |  j t t j t j ƒ ƒ | j d t j t j f ƒ t j t j ƒ } |  j	 | j
 | | f ƒ d ƒ | j d t j t j f ƒ |  j	 | j
 | | f ƒ d ƒ d  S(   Ni   i   (   R   R    R"   R   R   R   R
   R   R   R   R%   (   R   R   t   lstty(    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt   test_subclass_specializationT   s    	c         C  sÛ   t  ƒ  } |  j t | j ƒ d ƒ | j d t j f ƒ |  j | j t j f ƒ d ƒ |  j t | j ƒ d ƒ | j d t j	 f ƒ |  j t | j ƒ d ƒ |  j | j t j f ƒ d ƒ |  j t | j ƒ d ƒ d  S(   Ni    i   i   (
   R   R   R   t   _cacheR
   R   R   R%   R(   R   (   R   R   (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt
   test_cache]   s    	(   t   __name__t
   __module__R   R   R$   R.   R0   R2   (    (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyR	      s   						t   TestAmbiguousOverloadsc           B  s2   e  Z e d  „  ƒ Z d „  Z d „  Z d „  Z RS(   c         C  s   t  j j ƒ  d  S(   N(   R   t   target_contextt   refresh(   t   cls(    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt
   setUpClassk   s    c         C  sI   t  ƒ  } t t ƒ } x- | j | ƒ D] \ } } | j | | ƒ q% W| S(   N(   R   R   R   t   new_registrationsR
   (   R   t   kindR   t   loadert   implt   sig(    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt   create_overload_selectorp   s
    	c         C  sq   |  j  d d ƒ } t d „  | j Dƒ ƒ } x? t | d d ƒD]+ } y | j | ƒ Wq> t k
 rh q> Xq> Wd  S(   NR;   t   castsc         s  s(   |  ] \ } } | D] } | Vq q d  S(   N(    (   t   .0R>   R=   t   t(    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pys	   <genexpr>y   s    t   ri   (   R?   t   sett   versionsR   R%   R'   (   R   R   t	   all_typesR>   (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt   test_ambiguous_castsw   s    c         C  sÎ   t  t ƒ } t t ƒ } x: | j d ƒ D]) \ } } } | | } | j | | ƒ q( Wxr | j ƒ  D]d \ } } t d „  | j Dƒ ƒ } x< t	 | | ƒ D]+ } y | j
 | ƒ Wq— t k
 rÁ q— Xq— Wqb Wd  S(   Nt	   functionsc         s  s(   |  ] \ } } | D] } | Vq q d  S(   N(    (   RA   R>   R=   RB   (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pys	   <genexpr>Š   s    (   R   R   R   R   R:   R
   t   itemsRD   RE   R   R%   R'   (   R   R<   t	   selectorsR=   t   fnR>   R   RF   (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt   test_ambiguous_functions‚   s    
(   R3   R4   t   classmethodR9   R?   RG   RL   (    (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyR5   i   s   		t   __main__(   t
   __future__R    t	   itertoolsR   R   t   collectionsR   t   numba.unittest_supportt   unittest_supportt   unittestt   numba.targets.baseR   t   numba.targets.registryR   t   numba.targets.imputilsR   R   t   numbaR   t   TestCaseR	   R5   R3   t   main(    (    (    sG   lib/python2.7/site-packages/numba/tests/test_target_overloadselector.pyt   <module>   s   \+