B
     \2                 @   s   d Z ddlmZmZmZ ddlZddlZddlm	Z	m
Z
 ddlmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ d
dlmZmZmZ ejeddZG dd deeZG dd deZG dd deeZG dd deeZ G dd deZ!dS )z
Testing numba implementation of the numba dictionary.

The tests here only check that the numba typing and codegen are working
correctly.  Detailed testing of the underlying dictionary operations is done
in test_dictimpl.py.
    )print_functionabsolute_importdivisionN)njitutils)int32int64float32float64types)
dictobject)Dict)IS_PY3)TypingError   )TestCaseMemoryLeakMixinunittestznot supported in py2)reasonc               @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zee j!oe"j#d7kd8d9d: Z$d;d< Z%d=d> Z&d?d@ Z'dAdB Z(dCdD Z)dEdF Z*dGdH Z+dIdJ Z,dKdL Z-dMdN Z.ej/dOdP Z0e1dQdR Z2e1dSdT Z3dUdV Z4dWdX Z5dYS )ZTestDictObjectc             C   sX   t dd }| |ddd | |ddd | |ddd | |ddd dS )	zA
        Exercise dictionary creation, insertion and len
        c             S   s2   t tt}xt| D ]}|d ||< qW t|S )Nr   )r   new_dictr   r	   rangelen)ndi r   :lib/python3.7/site-packages/numba/tests/test_dictobject.pyfoo   s    z,TestDictObject.test_dict_create.<locals>.foor   )r   r      d   N)r   assertEqual)selfr   r   r   r   test_dict_create   s
    zTestDictObject.test_dict_createc             C   sj   t dd }| |ddddgdddg | |ddddgdddg | |dd	ddgdddg dS )
zA
        Exercise dictionary creation, insertion and get
        c             S   sL   t tt}xt| D ]}|||< qW g }x|D ]}||| q0W |S )N)r   r   r   r
   r   appendget)r   Ztargetsr   r   outputtr   r   r   r   3   s    
z)TestDictObject.test_dict_get.<locals>.foo   r   r   	   N
   )r   r!   )r"   r   r   r   r   test_dict_get/   s    zTestDictObject.test_dict_getc             C   s8   t dd }| |dddd | |dddd dS )z8
        Exercise dict.get(k, d) where d is set
        c             S   s2   t tt}xt| D ]}|||< qW |||S )N)r   r   r   r
   r   r%   )r   targetdefaultr   r   r   r   r   r   G   s    z6TestDictObject.test_dict_get_with_default.<locals>.foor(      r+   N)r   r!   )r"   r   r   r   r   test_dict_get_with_defaultC   s    	z)TestDictObject.test_dict_get_with_defaultc          	   C   s   t dd }dddg}dddg}| |||dd | |||dd | |||dd |   |   | t |||d	 W d
Q R X | t |||d W d
Q R X d
S )z1
        Exercise dictionary __getitem__
        c             S   s4   t tt}xt| |D ]\}}|||< qW || S )N)r   r   r   r
   zip)keysvalsr-   r   kvr   r   r   r   W   s    z-TestDictObject.test_dict_getitem.<locals>.foor   r   r/   g?g?g333333?r   N   )r   r!   assert_no_memory_leakdisable_leak_checkassertRaisesKeyError)r"   r   r2   r3   r   r   r   test_dict_getitemS   s    


z TestDictObject.test_dict_getitemc             C   sr   t dd }dddg}dddg}xLtdt|D ]:}| ||d	| |d	| ||d  ||d  f q0W d	S )
z.
        Exercise dictionary .popitem
        c             S   s4   t tt}xt| |D ]\}}|||< qW | S )N)r   r   r   r
   r1   popitem)r2   r3   r   r4   r5   r   r   r   r   s   s    z-TestDictObject.test_dict_popitem.<locals>.foor   r   r/   g?g?g333333?N)r   r   r   r!   )r"   r   r2   r3   r   r   r   r   test_dict_popitemo   s    


z TestDictObject.test_dict_popitemc          	      s   t dd  t  fdd}dddg}dd	d
g}x>tt|D ].}| |||dd jtt||dd q>W |   |   | 	t
 |||dd W dQ R X dS )z.
        Exercise dictionary .popitem
        c             S   s>   d\}}x,t |D ] }|  \}}||7 }||8 }qW ||fS )N)r   r   )r   r<   )r   npopZkeysumZvalsum_r4   r5   r   r   r   core   s    z3TestDictObject.test_dict_popitem_many.<locals>.corec                s6   t tt}xt| |D ]\}}|||< qW  ||S )N)r   r   r   r1   )r2   r3   r>   r   r4   r5   )r@   r   r   r      s    z2TestDictObject.test_dict_popitem_many.<locals>.foor   r   r/   r*         )r>   r6   N)r   r   r   r!   py_funcdictr1   r7   r8   r9   r:   )r"   r   r2   r3   r   r   )r@   r   test_dict_popitem_many   s    
	

z%TestDictObject.test_dict_popitem_manyc          	   C   s   t dd }dddg}dddg}| |||dd	 | |||dd
 | |||dd | |||dd |   |   t dd }| t |  W dQ R X dS )z*
        Exercise dictionary .pop
        c             S   s@   t tt}xt| |D ]\}}|||< qW ||d t|fS )N)r   r   r   r
   r1   popr   )r2   r3   r-   r   r4   r5   r   r   r   r      s    z)TestDictObject.test_dict_pop.<locals>.foor   r   r/   g?g?g333333?)g?r   )g?r   )g333333?r   r   )Nr/   c              S   s   t tt} | dS )Nr   )r   r   r   r
   rF   )r   r   r   r   r      s    N)r   r!   r7   r8   r9   r:   )r"   r   r2   r3   r   r   r   test_dict_pop   s    


zTestDictObject.test_dict_popc          	      sp   t dd  t  fdd}dddg}dd	d
g}dddddddddg	}| |||| tt||| dS )z*
        Exercise dictionary .pop
        c             S   s:   d}x0|D ](}|||  |d t|  7 }|d9 }q
W |S )Nr   grh|?r   )rF   r   )r   popsZtotalr4   r   r   r   r@      s
    
z/TestDictObject.test_dict_pop_many.<locals>.corec                s6   t tt}xt| |D ]\}}|||< qW  ||S )N)r   r   r   r
   r1   )r2   r3   rH   r   r4   r5   )r@   r   r   r      s    z.TestDictObject.test_dict_pop_many.<locals>.foor   r   r/   g?g?g333333?r   r+   N)r   r!   rC   rD   r1   )r"   r   r2   r3   rH   r   )r@   r   test_dict_pop_many   s    	


z!TestDictObject.test_dict_pop_manyc          	   C   s   t dd }dddg}dddg}| |||dd	 | |||dd	 | |||dd	 |   |   | t |||d
 W d Q R X d S )Nc             S   sD   t tt}xt| |D ]\}}|||< qW ||= t|||fS )N)r   r   r   r
   r1   r   r%   )r2   r3   r-   r   r4   r5   r   r   r   r      s
    z-TestDictObject.test_dict_delitem.<locals>.foor   r   r/   g?g?g333333?)r   Nr   )r   r!   r7   r8   r9   r:   )r"   r   r2   r3   r   r   r   test_dict_delitem   s    	

z TestDictObject.test_dict_delitemc             C   s6   t dd }dddg}dddg}| |||d	 d
S )z%
        Exercise dict.clear
        c             S   sH   t tt}xt| |D ]\}}|||< qW t|}|  |t|fS )N)r   r   r   r
   r1   r   clear)r2   r3   r   r4   r5   Zb4r   r   r   r     s    z+TestDictObject.test_dict_clear.<locals>.foor   r   r/   g?g?g333333?)r/   r   N)r   r!   )r"   r   r2   r3   r   r   r   test_dict_clear  s    

zTestDictObject.test_dict_clearc             C   sZ   t dd }dddg}dddg}| |||tt|| t d	d }| | g  d
S )z%
        Exercise dict.items
        c             S   sP   t tt}xt| |D ]\}}|||< qW g }x| D ]}|| q:W |S )N)r   r   r   r
   r1   itemsr$   )r2   r3   r   r4   r5   outkvr   r   r   r     s    z+TestDictObject.test_dict_items.<locals>.foor   r   r/   g?g?g333333?c              S   s0   t tt} g }x|  D ]}|| qW |S )N)r   r   r   r
   rM   r$   )r   rN   rO   r   r   r   r   2  s
    N)r   r!   listr1   )r"   r   r2   r3   r   r   r   test_dict_items  s    

zTestDictObject.test_dict_itemsc             C   s6   t dd }dddg}dddg}| |||| d	S )
z$
        Exercise dict.keys
        c             S   sP   t tt}xt| |D ]\}}|||< qW g }x| D ]}|| q:W |S )N)r   r   r   r
   r1   r2   r$   )r2   r3   r   r4   r5   rN   r   r   r   r   @  s    z*TestDictObject.test_dict_keys.<locals>.foor   r   r/   g?g?g333333?N)r   r!   )r"   r   r2   r3   r   r   r   test_dict_keys<  s    

zTestDictObject.test_dict_keysc             C   s6   t dd }dddg}dddg}| |||| d	S )
z&
        Exercise dict.values
        c             S   sP   t tt}xt| |D ]\}}|||< qW g }x| D ]}|| q:W |S )N)r   r   r   r
   r1   valuesr$   )r2   r3   r   r4   r5   rN   r   r   r   r   W  s    z,TestDictObject.test_dict_values.<locals>.foor   r   r/   g?g?g333333?N)r   r!   )r"   r   r2   r3   r   r   r   test_dict_valuesS  s    

zTestDictObject.test_dict_valuesc             C   s<   t dd }dddg}dddg}| |||dddg d	S )
z%
        Exercise iter(dict)
        c             S   sL   t tt}xt| |D ]\}}|||< qW g }x|D ]}|| q6W |S )N)r   r   r   r
   r1   r$   )r2   r3   r   r4   r5   rN   r   r   r   r   n  s    
z*TestDictObject.test_dict_iter.<locals>.foor   r   r/   g?g?g333333?N)r   r!   )r"   r   r2   r3   r   r   r   test_dict_iterj  s    

zTestDictObject.test_dict_iterc          
   C   sL   t dd }dddg}dddg}| |||ddd	dd
gdddddg dS )z,
        Exercise operator.contains
        c             S   sP   t tt}xt| |D ]\}}|||< qW g }x|D ]}|||k q6W |S )N)r   r   r   r
   r1   r$   )r2   r3   Z	checklistr   r4   r5   rN   r   r   r   r     s    
z.TestDictObject.test_dict_contains.<locals>.foor   r   r/   g?g?g333333?r6   r   TFN)r   r!   )r"   r   r2   r3   r   r   r   test_dict_contains  s    

z!TestDictObject.test_dict_containsc             C   sN   t dd }ttd}dd t|D }|||}| |tt|| dS )z$
        Exercise dict.copy
        c             S   s<   t tt}xt| |D ]\}}|||< qW t|  S )N)r   r   r   r
   r1   rP   copyrM   )r2   r3   r   r4   r5   r   r   r   r     s    z*TestDictObject.test_dict_copy.<locals>.foorA   c             S   s   g | ]\}}||d   qS )r    r   ).0r   xr   r   r   
<listcomp>  s    z1TestDictObject.test_dict_copy.<locals>.<listcomp>N)r   rP   r   	enumerater!   r1   )r"   r   r2   r3   rN   r   r   r   test_dict_copy  s
    
zTestDictObject.test_dict_copyc             C   s   t dd }| | d dS )z*
        Exercise dict.setdefault
        c              S   s\   t tt} | dd | d}d| d< | d}d| d< | dd | d}|||fS )Nr   g333333?gffffff@g333333@r   g      @)r   r   r   r
   
setdefaultr%   )r   abcr   r   r   r     s    


z0TestDictObject.test_dict_setdefault.<locals>.foo)g333333?gffffff@g333333@N)r   r!   )r"   r   r   r   r   test_dict_setdefault  s    z#TestDictObject.test_dict_setdefaultc             C   sh   t dd }| |ddddd | |ddddd | |ddddd | |ddddd d	S )
z2
        Exercise dict.__eq__ and .__ne__
        c             S   sd   t tt}t tt}xt| D ]}|| ||< q"W xt|D ]}|| ||< q@W ||k||kfS )N)r   r   r   r
   r   )naZnbZfaZfbdadbr   r   r   r   r     s    z.TestDictObject.test_dict_equality.<locals>.foor*   r/   )TFg@)FT   N)r   r!   )r"   r   r   r   r   test_dict_equality  s
    z!TestDictObject.test_dict_equalityc             C   s  t dd }dddg}dddg}dddg}dddg}| ||||| dddg}dddg}ddddg}ddddg}| ||||| dddg}dddg}dddg}dddg}| ||||| dddg}dddg}dddg}dddg}| ||||| dS )	z&
        Exercise dict.__eq__
        c             S   sl   t tt}t tt}x$tt| D ]}|| || | < q&W x$tt|D ]}|| ||| < qLW ||kS )N)r   r   r   r
   r   r	   r   r   )akavbkbvrc   rd   r   r   r   r   r     s    z3TestDictObject.test_dict_equality_more.<locals>.foor   r   r/   r6   r   N)r   
assertTrueassertFalse)r"   r   rg   rh   ri   rj   r   r   r   test_dict_equality_more  s*    













z&TestDictObject.test_dict_equality_morec             C   s0   t dd }| |dd | |dd dS )z&
        Exercise dict.__eq__
        c             S   s.   t tt}xt| D ]}|||< qW ||kS )N)r   r   r   r
   r   )rb   r_   rc   r   r   r   r   r     s    z8TestDictObject.test_dict_equality_diff_type.<locals>.foor*   r   )r   N)r   rl   )r"   r   r   r   r   test_dict_equality_diff_type  s    z+TestDictObject.test_dict_equality_diff_typec                st   t dd t fdd}ttt t  fdd}|d}| |jd ||}td}| || d	S )
zB
        Exercise dictobject.{_as_meminfo, _from_meminfo}
        c             s   s,   x&t | D ]}|||d d  fV  q
W d S )Nr   r    )r   )nelemr   r   r   r   make_content  s    z>TestDictObject.test_dict_to_from_meminfo.<locals>.make_contentc                s4   t tt}x | D ]\}}|||< qW t |S )N)r   r   r   r
   Z_as_meminfo)ro   r   r4   r5   )rp   r   r   boxer  s    z7TestDictObject.test_dict_to_from_meminfo.<locals>.boxerc                s   t |  }t| S )N)r   Z_from_meminforP   rM   )mir   )dcttyper   r   unboxer  s    z9TestDictObject.test_dict_to_from_meminfo.<locals>.unboxerr*   r   N)	r   r   DictTyper   r
   r!   ZrefcountrP   rC   )r"   rq   rt   rr   gotZexpectedr   )rs   rp   r   test_dict_to_from_meminfo  s    z(TestDictObject.test_dict_to_from_meminfoc          	   C   s@   t dd }| t}|d W d Q R X | dt|j d S )Nc             S   s8   t tt}xt| D ]}|d ||< qW |d}|S )Nr   y              ?)r   r   r   r
   r   r%   )r   r   r   zr   r   r   r   ,  s
    
z8TestDictObject.test_001_cannot_downcast_key.<locals>.foor*   z&cannot safely cast complex128 to int32)r   r9   r   assertInstr	exception)r"   r   raisesr   r   r   test_001_cannot_downcast_key+  s    	z+TestDictObject.test_001_cannot_downcast_keyc          	   C   s@   t dd }| t}|d W d Q R X | dt|j d S )Nc             S   s>   t tt}xt| D ]}|d ||< qW |d|  d}|S )Nr   r   y              ?)r   r   r   r
   r   r%   )r   r   r   rx   r   r   r   r   =  s
    z<TestDictObject.test_002_cannot_downcast_default.<locals>.foor*   z(cannot safely cast complex128 to float64)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r    test_002_cannot_downcast_default<  s    	z/TestDictObject.test_002_cannot_downcast_defaultc          	   C   s@   t dd }| t}|d W d Q R X | dt|j d S )Nc             S   s8   t tt}xt| D ]}|d ||< qW |d}|S )Nr   g333333@)r   r   r   r
   r   r%   )r   r   r   rx   r   r   r   r   N  s
    
z8TestDictObject.test_003_cannot_downcast_key.<locals>.foor*   z#cannot safely cast float64 to int32)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r   test_003_cannot_downcast_keyM  s    
z+TestDictObject.test_003_cannot_downcast_keyc          	   C   s>   t dd }| t}|  W d Q R X | dt|j d S )Nc              S   s   t tt} d| d< d S )Ng      @y              ?)r   r   r   r
   )r   r   r   r   r   `  s    z8TestDictObject.test_004_cannot_downcast_key.<locals>.fooz&cannot safely cast complex128 to int32)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r   test_004_cannot_downcast_key_  s    z+TestDictObject.test_004_cannot_downcast_keyc          	   C   s>   t dd }| t}|  W d Q R X | dt|j d S )Nc              S   s   t tt} d| d< d S )Ny              ?r   )r   r   r   r
   )r   r   r   r   r   n  s    z:TestDictObject.test_005_cannot_downcast_value.<locals>.fooz(cannot safely cast complex128 to float64)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r   test_005_cannot_downcast_valuem  s    z-TestDictObject.test_005_cannot_downcast_valuec          	   C   s>   t dd }| t}|  W d Q R X | dt|j d S )Nc              S   s   t tt} | d  d S )Ng      '@)r   r   r   r
   )r   r   r   r   r   |  s    z8TestDictObject.test_006_cannot_downcast_key.<locals>.fooz#cannot safely cast float64 to int32)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r   test_006_cannot_downcast_key{  s    z+TestDictObject.test_006_cannot_downcast_keyl        zPython 3, 64 bit test onlyc             C   s>   t dd }d\}}|||\}}| || | || d S )Nc             S   sT   t tt}td}td}t|t|ks4t| ||< |||< || || fS )Nl    r   )r   r   r   r
   npZuint64hashAssertionError)Zv1Zv2r   Zc1Zc2r   r   r   r     s    

z5TestDictObject.test_007_collision_checks.<locals>.foo)g      $@g      4@)r   r!   )r"   r   r^   r_   rY   yr   r   r   test_007_collision_checks  s
    
z(TestDictObject.test_007_collision_checksc             C   s\   t dd }d}||\}}| |dd tt|D  | |dd tt|D  d S )Nc             S   sp   t tt}xt| D ]}|d ||< qW g }g }x4t| D ](}| }||d  ||d  q<W ||fS )Nr   r   )r   r   r   r
   r   r<   r$   )r   r   r   r2   r3   tmpr   r   r   r     s    z1TestDictObject.test_008_lifo_popitem.<locals>.foor*   c             S   s   g | ]}|qS r   r   )rX   rY   r   r   r   rZ     s    z8TestDictObject.test_008_lifo_popitem.<locals>.<listcomp>c             S   s   g | ]}|d  qS )r   r   )rX   rY   r   r   r   rZ     s    )r   r!   reversedr   )r"   r   rx   ZgkZgvr   r   r   test_008_lifo_popitem  s
    z$TestDictObject.test_008_lifo_popitemc          	   C   s>   t dd }| t}|  W d Q R X | dt|j d S )Nc              S   s,   t tt} d| d< d| d< | dd d S )Ng      @r   g      @r   re   y              (@)r   r   r   r
   rF   )r   r   r   r   r     s    z<TestDictObject.test_010_cannot_downcast_default.<locals>.fooz(cannot safely cast complex128 to float64)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r    test_010_cannot_downcast_default  s    z/TestDictObject.test_010_cannot_downcast_defaultc          	   C   s>   t dd }| t}|  W d Q R X | dt|j d S )Nc              S   s*   t tt} d| d< d| d< | d d S )Ng      @r   g      @r   y              &@)r   r   r   r
   rF   )r   r   r   r   r     s    z8TestDictObject.test_011_cannot_downcast_key.<locals>.fooz&cannot safely cast complex128 to int32)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r   test_011_cannot_downcast_key  s    z+TestDictObject.test_011_cannot_downcast_keyc          	   C   s>   t dd }| t}|  W d Q R X | dt|j d S )Nc              S   s   t tt} d| d< d| kS )Ng      @r   y              ?)r   r   r   r
   )r   r   r   r   r     s    z8TestDictObject.test_012_cannot_downcast_key.<locals>.fooz&cannot safely cast complex128 to int32)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r   test_012_cannot_downcast_key  s    z+TestDictObject.test_012_cannot_downcast_keyc             C   s   t dd }| |  d S )Nc              S   s   t tt} d| kS )Nr   )r   r   r   r
   )r   r   r   r   r     s    z8TestDictObject.test_013_contains_empty_dict.<locals>.foo)r   rl   )r"   r   r   r   r   test_013_contains_empty_dict  s    z+TestDictObject.test_013_contains_empty_dictc             C   s   t dd }| |  d S )Nc              S   s   t tt} d| kS )Nr   )r   r   r   r
   )r   r   r   r   r     s    z<TestDictObject.test_014_not_contains_empty_dict.<locals>.foo)r   rk   )r"   r   r   r   r    test_014_not_contains_empty_dict  s    z/TestDictObject.test_014_not_contains_empty_dictc             C   s(   t dd }d}| |||df d S )Nc             S   sJ   t tt}xt| D ]}|d ||< qW t|}|  t|}||fS )Nr   )r   r   r   r
   r   r   rK   )r   r   r   rY   r   r   r   r   r     s    z/TestDictObject.test_015_dict_clear.<locals>.foor*   r   )r   r!   )r"   r   mr   r   r   test_015_dict_clear  s    
z"TestDictObject.test_015_dict_clearc          	   C   s>   t dd }| t}|  W d Q R X | dt|j d S )Nc              S   s   t tt} | dd d S )Ny              ?g      (@)r   r   r   r
   r]   )r   r   r   r   r     s    z8TestDictObject.test_016_cannot_downcast_key.<locals>.fooz&cannot safely cast complex128 to int32)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r   test_016_cannot_downcast_key   s    z+TestDictObject.test_016_cannot_downcast_keyc          	   C   s>   t dd }| t}|  W d Q R X | dt|j d S )Nc              S   s   t tt} | dd d S )Nr   y              (@)r   r   r   r
   r]   )r   r   r   r   r     s    z<TestDictObject.test_017_cannot_downcast_default.<locals>.fooz(cannot safely cast complex128 to float64)r   r9   r   ry   rz   r{   )r"   r   r|   r   r   r    test_017_cannot_downcast_default  s    z/TestDictObject.test_017_cannot_downcast_defaultc             C   s6   t dd }| \}}| || | |ddg d S )Nc              S   sP   t tt} d| d< |  }d| d< |  }dd |D }dd |D }||fS )Ng      (@re   g      "@   c             S   s   g | ]}|qS r   r   )rX   rY   r   r   r   rZ   &  s    zLTestDictObject.test_018_keys_iter_are_views.<locals>.foo.<locals>.<listcomp>c             S   s   g | ]}|qS r   r   )rX   rY   r   r   r   rZ   '  s    )r   r   r   r
   r2   )r   k1k2Zrk1Zrk2r   r   r   r     s    z8TestDictObject.test_018_keys_iter_are_views.<locals>.foore   r   )r   r!   )r"   r   r^   r_   r   r   r   test_018_keys_iter_are_views  s    
z+TestDictObject.test_018_keys_iter_are_viewsc             C   s   t dd }t|  d S )Nc              S   s.   t tt} d| d< d| d< |  dh@ }|S )Ng      (@re   g      "@r      )r   r   r   r
   r2   )r   r   r   r   r   r   2  s
    z$TestDictObject.test_019.<locals>.foo)r   print)r"   r   r   r   r   test_019/  s    zTestDictObject.test_019c             C   s:   t dd }| \}}| |ddddg | |d d S )Nc              S   sZ   t tjt} d| d< d| d< d| d< d| d< g }x|  D ]}|| q<W || d fS )	Ng      ?r^   g       @r_   g      @r`   g      @r   )r   r   r   unicode_typer
   rM   r$   )r   rN   rY   r   r   r   r   >  s    z/TestDictObject.test_020_string_key.<locals>.foo)r^   g      ?)r_   g       @)r`   g      @)r   r6   g      ?)r   r!   )r"   r   rM   rc   r   r   r   test_020_string_key<  s    
z"TestDictObject.test_020_string_keyc             C   s(   t dd }| | dd dfg d S )Nc              S   sP   t tjt} g }xtdD ]}|d qW d|}d| |< t| 	 }|S )Ni'  r^    g      ?)
r   r   r   r   r
   r   r$   joinrP   rM   )r   r   r   srN   r   r   r   r   P  s    
z1TestDictObject.test_021_long_str_key.<locals>.foor^   i'  r   )r   r!   )r"   r   r   r   r   test_021_long_str_keyN  s    
z$TestDictObject.test_021_long_str_keyc             C   sL   t dd }| \}}}| |ddg | |ddg | |ddg d S )Nc              S   s   t tt} | }d| d< d|d< t tt}d|d< d|d< | }|} dd |  D }d	d | D }d
d | D }|||fS )Ng      (@r   g      ,@r   g      Y@g     @@c             S   s   g | ]}|qS r   r   )rX   rY   r   r   r   rZ   i  s    zJTestDictObject.test_022_references_juggle.<locals>.foo.<locals>.<listcomp>c             S   s   g | ]}|qS r   r   )rX   rY   r   r   r   rZ   j  s    c             S   s   g | ]}|qS r   r   )rX   rY   r   r   r   rZ   k  s    )r   r   r   r
   rM   )r   efr   r   k3r   r   r   r   ]  s    z6TestDictObject.test_022_references_juggle.<locals>.foo)r   g      Y@)r   g     @@)r   r   )r      )r   r!   )r"   r   r   r   r   r   r   r   test_022_references_juggle\  s
    z)TestDictObject.test_022_references_jugglec             C   s"   t dd }| | ddg d S )Nc                 s0   t tt  fdd} |   dd   D S )Nc                  s   d d< d d< d S )Ng      (@r   g      ,@r   r   r   )r   r   r   bary  s    z9TestDictObject.test_023_closure.<locals>.foo.<locals>.barc             S   s   g | ]}|qS r   r   )rX   rY   r   r   r   rZ   }  s    z@TestDictObject.test_023_closure.<locals>.foo.<locals>.<listcomp>)r   r   r   r
   r2   )r   r   )r   r   r   u  s    z,TestDictObject.test_023_closure.<locals>.foor   r   )r   r!   )r"   r   r   r   r   test_023_closuret  s    
zTestDictObject.test_023_closureN)6__name__
__module____qualname__r#   r,   r0   r;   r=   rE   rG   rI   rJ   rL   rQ   rR   rT   rU   rV   r\   ra   rf   rm   rn   rw   r}   r~   r   r   r   r   r   
skipUnlessr   r   sysmaxsizer   r   r   r   r   r   r   r   r   r   r   ZexpectedFailurer   skip_py2r   r   r   r   r   r   r   r   r      sX   )$"+		r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestDictTypeCastingc             C   s   t || d S )N)r   _sentry_safe_cast)r"   fromtytotyr   r   r   
check_good  s    zTestDictTypeCasting.check_goodc          	   C   sB   |  t}t|| W d Q R X | djf t t|j d S )Nz%cannot safely cast {fromty} to {toty})	r9   r   r   r   ry   formatlocalsrz   r{   )r"   r   r   r|   r   r   r   	check_bad  s
    zTestDictTypeCasting.check_badc             C   sd   |  tjtj |  tjtj |  tjtj |  tjtj | tjtj |  tj	tj d S )N)
r   r   r   r	   r
   
complex128r   r   	complex64Zint8)r"   r   r   r   test_cast_int_to  s    z$TestDictTypeCasting.test_cast_int_toc             C   s4   |  tjtj |  tjtj |  tjtj d S )N)r   r   r	   r
   r   r   )r"   r   r   r   test_cast_float_to  s    z&TestDictTypeCasting.test_cast_float_toc             C   s4   |  tjtj |  tjtj |  tjtj d S )N)r   r   Zbooleanr   r
   r   )r"   r   r   r   test_cast_bool_to  s    z%TestDictTypeCasting.test_cast_bool_toN)r   r   r   r   r   r   r   r   r   r   r   r   r     s
   r   c               @   s>   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd ZdS )TestTypedDictc       	      C   s  t tt}| t|d d|d< d|d< d|d< | t|d | t| dddg x4tt|	 dddgD ]\}}| j
||dd qxW | 
|d d | j
|d ddd | j
|d ddd |d= | t|d | |d |dd	 |dd
 | |d d	 | j
|d ddd |ddd | 
|d d | 
|d d | d|k t| }| t|t| | 
|dd t|}| \}}| t||d  | ||k | }| || | t| t|  d S )Nr   r   gffffff@r   g333333@r/   r6   )Zplacesr       r(      )r6   r(   )r   emptyr   r	   r!   r   rP   r2   r1   rS   ZassertAlmostEqualZassertIsNoner%   r]   updaterk   rD   rM   rF   r<   rW   )	r"   r   rY   r   Zpydro   r4   r5   Zcopiedr   r   r   
test_basic  sB    "zTestTypedDict.test_basicc             C   s`   dd t tdtddD }ttt}x| D ]\}}|||< q4W t|}| || d S )Nc             S   s   i | ]\}}t ||qS r   )float)rX   r4   r5   r   r   r   
<dictcomp>  s    z5TestTypedDict.test_copy_from_dict.<locals>.<dictcomp>r*   rA   )	r1   r   r   r   r   r
   rM   rD   r!   )r"   expectnbdr4   r5   rv   r   r   r   test_copy_from_dict  s    z!TestTypedDict.test_copy_from_dictc             C   s6   t dd }t dd }| }||}| |d d S )Nc              S   s   t tt} d| d< | S )NgGz?r   )r   r   r   r
   )r   r   r   r   producer  s    z-TestTypedDict.test_compiled.<locals>.producerc             S   s   | d S )Nr   r   )r   r   r   r   consumer  s    z-TestTypedDict.test_compiled.<locals>.consumergGz?)r   r!   )r"   r   r   r   valr   r   r   test_compiled  s
    zTestTypedDict.test_compiledFc             C   s   t tt}i }d|d< d|d< |r*| jn| j}||||| d|d< d|d< ||||| x*tddD ]}|d ||< |d ||< qpW ||||| |r| ||d d S )Nr   r   r/   r*   rA   ru   )r   r   r   ry   r!   r   rk   
startswith)r"   Zstrfnprefixr   r   Zcheckerr   r   r   r   check_stringify  s    zTestTypedDict.check_stringifyc             C   s   | j tdd d S )NT)r   )r   repr)r"   r   r   r   	test_repr  s    zTestTypedDict.test_reprc             C   s   |  t d S )N)r   rz   )r"   r   r   r   test_str  s    zTestTypedDict.test_strN)F)	r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   1
r   c               @   sT   e Zd Zedd Zedd Zedd Zdd Zd	d
 Zedd Z	dd Z
dS )TestDictRefctTypesc             C   s   t dd }| }| |d d | |d d ddd}| t|| d|d< d|d< | |d d | t|| d	}x(t|D ]}||t|< ||t|< qW x$t|D ]}| |t| | qW | t|| d S )
Nc              S   s&   t jtjtjd} d| d< d| d< | S )N)key_type
value_type{   123iA  321)r   r   r   r   r   )r   r   r   r   r     s    
z,TestDictRefctTypes.test_str_key.<locals>.foor   r   r   iA  )r   r      r    )r   r!   rD   r   rz   )r"   r   r   r   ro   r   r   r   r   test_str_key  s"    

zTestDictRefctTypes.test_str_keyc             C   s   t dd }| }| |d d | |d d ddd}| t|| d|d< d|d< | t|| d	}x(t|D ]}t|||< t|||< qzW x$t|D ]}| || t| qW | t|| d S )
Nc              S   s&   t jtjtjd} d| d< d| d< | S )N)r   r   r   r   r   iA  )r   r   r   r   r   )r   r   r   r   r   $  s    
z,TestDictRefctTypes.test_str_val.<locals>.foor   r   iA  r   )r   iA  Z231r   )r   r!   rD   r   rz   )r"   r   r   r   ro   r   r   r   r   test_str_val"  s     

zTestDictRefctTypes.test_str_valc       	      C   s  t jd tjtjtjd d  d}g }|t jd |d |d< |t jd |d |d< x2t	dD ]&}|t j| |d |t
|< qpW | t|t| | |d |d	  | |d |d
  x&t| |D ]\}}| || qW | d|k | d|k |d= | d|k |d= | d|k |d	d= x2t	dD ]&}| \}}| }| || qVW |t jd |d |d< x(t| |D ]\}}| || qW d S )Nr   )r   r   r*   r+   ZmassrA   Zvelocityr    r   r   r   Z   Zlast)r   ZrandomZseedr   r   r   r   r
   r$   r   rz   r!   r   assertPreciseEqualr1   rS   rk   rl   r<   rF   )	r"   r   r   r   rv   Zexpr4   r5   wr   r   r   test_str_key_array_value@  s@    
z+TestDictRefctTypes.test_str_key_array_valuec             C   s   dd }t jtjttjtjd}dd }|||}|i t}| |t | t|| x(dD ] }||= ||= | t|| qbW d S )Nc              S   s   t jtjtjd} | S )N)r   r   )r   r   r   intp)r   r   r   r   inner_numba_dictm  s    
zITestDictRefctTypes.test_dict_of_dict_int_keyval.<locals>.inner_numba_dict)r   r   c             S   sF   x@t dD ]4}| }x t |d D ]}|d ||< q"W || |< q
W | S )Nr    r   i'  )r   )r   Zmake_inner_dictr   Zmidjr   r   r   usecasey  s    z@TestDictRefctTypes.test_dict_of_dict_int_keyval.<locals>.usecase)r   r/   r      r*   )r   r   r   r   ru   rD   assertIsInstancer!   )r"   r   r   r   rv   r   wherer   r   r   test_dict_of_dict_int_keyvall  s    


z/TestDictRefctTypes.test_dict_of_dict_int_keyvalc                s   t t jt j tdd t fdd}|d}d}xR| D ]F\}}|d7 }| t||d  x | D ]\}}| || qrW qDW | |d d S )Nc              S   s   t jtjtjd} | S )N)r   r   )r   r   r   r   )r   r   r   r   r     s    
zBTestDictRefctTypes.test_dict_of_dict_npm.<locals>.inner_numba_dictc                sR   t jtj d}x<t| D ]0} ||< x t|d D ]}||| |< q6W qW |S )N)r   r   r   )r   r   r   r   r   )countr   r   r   )inner_dict_tyr   r   r   r     s    
z5TestDictRefctTypes.test_dict_of_dict_npm.<locals>.foor    r   r   )r   ru   r   r   rM   r!   r   )r"   r   r   Zctr4   ZddZkkZvvr   )r   r   r   test_dict_of_dict_npm  s    z(TestDictRefctTypes.test_dict_of_dict_npmc             C   sL   t tjtj}d|d< tdd }||d | t|d | | d S )NZappler   c             S   s
   | d= d S )Nr   r   )rY   r4   r   r   r   r     s    z,TestDictRefctTypes.test_delitem.<locals>.foor   )	r   r   r   r   r   r   r!   r   rl   )r"   r   r   r   r   r   test_delitem  s    
zTestDictRefctTypes.test_delitemc             C   s   t tjtjd d  }tjdtjd|d< tdd }|| |jd j}| 	|tj
 | |tj | |d tjdtjdd  d S )Nr*   )Zdtyper   c             S   s   | d  d7  < | d S )Nr   r    r   )r   r   r   r   r     s    z8TestDictRefctTypes.test_getitem_return_type.<locals>.foor   r    )r   r   r   r   r   Zaranger   Znopython_signaturesZreturn_typer   ZArrayZassertNotIsInstanceZOptionalr   )r"   r   r   Zrettyr   r   r   test_getitem_return_type  s    z+TestDictRefctTypes.test_getitem_return_typeN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   ,""r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestDictForbiddenTypesc          	   C   s6   |  t}|  W d Q R X t|j}| || d S )N)r9   r   rz   r{   ry   )r"   r   callabler|   msgr   r   r   assert_disallow  s    
z&TestDictForbiddenTypes.assert_disallowc                s>   d  }| | fdd t fdd}| || d S )Nz{} as key is forbiddedc                  s   t  tjS )N)r   r   r   r   r   )tyr   r   <lambda>  s    z<TestDictForbiddenTypes.assert_disallow_key.<locals>.<lambda>c                  s   t  tj d S )N)r   r   r   r   r   )r   r   r   r     s    z7TestDictForbiddenTypes.assert_disallow_key.<locals>.foo)r   r   r   )r"   r   r   r   r   )r   r   assert_disallow_key  s    
z*TestDictForbiddenTypes.assert_disallow_keyc                s>   d  }| | fdd t fdd}| || d S )Nz{} as value is forbiddedc                  s   t tj S )N)r   r   r   r   r   )r   r   r   r     s    z>TestDictForbiddenTypes.assert_disallow_value.<locals>.<lambda>c                  s   t tj  d S )N)r   r   r   r   r   )r   r   r   r     s    z9TestDictForbiddenTypes.assert_disallow_value.<locals>.foo)r   r   r   )r"   r   r   r   r   )r   r   assert_disallow_value  s    
z,TestDictForbiddenTypes.assert_disallow_valuec             C   s(   |  ttj | ttj d S )N)r   r   ZListr   r   )r"   r   r   r   test_disallow_list  s    z)TestDictForbiddenTypes.test_disallow_listc             C   s(   |  ttj | ttj d S )N)r   r   Setr   r   )r"   r   r   r   test_disallow_set  s    z(TestDictForbiddenTypes.test_disallow_setN)r   r   r   r   r   r   r   r   r   r   r   r   r     s
   		r   )"__doc__Z
__future__r   r   r   r   Znumpyr   Znumbar   r   r   r   r	   r
   r   r   Znumba.typedr   Znumba.utilsr   Znumba.errorsr   Zsupportr   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s.         na O