ó
\K]c           @  sS  d  Z  d d l m Z d d l j Z d d l Z d d l m Z d d l	 Z
 d d l m Z m Z m Z d d l j Z d d l m Z m Z m Z d d l m Z e j rÀ d d	 l m Z n  d
 „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e j e j d ƒ d e f d „  ƒ  Yƒ Z e d k rOe j ƒ  n  d S(   s*   
Test hashing of various supported types.
iÿÿÿÿ(   t   print_functionN(   t   defaultdict(   t   jitt   typest   utilsi   (   t   TestCaset   tagt   CompilationCache(   t   hashing(   t   compile_time_get_string_datac         C  s
   t  |  ƒ S(   N(   t   hash(   t   x(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   hash_usecase   s    t   BaseTestc           B  s;   e  Z d  „  Z d „  Z e j d „ Z d „  Z d „  Z RS(   c         C  s   t  d t ƒ t ƒ |  _ d  S(   Nt   nopython(   R   t   TrueR   t   cfunc(   t   self(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   setUp   s    c         C  sy  |  j  } xit | ƒ D][} | | ƒ } |  j | t j ƒ t j } | sî t | t t f ƒ sî t	 j
 | ƒ o t | t j ƒ p t | ƒ j ƒ  } | d k } | d k  oº t | ƒ | k } t | ƒ d k  }	 | oå | oå | oå |	 } qî n  | r y |  j | t | ƒ ƒ Wqqt k
 rm}
 t d ƒ t | | t | ƒ ƒ t d ƒ t t | ƒ t j d ƒ |
 ‚ qqXq q Wd  S(	   Ni    i   i   i   s   val, nb_hash, hash(val)s%   abs(val), hashing._PyHASH_MODULUS - 1I   €    iÿÿÿ(   R   t   listt   assertIsInstanceR   t	   INT_TYPESt   IS_PY3t
   isinstancet   strt   tuplet   npt   iscomplexobjt   floatt
   is_integert   abst   assertEqualR
   t   AssertionErrort   printR   t   _PyHASH_MODULUS(   R   t   valuesR   t   valt   nb_hasht   proceedt   intinputt   nonzerot   intmint   notlongt   e(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   check_hash_values    s.    		

c         c  sª   x£ d d d d	 f D] } t  j | ƒ } | j | k oE | j k n sP q n  d } t | | | ƒ Vt | | d | d ƒ Vt | | d | d ƒ Vd g Vq Wd  S(
   Ni    iÎÿÿÿi`ê  i   i    id   i€   iÿÿÿÿI       (   R   t   iinfot   mint   maxt   range(   R   t   typt   startt   infot   n(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   int_samples<   s    "c      	   c  s  t  j | ƒ } x½ d d | j d | j d f D]› } d } t | j | | j ƒ } xs d | d | f D]^ } | | k  r qi n  t  j | | | | | ƒ } | j | ƒ } | V| V| | j ƒ  Vqi Wq0 W| d d d d	 t d
 ƒ t d
 ƒ t d ƒ g ƒ } | Vd  S(   Ni    i
   g      à?g     @@id   g333333ó?g        g       €g      ð¿t   inft   nan(	   R   t   finfoR/   t   tinyt
   resolutiont   linspacet   astypet   meanR   (   R   R1   R3   R2   R4   t   min_stept   stept   a(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   float_samplesG   s    '"c         c  sq   xj |  j  | ƒ D]Y } xP |  j  | ƒ D]? } | t | ƒ  } | t | ƒ  } | | d ƒ | } | Vq& Wq Wd  S(   Ny              ð?(   RA   t   len(   R   R1   t   float_tyt   realt   imagR@   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   complex_samples[   s    (	   t   __name__t
   __module__R   R,   R   t   int64R5   RA   RF   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyR      s
   			t   TestNumberHashingc           B  sz   e  Z d  Z d „  Z d „  Z e d ƒ d „  ƒ Z e d ƒ d „  ƒ Z d „  Z d „  Z	 e
 j e j d ƒ d	 „  ƒ Z RS(
   s'   
    Test hashing of number types.
    c         C  sG   x@ |  j  | ƒ D]/ } |  j | j t j | ƒ ƒ |  j | ƒ q Wd  S(   N(   RA   R   t   dtypeR   R,   (   R   R1   R@   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   check_floatsj   s    c         C  sJ   xC |  j  | | ƒ D]/ } |  j | j t j | ƒ ƒ |  j | ƒ q Wd  S(   N(   RF   R   RK   R   R,   (   R   R1   RC   R@   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   check_complexo   s    t	   importantc         C  s$   |  j  t j ƒ |  j  t j ƒ d  S(   N(   RL   R   t   float32t   float64(   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_floatst   s    c         C  s0   |  j  t j t j ƒ |  j  t j t j ƒ d  S(   N(   RM   R   t	   complex64RO   t
   complex128RP   (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_complexy   s    c         C  s   |  j  t t g ƒ d  S(   N(   R,   t   FalseR   (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt	   test_bool~   s    c         C  sY  g  } xèt  j t  j t  j t  j t  j t  j t  j t  j g D]°} x$ |  j	 | ƒ D] } |  j
 | ƒ qS Wt  j | ƒ } |  j
 | d ƒ g ƒ |  j
 | d ƒ g ƒ d t | ƒ k } | ƒ  j } x'| j | j g D]} d | } | }	 xú t | ƒ D]ì }
 d } d } |	 g } x= | | g D]/ } |	 | @} | t j k  r!| j | ƒ q!q!Wx$ | D] } |  j
 | | ƒ g ƒ q[W| r¾x: | D]/ } | | j k rˆ|  j
 | | ƒ g ƒ qˆqˆWn  | d k rÛ|	 d Bd >}	 qù |	 d ?}	 qù WqÖ Wq= W|  j
 t  j d ƒ g ƒ |  j
 t  j d	 ƒ g ƒ |  j
 t  j d ƒ g ƒ |  j
 t  j d	 ƒ g ƒ d  S(
   Niÿÿÿÿi    t   uinti   l   ª*UUª*UU
 IUUUUUUUUi   IþÿÿÿÿÿÿIÿÿÿÿÿÿÿ(   R   t   int8t   uint8t   int16t   uint16t   int32t   uint32RI   t   uint64R5   R,   R-   R   t   itemsizeR.   R/   R0   t   syst   maxsizet   append(   R   t   minmaxt   tyR@   R3   t   signedt   szR   t   shiftst   yt   it   twiddle1t   twiddle2t   valst   twR$   t   v(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt	   test_ints   sD    "
	
!s   Python 2 only testc           s*  ‡  f d †  } d } d } d } x` t  j t  j t  j t  j t  j t  j t  j t  j g D]( } | | | ƒ | | ƒ | | ƒ ƒ qX Wd } d } d } x< t  j	 t  j
 g D]( } | | | ƒ | | ƒ | | ƒ ƒ q© Wd } d	 } d
 } x< t  j t  j g D]( } | | | ƒ | | ƒ | | ƒ ƒ qú Wd  S(   Nc           sT   ˆ  j  |  ƒ } ˆ  j  | ƒ } ˆ  j  | ƒ } ˆ  j | | ƒ ˆ  j | | k ƒ d  S(   N(   R   R   t   assertFalse(   t   val1t   val2t   val3t   a1_hasht   a2_hasht   a3_hash(   R   (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   checkµ   s
    i   i   g82üÁÀó?g™Gþ`à	@y        ™Gþ`à@y        ŽÌ#0ð@y82üÁÀó?™Gþ`à@y82üÁÀó?™Gþ`à@y™Gþ`à	@ŽÌ#0ð@(   R   RX   RY   RZ   R[   R\   R]   RI   R^   RO   RP   RR   RS   (   R   Rw   t   a1t   a2t   a3Rd   (    (   R   s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt	   test_py27¯   s"    "&&(   RG   RH   t   __doc__RL   RM   R   RQ   RT   RV   Ro   t   unittestt   skipIfR   R   R{   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyRJ   e   s   				.t   TestTupleHashingc           B  sS   e  Z d  Z d „  Z d „  Z e d ƒ d „  ƒ Z e j e	 j
 d ƒ d „  ƒ Z RS(   s!   
    Test hashing of tuples.
    c         C  sA   x: | D]2 } g  | D] } | | ƒ ^ q } |  j  | ƒ q Wd  S(   N(   R,   (   R   t   value_generatort   splitR#   R@   t   tuples(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   check_tuplesÕ   s    c           sW   t  j ‰  ‡  f d †  } ‡  f d †  } |  j |  j ƒ  | ƒ |  j |  j ƒ  | ƒ d  S(   Nc           s*   ˆ  |  ƒ }  |  ˆ  d ƒ @|  ˆ  d ƒ @f S(   s9   
            Split i's bits into 2 integers.
            IUUUUUUUUl   ª*UUª*UU
 (    (   Ri   (   R1   (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   split2Ý   s    c           s7   ˆ  |  ƒ }  |  ˆ  d ƒ @|  ˆ  d ƒ @|  ˆ  d ƒ @f S(   s9   
            Split i's bits into 3 integers.
            I’$I’$I’$I$I’$I’$Il   IIII	 (    (   Ri   (   R1   (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   split3æ   s    (   R   R^   Rƒ   R5   (   R   R„   R…   (    (   R1   s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_homogeneous_tuplesÚ   s
    		
RN   c         C  s)   d } d „  } |  j  |  j ƒ  | ƒ d  S(   Ni   i?   c         S  s@   |  d @} |  d @|  d ?d @A} t  j | ƒ t  j | d ƒ f S(   NIUUUUUUUUIªªªª    i    g-Cëâ6?(   R   RI   RP   (   Ri   R@   t   b(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyR   ÷   s    
l            (   Rƒ   R5   (   R   t   moduloR   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_heterogeneous_tuplesó   s    	s   Python 2 only testc         C  sf   d } d } d } |  j  | ƒ } |  j  | ƒ } |  j  | ƒ } |  j | | ƒ |  j | | k ƒ d  S(   Ni   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   R   R   Rp   (   R   Rx   Ry   Rz   Rt   Ru   Rv   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyR{   þ   s    (   RG   RH   R|   Rƒ   R†   R   R‰   R}   R~   R   R   R{   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyR   Ð   s
   		s$   unicode hash tests are Python 3 onlyt   TestUnicodeHashingc           B  sD   e  Z d  „  Z d „  Z d „  Z e j d ƒ d „  ƒ Z d „  Z RS(   c         C  sæ   d } x. t  t | ƒ ƒ D] } |  j | |  g ƒ q Wd } | j t | ƒ ƒ } x. t  t | ƒ ƒ D] } |  j | |  g ƒ qe Wd } | j t | ƒ ƒ } x. t  t | ƒ ƒ D] } |  j | |  g ƒ q± Wd } |  j | ƒ d  S(   Nt   abcdefghijklmnopqrstuvwxyzs   çœ¼s   ðŸâš¡t    (   R0   RB   R,   t   joinR   (   R   t   kind1_stringRi   t   sept   kind2_stringt   kind4_stringt   empty_string(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_basic_unicode  s    c         C  s[   d } t  d t ƒ d „  ƒ } t | ƒ d } |  j | d k ƒ |  j | | ƒ | ƒ d  S(   NR‹   R   c         S  s   |  j  S(   N(   t   _hash(   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   fn&  s    iÿÿÿÿ(   R   R   R	   t
   assertTrueR   (   R   RŽ   R•   t
   hash_value(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_hash_passthrough!  s
    c         C  sa   d } t  d t ƒ d „  ƒ } t | ƒ d } |  j | d k ƒ |  j | | ƒ | | f ƒ d  S(   NR‹   R   c         S  s   |  j  t |  ƒ f S(   N(   R”   R
   (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyR•   2  s    iÿÿÿÿ(   R   R   R	   R–   R   (   R   RŽ   R•   R—   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_hash_passthrough_call.  s
    s/   Needs hash computation at const unpickling timec         C  sK   t  d t ƒ d „  ƒ } | ƒ  } t d ƒ } |  j | t | ƒ d ƒ d  S(   NR   c          S  s
   d }  |  S(   NR‹   (    (   R   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyR•   >  s    R‹   iÿÿÿÿ(   R   R   R
   R   R	   (   R   R•   R$   t   tmp(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_hash_literal:  s    	c         C  sÑ   d „  } t  d t ƒ | ƒ } t } | | ƒ } | | ƒ } t | ƒ } t | ƒ } |  j | d  | d  ƒ |  j | d | d k ƒ t } | | ƒ } | | ƒ } t | ƒ } t | ƒ } |  j | | ƒ d  S(   Nc         S  s-   d } d } | | } |  r) t  | ƒ n  | S(   Nt   aaaas   çœ¼çœ¼çœ¼çœ¼(   R
   (   t   do_hasht   const1t   const2t   new(    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   implI  s    
R   iÿÿÿÿ(   R   R   RU   R	   R   R–   (   R   R¡   t   jittedt   compute_hasht   expectedt   gotR@   R‡   (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   test_hash_on_str_creationF  s    	(	   RG   RH   R“   R˜   R™   R}   t   skipR›   R¦   (    (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyRŠ     s
   			t   __main__(    R|   t
   __future__R    t   numba.unittest_supportt   unittest_supportR}   R`   t   collectionsR   t   numpyR   t   numbaR   R   R   t   supportR   R   R   t   numba.targetsR   R   t   numba.unicodeR	   R   R   RJ   R   t
   skipUnlessRŠ   RG   t   main(    (    (    s7   lib/python2.7/site-packages/numba/tests/test_hashing.pyt   <module>   s&   		Jk<Z