§
    2@Äj.M  ã                   óª  — d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	Z
ddlmZmZmZmZ ddlmZmZ ddlZddlmZmZmZ ddlmZ dd	lmZ dd
lmZ d„ Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de ¦  «        Z! G d„ de ¦  «        Z" G d„ de ¦  «        Z# G d„ de¦  «        Z$e%dk    r ej&        ¦   «          dS dS )z*
Test hashing of various supported types.
é    N)Údefaultdict)Údedent)ÚjitÚconfigÚtypedÚtypeof)ÚtypesÚutils)ÚTestCaseÚskip_unless_py10_or_laterÚrun_in_subprocess)Úcompile_time_get_string_data)Úhashing)Únumpy_versionc                 ó    — t          | ¦  «        S ©N©Úhash©Úxs    úIC:\Projects\Historical\venv\Lib\site-packages\numba/tests/test_hashing.pyÚhash_usecaser      s   € Ý�‰7Œ7€Nó    c                   ó   — e Zd Zd„ ZdS )ÚTestHashingSetupc                 óf   — d}t          j        t          j        dt	          |¦  «        g¦  «         d S )Na±  
        import sys
        import warnings
        from collections import namedtuple

        # hash_info is a StructSequence, mock as a named tuple
        fields = ["width", "modulus", "inf", "nan", "imag", "algorithm",
                  "hash_bits", "seed_bits", "cutoff"]

        hinfo = sys.hash_info
        FAKE_HASHINFO = namedtuple('FAKE_HASHINFO', fields)

        fd = dict()
        for f in fields:
            fd[f] = getattr(hinfo, f)

        fd['algorithm'] = 'fnv'

        fake_hashinfo = FAKE_HASHINFO(**fd)

        # replace the hashinfo with the fnv version
        sys.hash_info = fake_hashinfo
        with warnings.catch_warnings(record=True) as warns:
            # Cause all warnings to always be triggered.
            warnings.simplefilter("always")
            from numba import njit
            @njit
            def foo():
                hash(1)
            foo()
            assert len(warns) > 0
            expect = "FNV hashing is not implemented in Numba. See PEP 456"
            for w in warns:
                if expect in str(w.message):
                    break
            else:
                raise RuntimeError("Expected warning not found")
        z-c)Ú
subprocessÚ
check_callÚsysÚ
executabler   )ÚselfÚworks     r   Útest_warn_on_fnvz!TestHashingSetup.test_warn_on_fnv!   s2   € ð%ˆõL 	Ô�sœ~¨tµV¸D±\´\ÐBÑCÔCÐCÐCÐCr   N)Ú__name__Ú
__module__Ú__qualname__r#   © r   r   r   r      s(   € € € € € ð(Dð (Dð (Dð (Dð (Dr   r   c                   ó|   — e Zd Zg d¢g d¢gg d¢g d¢g d¢g d¢g d¢gg d¢g d	¢g d
¢g d¢g d¢gdœZd„ Zd„ Zdd„Zd„ ZdS )ÚTestHashAlgs)éˆ\ˆr*   r*   r*   )iLÌ‡×l   LL//+³?iTSÏlûÿÿÿqU:~Œ@[ )éò0&ìûÿÿÿO³wq!~ r+   r,   )ééuÖÅì   éu¬Cœ- r-   r.   )é|#|Üì   |#ø8ÿ
^ r/   r0   )i=½Õ¾lûÿÿÿÃBT='8 i\eîÁl   \eÜ+=Ë" )i[Ýlûÿÿÿò$ÛEü,ß; iwmHÏlûÿÿÿ‰oað_gv )éÞîpGì   ÞnáYD~ r1   r2   )é–SìûÿÿÿjxY_oWÇs r3   r4   )é¯ ú—ì   ¯ ô/Ö“l r5   r6   )iöJkl   öJÖ:ø8`~ iÖÄlûÿÿÿü)øwJµ )iàQ	œlûÿÿÿ .íG¥UJG iO{‘lûÿÿÿ±Á]±D] )Údjba33xÚ	siphash13Ú	siphash24c                 óþ   — |t           j        j        k     rd}nt           j        j        }t          j         }t           j        dk    r|rdnd}nt           j        dk    sJ ‚|rdnd}| j        |         |         |         S )Nr7   Úlittleé   r   Úbigé   é   )r   Ú	hash_infoÚcutoffÚ	algorithmr   Ú	IS_32BITSÚ	byteorderÚknown_hashes)r!   ÚpositionÚlengthrB   ÚIS_64BITÚplatforms         r   Úget_expected_hashzTestHashAlgs.get_expected_hashx   s„   € Ø•C”MÔ(Ò(Ð(Ø!ˆIˆIåœÔ/ˆIÝÔ'Ð'ˆÝŒ=˜HÒ$Ð$Ø$Ð+�q�q¨!ˆHˆHå”= EÒ)Ð)Ð)Ð)Ø$Ð+�q�q¨!ˆHØÔ  Ô+¨HÔ5°hÔ?Ð?r   c                 ó   — d|z  S )Nzprint(hash(eval(%a)))r'   )r!   Úrepr_s     r   Úget_hash_commandzTestHashAlgs.get_hash_command…   s   € Ø&¨Ñ.Ð.r   Nc                 óL  — t           j                             ¦   «         }|�t          |¦  «        |d<   n|                     dd ¦  «         t          |                      |¦  «        |¬¦  «        \  }}|                     ¦   «                              ¦   «         }t          |¦  «        S )NÚPYTHONHASHSEED)ÚcodeÚenv)
ÚosÚenvironÚcopyÚstrÚpopr   rM   ÚdecodeÚstripÚint)r!   rL   ÚseedrQ   ÚoutÚ_Ústdouts          r   Úget_hashzTestHashAlgs.get_hashˆ   s’   € ÝŒj�oŠoÑÔˆØÐÝ$'¨¡I¤IˆCÐ Ñ!Ð!à�GŠGÐ$ dÑ+Ô+Ð+Ý"¨×(=Ò(=¸eÑ(DÔ(DØ'*ð,ñ ,ô ,‰ˆˆQà—’‘”×#Ò#Ñ%Ô%ˆÝ�6‰{Œ{Ðr   c                 ó4  — d}|D ]’\  }}}|                       ||¬¦  «        5  |                      t          |¦  «        |¬¦  «        }|                      |t	          |¦  «        ¦  «        }|                      ||¦  «         d d d ¦  «         n# 1 swxY w Y   Œ“d S )N))Úabcr   r   )r`   é*   r<   )Úabcdefghijkra   r?   )õ
   Ã¤Ãºâˆ‘â„‡r   r>   )rc   ra   é   )Ú	input_strrZ   )rZ   )ÚsubTestr^   ÚreprrJ   ÚlenÚassertEqual)r!   Úargsre   rZ   rF   ÚgotÚexpecteds          r   Útest_against_cpython_goldz&TestHashAlgs.test_against_cpython_gold“   sã   € ð>ˆð *.ð 	0ð 	0Ñ%ˆI�t˜XØ—’¨	¸�Ñ=Ô=ð 0ð 0Ø—m’m¥D¨¡O¤O¸$�mÑ?Ô?�Ø×1Ò1°(½CÀ	¹N¼NÑKÔK�Ø× Ò   hÑ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0øð	0ð 	0s   ¢ABÂB	ÂB	r   )r$   r%   r&   rE   rJ   rM   r^   rm   r'   r   r   r)   r)   L   sè   € € € € € ð :Ð9Ð9àNÐNÐNð	ð MÐLÐLàNÐNÐNàNÐNÐNàQÐQÐQàPÐPÐPð
ð  OÐNÐNàNÐNÐNàPÐPÐPàOÐOÐOàRÐRÐRð
ð)!ð !€LðF@ð @ð @ð/ð /ð /ð	ð 	ð 	ð 	ð	0ð 	0ð 	0ð 	0ð 	0r   r)   c                   ó@   — e Zd Zd„ Zd„ Zej        fd„Zd„ Zd„ Z	d„ Z
dS )ÚBaseTestc                 óL   —  t          d¬¦  «        t          ¦  «        | _        d S )NT©Únopython)r   r   Úcfunc©r!   s    r   ÚsetUpzBaseTest.setUp¡   s"   € Ø'•S $Ð'Ñ'Ô'­Ñ5Ô5ˆŒ
ˆ
ˆ
r   c           	      óÀ  — | j         }t          |¦  «        D ]Æ} ||¦  «        }|                      |t          ¦  «         	 |                      |t          |¦  «        ¦  «         ŒM# t          $ rm}t          d¦  «         t          ||t          |¦  «        ¦  «         t          d¦  «         t          t          |¦  «        t          j
        dz
  ¦  «         |‚d }~ww xY wd S )Nzval, nb_hash, hash(val)z%abs(val), hashing._PyHASH_MODULUS - 1r<   )rs   ÚlistÚassertIsInstancerY   ri   r   ÚAssertionErrorÚprintÚabsr   Ú_PyHASH_MODULUS)r!   Úvaluesrs   ÚvalÚnb_hashÚes         r   Úcheck_hash_valueszBaseTest.check_hash_values¤   sç   € Ø”
ˆÝ˜‘<”<ð 
	ð 
	ˆCØ�e˜C‘j”jˆGØ×!Ò! '­3Ñ/Ô/Ð/ðØ× Ò  ­$¨s©)¬)Ñ4Ô4Ð4Ð4øÝ!ð ð ð ÝÐ/Ñ0Ô0Ð0Ý�c˜7¥D¨¡I¤IÑ.Ô.Ð.ÝÐ=Ñ>Ô>Ð>Ý•c˜#‘h”h¥Ô 7¸!Ñ ;Ñ<Ô<Ð<Ø�øøøøðøøøð
	ð 
	s   Á #A$Á$
CÁ.A(CÃCc              #   ó  K  — dD ]~}t          j        |¦  «        }|j        |cxk    r|j        k    sn Œ0d}t	          |||z   ¦  «        V — t	          ||d|z  z   d¦  «        V — t	          ||d|z  z   d¦  «        V — dgV — Œd S )N)r   iÎÿÿÿi`ê  l        éd   é€   éÿÿÿÿ)ÚnpÚiinfoÚminÚmaxÚrange)r!   ÚtypÚstartÚinfoÚns        r   Úint_sampleszBaseTest.int_samples²   s¾   è è € Ø-ð 	ð 	ˆEÝ”8˜C‘=”=ˆDØ”8˜uÐ0Ð0Ò0Ð0¨¬Ò0Ð0Ð0Ð0ØØˆAÝ˜˜u q™yÑ)Ô)Ð)Ð)Ð)Ý˜˜u s¨Q¡w™°Ñ4Ô4Ð4Ð4Ð4Ý˜˜u s¨Q¡w™°Ñ4Ô4Ð4Ð4Ð4Ø�$ˆJˆJˆJˆJð	ð 	r   c           
      ó²   —  t          t          dt          t          j        |¦  «        j        ¦  «        z   ¦  «        |¦  «                             |¦  «        S )NrY   )Úgetattrr†   rU   r‡   ÚbitsÚview)r!   r‹   Úvalues      r   Úsafe_constructzBaseTest.safe_construct½   sB   € Ø;�w•r˜5¥3¥r¤x°¡}¤}Ô'9Ñ#:Ô#:Ñ:Ñ;Ô;¸EÑBÔB×GÒGÈÑLÔLÐLr   c              #   óÌ  K  — t          j        |¦  «        }dd|j        dz  |j        dz  fD ]†}d}t          |j        ||j        z  ¦  «        }d|dz  |fD ]\}||k     rŒ	t          j        ||||z  z   |¦  «        }|                     |¦  «        }|V — | V — ||                     ¦   «         z   V — Œ]Œ‡dddd	t          d
¦  «        t          d
¦  «         g} ||¦  «        V — d S )Nr   é
   ç      à?g     @�@rƒ   g333333ó?g        g       €g      ð¿Úinf)	r†   Úfinfor‰   ÚtinyÚ
resolutionÚlinspaceÚastypeÚmeanÚfloat)r!   r‹   r�   rŒ   rŽ   Úmin_stepÚstepÚas           r   Úfloat_sampleszBaseTest.float_samplesÀ   s  è è € ÝŒx˜‰}Œ}ˆà˜˜TœX¨™_¨d¬h¸Ñ.?Ð@ð 
	#ð 
	#ˆEØˆAÝ˜4œ9 e¨d¬oÑ&=Ñ>Ô>ˆHØ˜h¨#™o¨xÐ8ð #ð #�Ø˜(’?�?ØÝ”K  u¨q°4©xÑ'7¸Ñ;Ô;�Ø—H’H˜S‘M”M�Ø���Ø�b���Ø˜!Ÿ&š&™(œ(‘lÐ"Ð"Ð"Ð"ð#ð �#�t˜T¥5¨¡<¤<µ%¸±,´,°Ð@ˆð
 ˆc�!‰fŒfˆˆˆˆˆr   c              #   ó<  K  — |                       |¦  «        D ]ƒ}|                       |¦  «        D ]k}|d t          |¦  «        …         }|d t          |¦  «        …         }| |d¦  «        |z  z   }t          j        t          j        |¦  «        ¦  «        s|V — ŒlŒ„d S )Ny              ð?)r¤   rh   r†   ÚanyÚisnan)r!   r‹   Úfloat_tyÚrealÚimagr£   s         r   Úcomplex_sampleszBaseTest.complex_samples×   s³   è è € Ø×&Ò& xÑ0Ô0ð 		ð 		ˆDØ×*Ò*¨8Ñ4Ô4ð ð �à˜J�S ™YœY˜JÔ'�Ø˜J�S ™YœY˜JÔ'�Ø˜3˜3˜r™7œ7 T™>Ñ)�õ ”v�bœh q™kœkÑ*Ô*ð Ø�G�G�Gøðð		ð 		r   N)r$   r%   r&   ru   r�   r†   Úint64r�   r•   r¤   r«   r'   r   r   ro   ro   Ÿ   s}   € € € € € ð6ð 6ð 6ðð ð ð !œhð 	ð 	ð 	ð 	ðMð Mð Mðð ð ð.
ð 
ð 
ð 
ð 
r   ro   c                   óh   ‡ — e Zd ZdZˆ fd„Zdˆ fd„Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zed„ ¦   «         Zˆ xZS )ÚTestNumberHashingz'
    Test hashing of number types.
    c                 óÈ   •— t           dk    r7t           dk    r,t          j        ¦   «         | _        t          j        d¦  «         t          ¦   «                              ¦   «         S ©N©r?   r   ©r?   r<   Úlegacy©r   r†   Ú_get_promotion_stateÚinitial_stateÚ_set_promotion_stateÚsuperru   ©r!   Ú	__class__s    €r   ru   zTestNumberHashing.setUpé   óN   ø€ Ý˜FÒ"Ð"¥}¸Ò'>Ð'>õ "$Ô!8Ñ!:Ô!:ˆDÔÝÔ# HÑ-Ô-Ð-å‰wŒw�}Š}‰ŒÐr   ÚreturnNc                 ó¢   •— t           dk    r$t           dk    rt          j        | j        ¦  «         t	          ¦   «                              ¦   «         S ©Nr±   r²   ©r   r†   r·   r¶   r¸   ÚtearDownr¹   s    €r   rÀ   zTestNumberHashing.tearDownò   óD   ø€ Ý˜FÒ"Ð"¥}¸Ò'>Ð'>õ Ô# DÔ$6Ñ7Ô7Ð7å‰wŒw×ÒÑ!Ô!Ð!r   c                 óº   — |                       |¦  «        D ]D}|                      |j        t          j        |¦  «        ¦  «         |                      |¦  «         ŒEd S r   )r¤   ri   Údtyper†   r�   )r!   r‹   r£   s      r   Úcheck_floatszTestNumberHashing.check_floatsú   s`   € Ø×#Ò# CÑ(Ô(ð 	&ð 	&ˆAØ×Ò˜QœW¥b¤h¨s¡m¤mÑ4Ô4Ð4Ø×"Ò" 1Ñ%Ô%Ð%Ð%ð	&ð 	&r   c                 ó¼   — |                       ||¦  «        D ]D}|                      |j        t          j        |¦  «        ¦  «         |                      |¦  «         ŒEd S r   )r«   ri   rÃ   r†   r�   )r!   r‹   r¨   r£   s       r   Úcheck_complexzTestNumberHashing.check_complexÿ   sb   € Ø×%Ò% c¨8Ñ4Ô4ð 	&ð 	&ˆAØ×Ò˜QœW¥b¤h¨s¡m¤mÑ4Ô4Ð4Ø×"Ò" 1Ñ%Ô%Ð%Ð%ð	&ð 	&r   c                 ó‚   — |                       t          j        ¦  «         |                       t          j        ¦  «         d S r   )rÄ   r†   Úfloat32Úfloat64rt   s    r   Útest_floatszTestNumberHashing.test_floats  s4   € Ø×Ò�"œ*Ñ%Ô%Ð%Ø×Ò�"œ*Ñ%Ô%Ð%Ð%Ð%r   c                 ó®   — |                       t          j        t          j        ¦  «         |                       t          j        t          j        ¦  «         d S r   )rÆ   r†   Ú	complex64rÈ   Ú
complex128rÉ   rt   s    r   Útest_complexzTestNumberHashing.test_complex  s<   € Ø×Ò�2œ<­¬Ñ4Ô4Ð4Ø×Ò�2œ=­"¬*Ñ5Ô5Ð5Ð5Ð5r   c                 ó4   — |                       ddg¦  «         d S )NFT©r�   rt   s    r   Ú	test_boolzTestNumberHashing.test_bool  s    € Ø×Ò  t˜}Ñ-Ô-Ð-Ð-Ð-r   c           	      óÔ  — g }t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        fD �]y}|  	                    |¦  «        D ]}|  
                    |¦  «         Œt          j        |¦  «        }|  
                    |                      |d¦  «        g¦  «         |  
                     |d¦  «        g¦  «         dt          |¦  «        v} |¦   «         j        }|j        |j        fD ]½}d|z  }|}	t#          |¦  «        D ]¤}
d}d}|	g}||fD ],}|	|z  }|t$          j        k     r|                     |¦  «         Œ-|D ]!}|  
                     ||¦  «        g¦  «         Œ"|r0|D ]-}||j        k    r |  
                     || ¦  «        g¦  «         Œ.|dk    r	|	dz  dz  }	ŒŸ|	dz	  }	Œ¥Œ¾�Œ{|  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d	¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d	¦  «        g¦  «         |  
                    t          j        d
¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         d S )Nr…   r   Úuinté   ì   ª*UUª*UU
 ì   UUª*UUª* r<   l   þÿÿÿ l   ÿÿÿÿ lûÿÿÿÿÿÿÿ lûÿÿÿöÿÿÿ lûÿÿÿœÿÿÿ i  €i
  €id  €)r†   Úint8Úuint8Úint16Úuint16Úint32Úuint32r¬   Úuint64r�   r�   r‡   r•   rU   Úitemsizerˆ   r‰   rŠ   r   ÚmaxsizeÚappend)r!   ÚminmaxÚtyr£   r�   ÚsignedÚszr   ÚshiftsÚyÚiÚtwiddle1Útwiddle2ÚvalsÚtwr~   Úvs                    r   Ú	test_intszTestNumberHashing.test_ints  sh  € Øˆå”7�BœH¥b¤hµ´	Ý”8�RœY­¬µ"´)ð=ð #	#ñ #	#ˆBà×%Ò% bÑ)Ô)ð *ð *�Ø×&Ò& qÑ)Ô)Ð)Ð)Ý”8˜B‘<”<ˆDð ×"Ò" D×$7Ò$7¸¸BÑ$?Ô$?Ð#@ÑAÔAÐAØ×"Ò" B B q¡E¤E 7Ñ+Ô+Ð+Ø¥3 r¡7¤7Ð*ˆFà�‘””ˆBØ”h ¤Ð)ð #ð #�Ø˜R™�ð �Ý˜v™œð #ð #�AØ1�HØ1�HØ˜3�DØ'¨Ð2ð -ð -˜Ø (™l˜Ø¥¤Ò,Ð,Ø ŸKšK¨Ñ,Ô,Ð,øØ!ð 8ð 8˜Ø×.Ò.°°°1±´¨wÑ7Ô7Ð7Ð7Øð Aà!%ð Að A˜AØ  D¤Hš}˜}Ø $× 6Ò 6¸¸¸A¸2¹¼°xÑ @Ô @Ð @øØ˜A’v�vØ ™U q™L˜˜à ™F˜˜ð%#ñ#ð6 	×Ò¥¤Ð);Ñ <Ô <Ð=Ñ>Ô>Ð>Ø×Ò¥¤Ð);Ñ <Ô <Ð=Ñ>Ô>Ð>Ø×Ò¥¤	Ð*<Ñ =Ô =Ð>Ñ?Ô?Ð?Ø×Ò¥¤	Ð*<Ñ =Ô =Ð>Ñ?Ô?Ð?ð 	×Ò¥¤Ð)<Ñ =Ô =Ð>Ñ?Ô?Ð?Ø×Ò¥¤Ð)<Ñ =Ô =Ð>Ñ?Ô?Ð?Ø×Ò¥¤Ð)<Ñ =Ô =Ð>Ñ?Ô?Ð?Ø×Ò¥¤¨Ñ 5Ô 5Ð6Ñ7Ô7Ð7Ø×Ò¥¤¨Ñ 5Ô 5Ð6Ñ7Ô7Ð7Ø×Ò¥¤¨Ñ 5Ô 5Ð6Ñ7Ô7Ð7Ð7Ð7r   c                 ó¶   ‡ — d„ t          d¦  «        D ¦   «         }t          ˆ fd„|D ¦   «         ¦  «        }‰                      t          |¦  «        d¦  «         d S )Nc                 ó,   — g | ]}t          d ¦  «        ‘ŒS )Únan)r    )Ú.0rç   s     r   ú
<listcomp>z9TestNumberHashing.test_py310_nan_hash.<locals>.<listcomp>O  s   € Ð-Ð-Ð-˜a�U�5‰\Œ\Ð-Ð-Ð-r   r—   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r'   )rs   )rñ   Úzr!   s     €r   rò   z9TestNumberHashing.test_py310_nan_hash.<locals>.<listcomp>P  s#   ø€ Ð,Ð,Ð, Q�4—:’:˜a‘=”=Ð,Ð,Ð,r   r<   )rŠ   ÚsetÚassertGreaterrh   )r!   r   r[   s   `  r   Útest_py310_nan_hashz%TestNumberHashing.test_py310_nan_hashF  sb   ø€ ð .Ð-¥5¨¡9¤9Ð-Ñ-Ô-ˆÝÐ,Ð,Ð,Ð,¨!Ð,Ñ,Ô,Ñ-Ô-ˆØ×Ò�3˜s™8œ8 QÑ'Ô'Ð'Ð'Ð'r   ©r¼   N)r$   r%   r&   Ú__doc__ru   rÀ   rÄ   rÆ   rÊ   rÎ   rÑ   rí   r   r÷   Ú__classcell__©rº   s   @r   r®   r®   ä   s×   ø€ € € € € ðð ðð ð ð ð ð"ð "ð "ð "ð "ð "ð&ð &ð &ð
&ð &ð &ð
&ð &ð &ð6ð 6ð 6ð.ð .ð .ð58ð 58ð 58ðn ð
(ð 
(ñ Ôð
(ð 
(ð 
(ð 
(ð 
(r   r®   c                   ó@   ‡ — e Zd ZdZˆ fd„Zd	ˆ fd„Zd„ Zd„ Zd„ Zˆ xZ	S )
ÚTestTupleHashingz!
    Test hashing of tuples.
    c                 óÈ   •— t           dk    r7t           dk    r,t          j        ¦   «         | _        t          j        d¦  «         t          ¦   «                              ¦   «         S r°   r´   r¹   s    €r   ru   zTestTupleHashing.setUpY  r»   r   r¼   Nc                 ó¢   •— t           dk    r$t           dk    rt          j        | j        ¦  «         t	          ¦   «                              ¦   «         S r¾   r¿   r¹   s    €r   rÀ   zTestTupleHashing.tearDownb  rÁ   r   c                 óX   ‡— |D ]%}ˆfd„|D ¦   «         }|                       |¦  «         Œ&d S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r'   r'   )rñ   r£   Úsplits     €r   rò   z1TestTupleHashing.check_tuples.<locals>.<listcomp>l  s!   ø€ Ð/Ð/Ð/ 1�e�e˜A‘h”hÐ/Ð/Ð/r   rÐ   )r!   Úvalue_generatorr  r}   Útupless     `  r   Úcheck_tupleszTestTupleHashing.check_tuplesj  sL   ø€ Ø%ð 	+ð 	+ˆFØ/Ð/Ð/Ð/¨Ð/Ñ/Ô/ˆFØ×"Ò" 6Ñ*Ô*Ð*Ð*ð	+ð 	+r   c                 ó  ‡ ‡— t           j        Šˆ ˆfd„}ˆ ˆfd„}‰                      ‰                      ¦   «         |¦  «         ‰                      ‰                      ¦   «         |¦  «         ‰                      g d¢¦  «         d S )Nc                 óh   •— ‰                      ‰| ¦  «        } |  ‰d¦  «        z  |  ‰d¦  «        z  fS )z9
            Split i's bits into 2 integers.
            rÖ   rÕ   ©r•   ©rç   r!   r‹   s    €€r   Úsplit2z8TestTupleHashing.test_homogeneous_tuples.<locals>.split2r  sJ   ø€ ð ×#Ò# C¨Ñ+Ô+ˆAØ˜˜Ð.Ñ/Ô/Ñ/Ø˜˜Ð.Ñ/Ô/Ñ/ðð r   c                 ó‚   •— ‰                      ‰| ¦  «        } |  ‰d¦  «        z  |  ‰d¦  «        z  |  ‰d¦  «        z  fS )z9
            Split i's bits into 3 integers.
            l   ’$’$’$’$ l   $I$I$I$I l   IIII	 r  r	  s    €€r   Úsplit3z8TestTupleHashing.test_homogeneous_tuples.<locals>.split3{  s]   ø€ ð ×#Ò# C¨Ñ+Ô+ˆAØ˜˜Ð.Ñ/Ô/Ñ/Ø˜˜Ð.Ñ/Ô/Ñ/Ø˜˜Ð.Ñ/Ô/Ñ/ðð r   )©é   )r   )r   r   )r˜   )r˜   r  )éþÿÿÿr>   )rd   é   )r†   rÝ   r  r�   r�   )r!   r
  r  r‹   s   `  @r   Útest_homogeneous_tuplesz(TestTupleHashing.test_homogeneous_tupleso  sÀ   øø€ ÝŒiˆð	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	×Ò˜$×*Ò*Ñ,Ô,¨fÑ5Ô5Ð5Ø×Ò˜$×*Ò*Ñ,Ô,¨fÑ5Ô5Ð5ð
 	×Òð  >ð  >ð  >ñ 	?ô 	?ð 	?ð 	?ð 	?r   c                 ó`   — d}d„ }|                       |                      ¦   «         |¦  «         d S )Nl            c                 ó~   — | dz  }| dz  | dz	  dz  z  }t          j        |¦  «        t          j        |dz  ¦  «        fS )NrÖ   l   ª*UU é    g-Cëâ6?)r†   r¬   rÉ   )rç   r£   Úbs      r   r  z9TestTupleHashing.test_heterogeneous_tuples.<locals>.split‘  sE   € ØÐ&Ñ&ˆAØ�Z‘ Q¨"¡W°
Ñ$:Ñ;ˆAÝ”8˜A‘;”;¥¤
¨1¨v©:Ñ 6Ô 6Ð6Ð6r   )r  r�   )r!   Úmodulor  s      r   Útest_heterogeneous_tuplesz*TestTupleHashing.test_heterogeneous_tuplesŽ  s@   € Øˆð	7ð 	7ð 	7ð
 	×Ò˜$×*Ò*Ñ,Ô,¨eÑ4Ô4Ð4Ð4Ð4r   rø   )
r$   r%   r&   rù   ru   rÀ   r  r  r  rú   rû   s   @r   rý   rý   T  s�   ø€ € € € € ðð ðð ð ð ð ð"ð "ð "ð "ð "ð "ð+ð +ð +ð
?ð ?ð ?ð>5ð 5ð 5ð 5ð 5ð 5ð 5r   rý   c                   óX   — e Zd Zd„ Zd„ Zd„ Z ej        d¦  «        d„ ¦   «         Zd„ Z	dS )ÚTestUnicodeHashingc                 ó6  — d}t          t          |¦  «        ¦  «        D ] }|                      |d |…         g¦  «         Œ!d}|                     t	          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        D ] }|                      |d |…         g¦  «         Œ!d}|                     t	          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        D ] }|                      |d |…         g¦  «         Œ!d}|                      |¦  «         d S )NÚabcdefghijklmnopqrstuvwxyzu   çœ¼u   ðŸ��âš¡Ú )rŠ   rh   r�   Újoinrw   )r!   Úkind1_stringrç   ÚsepÚkind2_stringÚkind4_stringÚempty_strings          r   Útest_basic_unicodez%TestUnicodeHashing.test_basic_unicode›  s(  € Ø3ˆÝ•s˜<Ñ(Ô(Ñ)Ô)ð 	7ð 	7ˆAØ×"Ò" L°°!°Ô$4Ð#5Ñ6Ô6Ð6Ð6àˆØ—x’x¥ \Ñ 2Ô 2Ñ3Ô3ˆÝ•s˜<Ñ(Ô(Ñ)Ô)ð 	7ð 	7ˆAØ×"Ò" L°°!°Ô$4Ð#5Ñ6Ô6Ð6Ð6àˆØ—x’x¥ \Ñ 2Ô 2Ñ3Ô3ˆÝ•s˜<Ñ(Ô(Ñ)Ô)ð 	7ð 	7ˆAØ×"Ò" L°°!°Ô$4Ð#5Ñ6Ô6Ð6Ð6àˆØ×Ò˜|Ñ,Ô,Ð,Ð,Ð,r   c                 óÖ   — d}t          d¬¦  «        d„ ¦   «         }t          |¦  «        d         }|                      |dk    ¦  «         |                       ||¦  «        |¦  «         d S )Nr  Trq   c                 ó   — | j         S r   )Ú_hashr   s    r   Úfnz4TestUnicodeHashing.test_hash_passthrough.<locals>.fn²  s	   € à”7ˆNr   r…   ©r   r   Ú
assertTrueri   ©r!   r  r'  Ú
hash_values       r   Útest_hash_passthroughz(TestUnicodeHashing.test_hash_passthrough­  s   € ð 4ˆå	�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	õ 2°,Ñ?Ô?ÀÔCˆ
Ø�Š˜
 bÒ(Ñ)Ô)Ð)Ø×Ò˜˜˜LÑ)Ô)¨:Ñ6Ô6Ð6Ð6Ð6r   c                 óÚ   — d}t          d¬¦  «        d„ ¦   «         }t          |¦  «        d         }|                      |dk    ¦  «         |                       ||¦  «        ||f¦  «         d S )Nr  Trq   c                 ó.   — | j         t          | ¦  «        fS r   )r&  r   r   s    r   r'  z9TestUnicodeHashing.test_hash_passthrough_call.<locals>.fn¾  s   € à”7�D ™GœGÐ#Ð#r   r…   r(  r*  s       r   Útest_hash_passthrough_callz-TestUnicodeHashing.test_hash_passthrough_callº  s‚   € à3ˆå	�dÐ	Ñ	Ô	ð	$ð 	$ñ 
Ô	ð	$õ 2°,Ñ?Ô?ÀÔCˆ
Ø�Š˜
 bÒ(Ñ)Ô)Ð)Ø×Ò˜˜˜LÑ)Ô)¨J¸
Ð+CÑDÔDÐDÐDÐDr   z/Needs hash computation at const unpickling timec                 ó¼   — t          d¬¦  «        d„ ¦   «         } |¦   «         }t          d¦  «        }|                      |t          |¦  «        d         ¦  «         d S )NTrq   c                  ó
   — d} | S )Nr  r'   r   s    r   r'  z0TestUnicodeHashing.test_hash_literal.<locals>.fnÊ  s   € à,ˆAØˆHr   r  r…   )r   r   ri   r   )r!   r'  r~   Útmps       r   Útest_hash_literalz$TestUnicodeHashing.test_hash_literalÆ  sn   € õ 
�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð ˆb‰dŒdˆÝÐ/Ñ0Ô0ˆØ×Ò˜Õ;¸CÑ@Ô@ÀÔDÑFÔFÐFÐFÐFr   c                 óØ  — d„ } t          d¬¦  «        |¦  «        }d} ||¦  «        } ||¦  «        }t          |¦  «        }t          |¦  «        }|                      |d d…         |d d…         ¦  «         |                      |d         |d         k    ¦  «         d} ||¦  «        } ||¦  «        }t          |¦  «        }t          |¦  «        }|                      ||¦  «         d S )Nc                 ó:   — d}d}||z   }| rt          |¦  «         |S )NÚaaaau   çœ¼çœ¼çœ¼çœ¼r   )Údo_hashÚconst1Úconst2Únews       r   Úimplz:TestUnicodeHashing.test_hash_on_str_creation.<locals>.implÕ  s-   € ØˆFØ#ˆFØ˜6‘/ˆCØð Ý�S‘	”	�	ØˆJr   Trq   Fr…   )r   r   ri   r)  )r!   r;  ÚjittedÚcompute_hashrl   rk   r£   r  s           r   Útest_hash_on_str_creationz,TestUnicodeHashing.test_hash_on_str_creationÒ  s  € ð	ð 	ð 	ð $•˜dÐ#Ñ#Ô# DÑ)Ô)ˆð ˆØ�4˜Ñ%Ô%ˆØˆf�\Ñ"Ô"ˆÝ)¨(Ñ3Ô3ˆÝ)¨#Ñ.Ô.ˆØ×Ò˜˜3˜B˜3œ  3 B 3¤Ñ(Ô(Ð(Ø�Š˜˜"œ  2¤šÑ'Ô'Ð'ð ˆØ�4˜Ñ%Ô%ˆØˆf�\Ñ"Ô"ˆÝ)¨(Ñ3Ô3ˆÝ)¨#Ñ.Ô.ˆØ×Ò˜˜AÑÔÐÐÐr   N)
r$   r%   r&   r#  r,  r/  ÚunittestÚskipr3  r>  r'   r   r   r  r  ™  s€   € € € € € ð-ð -ð -ð$7ð 7ð 7ð
Eð 
Eð 
Eð €X„]ÐDÑEÔEð	Gð 	Gñ FÔEð	Gðð ð ð ð r   r  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestUnhashablec                 óR  — t          j        ¦   «                              t          j        t          j        ¦  «        t          j        ¦   «                              t          j        ¦  «        t          j        d¦  «        f} t          d¬¦  «        t          ¦  «        }|D ]‡}|                      t          ¦  «        5 } ||¦  «         d d d ¦  «         n# 1 swxY w Y   dt          t          |¦  «        ¦  «        › d�}|                      |t          |j        ¦  «        ¦  «         Œˆd S )Nrd   Trq   zunhashable type: 'ú')r   ÚDictÚemptyr	   r¬   ÚListÚ
empty_listr†   Úonesr   r   ÚassertRaisesÚ	TypeErrorrU   r   ÚassertInÚ	exception)r!   Úunhashablesrs   râ   Úraisesrl   s         r   Útest_hash_unhashablez#TestUnhashable.test_hash_unhashable÷  s0  € Ý”z‘|”|×)Ò)­%¬+µu´{ÑCÔCÝ”z‘|”|×.Ò.­u¬{Ñ;Ô;Ý”w˜q‘z”zð#ˆð #•˜TÐ"Ñ"Ô"¥<Ñ0Ô0ˆØð 	;ð 	;ˆBØ×"Ò"¥9Ñ-Ô-ð °Ø��b‘	”	�	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à>­Cµ°r±
´
©O¬OÐ>Ð>Ð>ˆHØ�MŠM˜(¥C¨Ô(8Ñ$9Ô$9Ñ:Ô:Ð:Ð:ð		;ð 	;s   Â;CÃC	ÃC	c                 ó  — t          d¬¦  «        d„ ¦   «         }|                      t          ¦  «        5 } |¦   «          d d d ¦  «         n# 1 swxY w Y   d}|                      |t	          |j        ¦  «        ¦  «         d S )NTrq   c                  ó8   — t          t          j        ¦  «         d S r   )r   r†   Úcosr'   r   r   Úfooz0TestUnhashable.test_no_generic_hash.<locals>.foo  s   € å•”‰LŒLˆLˆLˆLr   z"No __hash__ is defined for object )r   rJ  rK  rL  rU   rM  )r!   rT  rO  rl   s       r   Útest_no_generic_hashz#TestUnhashable.test_no_generic_hash  sÈ   € õ 
�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð ×Ò�yÑ)Ô)ð 	¨VØˆC‰EŒEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 9ˆØ�Š�h¥ FÔ$4Ñ 5Ô 5Ñ6Ô6Ð6Ð6Ð6s   ´AÁAÁAN)r$   r%   r&   rP  rU  r'   r   r   rB  rB  ó  s2   € € € € € ð	;ð 	;ð 	;ð7ð 7ð 7ð 7ð 7r   rB  Ú__main__)'rù   r?  rR   r   r   Úcollectionsr   Útextwrapr   Únumpyr†   Únumbar   r   r   r   Ú
numba.corer	   r
   Únumba.tests.supportr   r   r   Únumba.cpython.unicoder   Únumba.cpythonr   Únumba.np.numpy_supportr   r   r   r)   ro   r®   rý   r  rB  r$   Úmainr'   r   r   ú<module>ra     s©  ððð ð €€€à 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð à Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø €€€ð4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð ?Ð >Ð >Ð >Ð >Ð >Ø !Ð !Ð !Ð !Ð !Ð !Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð*Dð *Dð *Dð *Dð *D�xñ *Dô *Dð *DðZP0ð P0ð P0ð P0ð P0�8ñ P0ô P0ð P0ðfBð Bð Bð Bð Bˆxñ Bô Bð BðJm(ð m(ð m(ð m(ð m(˜ñ m(ô m(ð m(ð`B5ð B5ð B5ð B5ð B5�xñ B5ô B5ð B5ðJWð Wð Wð Wð W˜ñ Wô Wð Wðt7ð 7ð 7ð 7ð 7�Xñ 7ô 7ð 7ð@ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   