U
    9%e                    @   s  d Z ddl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 ddlm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d
lmZmZmZmZmZ ddlmZ ddlm 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Z$G dd dee$Z%G dd dee$Z&G dd deeZ'G dd deZ(G dd deZ)G dd  d eZ*ed!ej+fgd"G d#d$ d$e,Z-G d%d& d&eZ.G d'd( d(eZ/G d)d* d*eZ0G d+d, d,eeZ1G d-d. d.eeZ2e3d/kre4  dS )0z
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.
    N)njit	literally)int32int64float32float64)typeof)Dict
dictobjectList_sentry_safe_cast)TypingError)types)TestCaseMemoryLeakMixinunittestoverride_configforbid_codegen)jitclass)overloadc                   @   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d7d8 Zd9d: Zd;d< Z d=d> Z!e"#e$j%d?kd@dAdB Z&dCdD Z'dEdF Z(dGdH Z)dIdJ Z*dKdL Z+dMdN Z,dOdP Z-dQdR Z.dSdT Z/dUdV Z0e"j1dWdX Z2dYdZ Z3d[d\ Z4d]d^ Z5d_d` Z6dadb Z7dcdd Z8dedf Z9dgS )hTestDictObjectc                 C   sX   t dd }| |ddd | |ddd | |ddd | |d	dd d
S )z%
        Exercise bool(dict)
        c                 S   s.   t tt}t| D ]}|d ||< qt|S N   )r
   new_dictr   r   rangeboolndi r!   Z/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_dictobject.pyfoo    s    z*TestDictObject.test_dict_bool.<locals>.foor   r   Fr   T   d   Nr   assertEqualselfr#   r!   r!   r"   test_dict_bool   s    
zTestDictObject.test_dict_boolc                 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   s.   t tt}t| D ]}|d ||< qt|S r   )r
   r   r   r   r   lenr   r!   r!   r"   r#   4   s    z,TestDictObject.test_dict_create.<locals>.foor   r$   r   r%   r&   Nr'   r)   r!   r!   r"   test_dict_create0   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   sD   t tt}t| D ]}|||< qg }|D ]}||| q*|S N)r
   r   r   r   r   appendget)r   targetsr   r    outputtr!   r!   r"   r#   H   s    
z)TestDictObject.test_dict_get.<locals>.foo   r   r   	   N
   r'   r)   r!   r!   r"   test_dict_getD   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   s.   t tt}t| D ]}|||< q|||S r.   r
   r   r   r   r   r0   )r   targetdefaultr   r    r!   r!   r"   r#   \   s    
z6TestDictObject.test_dict_get_with_default.<locals>.foor4      r7   Nr'   r)   r!   r!   r"   test_dict_get_with_defaultX   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 5 Q R X | t |||d
 W 5 Q R X dS )z1
        Exercise dictionary __getitem__
        c                 S   s0   t tt}t| |D ]\}}|||< q|| S r.   r
   r   r   r   zipkeysvalsr:   r   kvr!   r!   r"   r#   l   s    
z-TestDictObject.test_dict_getitem.<locals>.foor   r%   r<   皙?皙?333333?r      Nr   r(   assert_no_memory_leakdisable_leak_checkassertRaisesKeyErrorr*   r#   rA   rB   r!   r!   r"   test_dict_getitemh   s    
	

z TestDictObject.test_dict_getitemc                 C   sn   t dd }dddg}dddg}tdt|D ]:}| ||d	| |d	| ||d  ||d  f q.d	S )
.
        Exercise dictionary .popitem
        c                 S   s0   t tt}t| |D ]\}}|||< q| S r.   )r
   r   r   r   r?   popitemrA   rB   r   rC   rD   r!   r!   r"   r#      s    
z-TestDictObject.test_dict_popitem.<locals>.foor   r%   r<   rE   rF   rG   N)r   r   r,   r(   r*   r#   rA   rB   r    r!   r!   r"   test_dict_popitem   s    
	

z TestDictObject.test_dict_popitemc              	      s   t dd  t  fdd}dddg}dd	d
g}tt|D ].}| |||dd jtt||dd q<|   |   | 	t
 |||dd W 5 Q R X dS )rP   c                 S   s:   d\}}t |D ] }|  \}}||7 }||8 }q||fS )Nr   r   )r   rQ   )r   npopZkeysumZvalsum_rC   rD   r!   r!   r"   core   s    
z3TestDictObject.test_dict_popitem_many.<locals>.corec                    s2   t tt}t| |D ]\}}|||< q ||S r.   )r
   r   r   r?   )rA   rB   rV   r   rC   rD   rX   r!   r"   r#      s    
z2TestDictObject.test_dict_popitem_many.<locals>.foor   r%   r<   r6         )rV   rH   N)r   r   r,   r(   py_funcdictr?   rJ   rK   rL   rM   rS   r!   rY   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 5 Q R X dS )*
        Exercise dictionary .pop
        c                 S   s<   t tt}t| |D ]\}}|||< q||d t|fS r.   )r
   r   r   r   r?   popr,   r@   r!   r!   r"   r#      s    
z)TestDictObject.test_dict_pop.<locals>.foor   r%   r<   rE   rF   rG   )rE   r%   )rF   r%   )rG   r%   r   Nr<   c                  S   s   t tt} | dS )Nr   r
   r   r   r   r`   r   r!   r!   r"   r#      s    NrI   rN   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 )r_   c                 S   s6   d}|D ](}|||  |d t|  7 }|d9 }q|S )Nr   grh|?r%   )r`   r,   )r   popstotalrC   r!   r!   r"   rX      s
    
z/TestDictObject.test_dict_pop_many.<locals>.corec                    s2   t tt}t| |D ]\}}|||< q ||S r.   r>   )rA   rB   re   r   rC   rD   rY   r!   r"   r#      s    
z.TestDictObject.test_dict_pop_many.<locals>.foor   r%   r<   rE   rF   rG   r   r7   N)r   r(   r\   r]   r?   )r*   r#   rA   rB   re   r!   rY   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 5 Q R X d S )Nc                 S   s@   t tt}t| |D ]\}}|||< q||= t|||fS r.   )r
   r   r   r   r?   r,   r0   r@   r!   r!   r"   r#     s
    
z-TestDictObject.test_dict_delitem.<locals>.foor   r%   r<   rE   rF   rG   )r%   Nr   rI   rN   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   sD   t tt}t| |D ]\}}|||< qt|}|  |t|fS r.   )r
   r   r   r   r?   r,   clear)rA   rB   r   rC   rD   Zb4r!   r!   r"   r#      s    
z+TestDictObject.test_dict_clear.<locals>.foor   r%   r<   rE   rF   rG   )r<   r   Nr'   rN   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   sH   t tt}t| |D ]\}}|||< qg }| D ]}|| q4|S r.   )r
   r   r   r   r?   itemsr/   )rA   rB   r   rC   rD   outkvr!   r!   r"   r#   3  s    
z+TestDictObject.test_dict_items.<locals>.foor   r%   r<   rE   rF   rG   c                  S   s,   t tt} g }|  D ]}|| q|S r.   )r
   r   r   r   rk   r/   )r   rl   rm   r!   r!   r"   r#   G  s
    N)r   r(   listr?   rN   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   sH   t tt}t| |D ]\}}|||< qg }| D ]}|| q4|S r.   )r
   r   r   r   r?   rA   r/   rA   rB   r   rC   rD   rl   r!   r!   r"   r#   U  s    
z*TestDictObject.test_dict_keys.<locals>.foor   r%   r<   rE   rF   rG   Nr'   rN   r!   r!   r"   test_dict_keysQ  s    



zTestDictObject.test_dict_keysc                 C   s:   t dd }dddg}dddg}| |||t| d	S )
z+
        Exercise len(dict.keys())
        c                 S   s4   t tt}t| |D ]\}}|||< qt| S r.   )r
   r   r   r   r?   r,   rA   rR   r!   r!   r"   r#   l  s    
z.TestDictObject.test_dict_keys_len.<locals>.foor   r%   r<   rE   rF   rG   Nr   r(   r,   rN   r!   r!   r"   test_dict_keys_lenh  s    


z!TestDictObject.test_dict_keys_lenc                 C   s6   t dd }dddg}dddg}| |||| d	S )
z&
        Exercise dict.values
        c                 S   sH   t tt}t| |D ]\}}|||< qg }| D ]}|| q4|S r.   )r
   r   r   r   r?   valuesr/   rp   r!   r!   r"   r#     s    
z,TestDictObject.test_dict_values.<locals>.foor   r%   r<   rE   rF   rG   Nr'   rN   r!   r!   r"   test_dict_values|  s    



zTestDictObject.test_dict_valuesc                 C   s:   t dd }dddg}dddg}| |||t| d	S )
z-
        Exercise len(dict.values())
        c                 S   s4   t tt}t| |D ]\}}|||< qt| S r.   )r
   r   r   r   r?   r,   rt   rR   r!   r!   r"   r#     s    
z0TestDictObject.test_dict_values_len.<locals>.foor   r%   r<   rE   rF   rG   Nrr   rN   r!   r!   r"   test_dict_values_len  s    


z#TestDictObject.test_dict_values_lenc                 C   s:   t dd }dddg}dddg}| |||t| d	S )
z,
        Exercise len(dict.items())
        c                 S   s4   t tt}t| |D ]\}}|||< qt| S r.   )r
   r   r   r   r?   r,   rk   rR   r!   r!   r"   r#     s    
z/TestDictObject.test_dict_items_len.<locals>.foor   r%   r<   rE   rF   rG   N)r   assertPreciseEqualr,   rN   r!   r!   r"   test_dict_items_len  s    


z"TestDictObject.test_dict_items_lenc                 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   sD   t tt}t| |D ]\}}|||< qg }|D ]}|| q0|S r.   r
   r   r   r   r?   r/   rp   r!   r!   r"   r#     s    
z*TestDictObject.test_dict_iter.<locals>.foor   r%   r<   rE   rF   rG   Nr'   rN   r!   r!   r"   test_dict_iter  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   sH   t tt}t| |D ]\}}|||< qg }|D ]}|||k q0|S r.   ry   )rA   rB   Z	checklistr   rC   rD   rl   r!   r!   r"   r#     s    
z.TestDictObject.test_dict_contains.<locals>.foor   r%   r<   rE   rF   rG   rH   r   TFNr'   rN   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   s8   t tt}t| |D ]\}}|||< qt|  S r.   )r
   r   r   r   r?   rn   copyrk   rR   r!   r!   r"   r#     s    
z*TestDictObject.test_dict_copy.<locals>.foorZ   c                 S   s   g | ]\}}||d   qS )r&   r!   ).0r    xr!   r!   r"   
<listcomp>  s     z1TestDictObject.test_dict_copy.<locals>.<listcomp>N)r   rn   r   	enumerater(   r?   )r*   r#   rA   rB   rl   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   333333?ffffff@333333@r%   g      @)r
   r   r   r   
setdefaultr0   )r   abcr!   r!   r"   r#     s    


z0TestDictObject.test_dict_setdefault.<locals>.foo)r   r   r   Nr'   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   s\   t tt}t tt}t| D ]}|| ||< q t|D ]}|| ||< q:||k||kfS r.   r
   r   r   r   r   )nanbfaZfbdadbr    r!   r!   r"   r#     s    z.TestDictObject.test_dict_equality.<locals>.foor6   r<   )TFg@)FT   Nr'   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 )	&
        Exercise dict.__eq__
        c                 S   sd   t tt}t tt}tt| D ]}|| || | < q$tt|D ]}|| ||| < qF||kS r.   )r
   r   r   r   r   r   r   r,   )akavbkbvr   r   r    r!   r!   r"   r#   &  s    z3TestDictObject.test_dict_equality_more.<locals>.foor   r%   r<   rH   r   Nr   
assertTrueassertFalse)r*   r#   r   r   r   r   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 )r   c                 S   s*   t tt}t| D ]}|||< q||kS r.   r   )r   r   r   r    r!   r!   r"   r#   Q  s    
z8TestDictObject.test_dict_equality_diff_type.<locals>.foor6   r   r   Nr   r   r)   r!   r!   r"   test_dict_equality_diff_typeM  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(   t | D ]}|||d d  fV  qd S Nr   r&   r   )nelemr    r!   r!   r"   make_contenta  s    z>TestDictObject.test_dict_to_from_meminfo.<locals>.make_contentc                    s0   t tt} | D ]\}}|||< qt |S r.   )r
   r   r   r   Z_as_meminfo)r   r   rC   rD   )r   r!   r"   boxerf  s    
z7TestDictObject.test_dict_to_from_meminfo.<locals>.boxerc                    s   t |  }t| S r.   )r
   Z_from_meminforn   rk   )mir   )dcttyper!   r"   unboxero  s    z9TestDictObject.test_dict_to_from_meminfo.<locals>.unboxerr6   r   N)	r   r   DictTyper   r   r(   refcountrn   r\   )r*   r   r   r   gotexpectedr!   )r   r   r"   test_dict_to_from_meminfo]  s    
z(TestDictObject.test_dict_to_from_meminfoc              	   C   s@   t dd }| t}|d W 5 Q R X | dt|j d S )Nc                 S   s4   t tt}t| D ]}|d ||< q|d}|S )Nr                 ?r9   r   r   r    zr!   r!   r"   r#   |  s
    
z8TestDictObject.test_001_cannot_downcast_key.<locals>.foor6   &cannot safely cast complex128 to int32r   rL   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 5 Q R X | dt|j d S )Nc                 S   s:   t tt}t| D ]}|d ||< q|d|  d}|S )Nr   r%   r   r9   r   r!   r!   r"   r#     s
    z<TestDictObject.test_002_cannot_downcast_default.<locals>.foor6   (cannot safely cast complex128 to float64r   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 5 Q R X | dt|j d S )Nc                 S   s4   t tt}t| D ]}|d ||< q|d}|S )Nr   g333333@r9   r   r!   r!   r"   r#     s
    
z8TestDictObject.test_003_cannot_downcast_key.<locals>.foor6   #cannot safely cast float64 to int32r   r   r!   r!   r"   test_003_cannot_downcast_key  s    
	z+TestDictObject.test_003_cannot_downcast_keyc              	   C   s>   t dd }| t}|  W 5 Q R X | dt|j d S )Nc                  S   s   t tt} d| d< d S )N      @r   r
   r   r   r   rc   r!   r!   r"   r#     s    z8TestDictObject.test_004_cannot_downcast_key.<locals>.foor   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 5 Q R X | dt|j d S )Nc                  S   s   t tt} d| d< d S )Nr   r   r   rc   r!   r!   r"   r#     s    z:TestDictObject.test_005_cannot_downcast_value.<locals>.foor   r   r   r!   r!   r"   test_005_cannot_downcast_value  s    
z-TestDictObject.test_005_cannot_downcast_valuec              	   C   s>   t dd }| t}|  W 5 Q R X | dt|j d S )Nc                  S   s   t tt} | d  d S )Ng      '@r   rc   r!   r!   r"   r#     s    z8TestDictObject.test_006_cannot_downcast_key.<locals>.foor   r   r   r!   r!   r"   test_006_cannot_downcast_key  s    
z+TestDictObject.test_006_cannot_downcast_keyl        z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   npuint64hashAssertionError)v1Zv2r   c1c2r!   r!   r"   r#     s    

z5TestDictObject.test_007_collision_checks.<locals>.foo)g      $@g      4@r'   )r*   r#   r   r   r~   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   sh   t tt}t| D ]}|d ||< qg }g }t| D ](}| }||d  ||d  q6||fS )Nr   r   )r
   r   r   r   r   rQ   r/   )r   r   r    rA   rB   tmpr!   r!   r"   r#     s    z1TestDictObject.test_008_lifo_popitem.<locals>.foor6   c                 S   s   g | ]}|qS r!   r!   r}   r~   r!   r!   r"   r     s     z8TestDictObject.test_008_lifo_popitem.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r   r!   r   r!   r!   r"   r     s     )r   r(   reversedr   )r*   r#   r   Zgkgvr!   r!   r"   test_008_lifo_popitem  s    
z$TestDictObject.test_008_lifo_popitemc              	   C   s>   t dd }| t}|  W 5 Q R X | dt|j d S )Nc                  S   s,   t tt} d| d< d| d< | dd d S )N      @r   r   r   r                 (@rb   rc   r!   r!   r"   r#     s    z<TestDictObject.test_010_cannot_downcast_default.<locals>.foor   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 5 Q R X | dt|j d S )Nc                  S   s*   t tt} d| d< d| d< | d d S )Nr   r   r   r   y              &@rb   rc   r!   r!   r"   r#     s    z8TestDictObject.test_011_cannot_downcast_key.<locals>.foor   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 5 Q R X | dt|j d S )Nc                  S   s   t tt} d| d< d| kS )Nr   r   r   r   rc   r!   r!   r"   r#   !  s    z8TestDictObject.test_012_cannot_downcast_key.<locals>.foor   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 r   r   rc   r!   r!   r"   r#   0  s    z8TestDictObject.test_013_contains_empty_dict.<locals>.foor   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 r   r   rc   r!   r!   r"   r#   9  s    z<TestDictObject.test_014_not_contains_empty_dict.<locals>.foo)r   r   r)   r!   r!   r"    test_014_not_contains_empty_dict8  s    
z/TestDictObject.test_014_not_contains_empty_dictc                 C   s(   t dd }d}| |||df d S )Nc                 S   sF   t tt}t| D ]}|d ||< qt|}|  t|}||fS r   )r
   r   r   r   r   r,   ri   )r   r   r    r~   r   r!   r!   r"   r#   B  s    z/TestDictObject.test_015_dict_clear.<locals>.foor6   r   r'   )r*   r#   mr!   r!   r"   test_015_dict_clearA  s    
	z"TestDictObject.test_015_dict_clearc              	   C   s>   t dd }| t}|  W 5 Q R X | dt|j d S )Nc                  S   s   t tt} | dd d S )Nr         (@r
   r   r   r   r   rc   r!   r!   r"   r#   P  s    z8TestDictObject.test_016_cannot_downcast_key.<locals>.foor   r   r   r!   r!   r"   test_016_cannot_downcast_keyO  s    
z+TestDictObject.test_016_cannot_downcast_keyc              	   C   s>   t dd }| t}|  W 5 Q R X | dt|j d S )Nc                  S   s   t tt} | dd d S )Nr   r   r   rc   r!   r!   r"   r#   ^  s    z<TestDictObject.test_017_cannot_downcast_default.<locals>.foor   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 )Nr   r         "@   c                 S   s   g | ]}|qS r!   r!   r   r!   r!   r"   r   u  s     zLTestDictObject.test_018_keys_iter_are_views.<locals>.foo.<locals>.<listcomp>c                 S   s   g | ]}|qS r!   r!   r   r!   r!   r"   r   v  s     r
   r   r   r   rA   )r   k1k2Zrk1Zrk2r!   r!   r"   r#   n  s    z8TestDictObject.test_018_keys_iter_are_views.<locals>.foor   r   r'   )r*   r#   r   r   r!   r!   r"   test_018_keys_iter_are_viewsk  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 )Nr   r   r   r      r   )r   r   r!   r!   r"   r#     s
    z$TestDictObject.test_019.<locals>.foo)r   printr)   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   sV   t tjt} d| d< d| d< d| d< d| d< g }|  D ]}|| q:|| d fS )	N      ?r          @r         @r   g      @r   )r
   r   r   unicode_typer   rk   r/   )r   rl   r~   r!   r!   r"   r#     s    z/TestDictObject.test_020_string_key.<locals>.foo)r   r   )r   r   )r   r   )r   rH   r   r'   )r*   r#   rk   r   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   sL   t tjt} g }tdD ]}|d qd|}d| |< t| 	 }|S )N'  r    r   )
r
   r   r   r   r   r   r/   joinrn   rk   )r   r   r    srl   r!   r!   r"   r#     s    
z1TestDictObject.test_021_long_str_key.<locals>.foor   r   r   r'   r)   r!   r!   r"   test_021_long_str_key  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 )Nr   r         ,@r%         Y@     @@c                 S   s   g | ]}|qS r!   r!   r   r!   r!   r"   r     s     zJTestDictObject.test_022_references_juggle.<locals>.foo.<locals>.<listcomp>c                 S   s   g | ]}|qS r!   r!   r   r!   r!   r"   r     s     c                 S   s   g | ]}|qS r!   r!   r   r!   r!   r"   r     s     )r
   r   r   r   rk   )r   efr   r   k3r!   r!   r"   r#     s    z6TestDictObject.test_022_references_juggle.<locals>.foo)r   r   )r%   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 )Nr   r   r   r%   r!   r!   rc   r!   r"   bar  s    z9TestDictObject.test_023_closure.<locals>.foo.<locals>.barc                 S   s   g | ]}|qS r!   r!   r   r!   r!   r"   r     s     z@TestDictObject.test_023_closure.<locals>.foo.<locals>.<listcomp>r   r   r!   rc   r"   r#     s    z,TestDictObject.test_023_closure.<locals>.foor   r%   r'   r)   r!   r!   r"   test_023_closure  s    
	zTestDictObject.test_023_closurec                 C   s@   t dd }| | |  t dd }| | |  d S )Nc                  S   s   d} | d di}|d S )Nu   aሴr   r   r   r!   r   r   r!   r!   r"   r#     s    z9TestDictObject.test_024_unicode_getitem_keys.<locals>.fooc                  S   s   d} | d d di}|d S )Nu   abcሴr   r   r!   r   r!   r!   r"   r#     s    r   r(   r\   r)   r!   r!   r"   test_024_unicode_getitem_keys  s    

z,TestDictObject.test_024_unicode_getitem_keysc                    s2   t t jt jg t fdd}| |  d S )Nc                     sn   t  t} tjdgtjd}tjdgtjd}tjdgtjd}|d | |d |d f< |d |d f| kS )Nr<   ZdtypegGz@g(\u$@r   )r
   r   r   r   arrayr   r   )r   t1t2r   Zkeytyr!   r"   r#     s    z<TestDictObject.test_issue6570_alignment_padding.<locals>.foo)r   Tupler   r   r   r   r)   r!   r   r"    test_issue6570_alignment_padding  s    z/TestDictObject.test_issue6570_alignment_paddingc                 C   sl   d}dd }|}t  |}||}||}| || dd }|}t  |}||}||}| || dS )zD
        Tests dict.update works with various dictionaries.
        r6   c                 S   s2   dd t | D }dd t | D }|| |S )z@
            Test update with a regular dictionary.
            c                 S   s   i | ]}||d  qS r   r!   r}   r    r!   r!   r"   
<dictcomp>  s      z?TestDictObject.test_dict_update.<locals>.f1.<locals>.<dictcomp>c                 S   s   i | ]}d | |qS r<   r!   r  r!   r!   r"   r    s      r   updater   d1Zd2r!   r!   r"   f1  s    
z+TestDictObject.test_dict_update.<locals>.f1c                 S   s,   dddd}dd t | D }|| |S )zo
            Test update where one of the dictionaries
            is created as a Python literal.
            r%   rH      )r   r<   r4   c                 S   s   i | ]}d | |qS r  r!   r  r!   r!   r"   r    s      z?TestDictObject.test_dict_update.<locals>.f2.<locals>.<dictcomp>r  r  r!   r!   r"   f2  s    
z+TestDictObject.test_dict_update.<locals>.f2Nr'   )r*   r   r	  r\   Zcfuncr   r   r  r!   r!   r"   test_dict_update  s    	

zTestDictObject.test_dict_updateN):__name__
__module____qualname__r+   r-   r8   r=   rO   rT   r^   rd   rg   rh   rj   ro   rq   rs   ru   rv   rx   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   Z
skipUnlesssysmaxsizer   r   r   r   r   r   r   r   r   r   r   ZexpectedFailurer   r   r   r   r   r   r  r  r!   r!   r!   r"   r      sh   )$"+
		
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 r.   r   )r*   fromtytotyr!   r!   r"   
check_good  s    zTestDictTypeCasting.check_goodc              	   C   s@   |  t}t|| W 5 Q R X | djf t t|j d S )Nz%cannot safely cast {fromty} to {toty})rL   r   r   r   formatlocalsr   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 r.   )
r  r   r   r   r   
complex128r   r  	complex64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 r.   )r  r   r   r   r  r  r  r!   r!   r"   test_cast_float_to0  s    z&TestDictTypeCasting.test_cast_float_toc                 C   s4   |  tjtj |  tjtj |  tjtj d S r.   )r  r   booleanr   r   r  r  r!   r!   r"   test_cast_bool_to5  s    z%TestDictTypeCasting.test_cast_bool_toN)r  r  r  r  r  r  r  r   r!   r!   r!   r"   r    s
   r  c                   @   sF   e Zd Zd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 tt|	 dddgD ]\}}| j
||dd qv| 
|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   r   r%   r   r<   rH   )Zplacesr&      r4   r
  )rH   r4   )r	   emptyr   r   r(   r,   rn   rA   r?   rt   ZassertAlmostEqualZassertIsNoner0   r   r  r   r]   rk   r`   rQ   r|   )	r*   r   r~   r   Zpydr   rC   rD   copiedr!   r!   r"   
test_basic<  sB     zTestTypedDict.test_basicc                 C   s\   dd t tdtddD }ttt}| D ]\}}|||< q2t|}| || d S )Nc                 S   s   i | ]\}}|t |qS r!   float)r}   rC   rD   r!   r!   r"   r  n  s      z5TestTypedDict.test_copy_from_dict.<locals>.<dictcomp>r6   rZ   )	r?   r   r	   r#  r   r   rk   r]   r(   )r*   expectnbdrC   rD   r   r!   r!   r"   test_copy_from_dictm  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 )NGz?r   )r	   r#  r   r   rc   r!   r!   r"   producerv  s    z-TestTypedDict.test_compiled.<locals>.producerc                 S   s   | d S r   r!   rc   r!   r!   r"   consumer|  s    z-TestTypedDict.test_compiled.<locals>.consumerr+  r'   )r*   r,  r-  r   valr!   r!   r"   test_compiledu  s    

zTestTypedDict.test_compiledc                 C   s>   t jttjtjgtd}d|d< | |d |d d S )Nkey_type
value_typei90  )r   r   )r	   r#  r   r   Zuint32r   r(   r0   r*   r   r!   r!   r"   test_gh7908  s    zTestTypedDict.test_gh7908Fc                 C   s   t tt}i }d|d< d|d< |r*| jn| j}||||| d|d< d|d< ||||| tddD ]}|d ||< |d ||< qn||||| |r| ||d d S )Nr%   r   r<   r6   rZ   r   )r	   r#  r   r   r(   r   r   
startswith)r*   Zstrfnprefixr)  r   checkerr    r!   r!   r"   check_stringify  s    zTestTypedDict.check_stringifyc                 C   s   | j tdd d S )NT)r6  )r8  reprr  r!   r!   r"   	test_repr  s    zTestTypedDict.test_reprc                 C   s   |  t d S r.   )r8  r   r  r!   r!   r"   test_str  s    zTestTypedDict.test_strN)F)
r  r  r  r%  r*  r/  r4  r8  r:  r;  r!   r!   r!   r"   r!  ;  s   1	
r!  c                   @   s   e Zd Zdd ZdS )DictIterableCtorc                 C   s  t dd }t dd }t dd }t dd }t d	d
 }t dd }t dd }t dd }dd }	|ddg|	ddddf|ddg|	ddddf|ddg|	ddddf|ddg|	ddddf|ddg|	ddddf|dg|	dddf|d|	ddig|	d dif|d|	ddig|	d|	ddiif|dtdd!d"gg|	dtdd!d"giff	}
|
D ]4\}}}| jr|| }n
|j| }| || qdd S )#Nc                 S   s   t t| |}|S r.   r	   r?   )r   r   r   r!   r!   r"   func1  s    z>DictIterableCtor.test_iterable_type_constructor.<locals>.func1c                 S   s   t d}tt||S ra   )r   r	   r?   Za_r   r   r!   r!   r"   func2  s    z>DictIterableCtor.test_iterable_type_constructor.<locals>.func2c                 S   s   dddg}t t||S )Nr   r   r%   r=  r?  r!   r!   r"   func3  s    
z>DictIterableCtor.test_iterable_type_constructor.<locals>.func3c                 S   s   t | |}tt | t || S r.   )r?   r	   r   r   r   r!   r!   r"   func4  s    
z>DictIterableCtor.test_iterable_type_constructor.<locals>.func4c                 S   s   t tt| ||S r.   r=  r   r   r!   r!   r"   func5  s    z>DictIterableCtor.test_iterable_type_constructor.<locals>.func5c                 S   s   t | S r.   r	   )rk   r!   r!   r"   func6  s    z>DictIterableCtor.test_iterable_type_constructor.<locals>.func6c                 S   s   t | |iS r.   rF  )rC   rD   r!   r!   r"   func7  s    z>DictIterableCtor.test_iterable_type_constructor.<locals>.func7c                 S   s   t  }||| < |S r.   rF  rC   rD   r   r!   r!   r"   func8  s    z>DictIterableCtor.test_iterable_type_constructor.<locals>.func8c                 S   s$   t  }|  D ]\}}|||< q|S r.   )r	   rk   )Zpy_dictr   rC   rD   r!   r!   r"   	_get_dict  s    
zBDictIterableCtor.test_iterable_type_constructor.<locals>._get_dictr   r   r%   abcr   r   r   )r   r   r   )r   r   r   )r%   r   r%   )rN  rO  rP  )r   r   )r<   r   r   r<   keyr   rC   r%   r<   )r   r   jit_enabledr\   rw   )r*   r>  r@  rA  rC  rE  rG  rH  rJ  rK  rB   funcargsr   r   r!   r!   r"   test_iterable_type_constructor  sP    













z/DictIterableCtor.test_iterable_type_constructorN)r  r  r  rW  r!   r!   r!   r"   r<    s   r<  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestDictIterableCtorJitc                 C   s
   d| _ d S )NTrT  r  r!   r!   r"   setUp  s    zTestDictIterableCtorJit.setUpc              	   C   s2   t dd }d}| t| |  W 5 Q R X d S )Nc                   S   s   t dS ra   rF  r!   r!   r!   r"   ctor  s    zDTestDictIterableCtorJit.test_exception_no_iterable_arg.<locals>.ctor!.*No implementation of function.*r   assertRaisesRegexr   r*   r[  msgr!   r!   r"   test_exception_no_iterable_arg  s
    
z6TestDictIterableCtorJit.test_exception_no_iterable_argc              	   C   s2   t dd }d}| t| |  W 5 Q R X d S )Nc                   S   s   t dddS )Nr%   rH   rR  rF  r!   r!   r!   r"   r[    s    zATestDictIterableCtorJit.test_exception_dict_mapping.<locals>.ctorr\  r]  r_  r!   r!   r"   test_exception_dict_mapping  s
    
z3TestDictIterableCtorJit.test_exception_dict_mappingc              	   C   s2   t dd }d}| t| |  W 5 Q R X d S )Nc                   S   s   t dS )NrQ  )r%   r   r<   rF  r!   r!   r!   r"   r[    s    z<TestDictIterableCtorJit.test_exception_setitem.<locals>.ctorr\  r]  r_  r!   r!   r"   test_exception_setitem  s
    
z.TestDictIterableCtorJit.test_exception_setitemN)r  r  r  rZ  ra  rb  rd  r!   r!   r!   r"   rX    s   		rX  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestDictIterableCtorNoJitc                 C   s
   d| _ d S )NFrY  r  r!   r!   r"   rZ    s    zTestDictIterableCtorNoJit.setUpc              	   C   s*   d}|  t| tdd W 5 Q R X d S )Nz%Dict expect at most 1 argument, got 2r   r%   r^  r   r	   r*   r`  r!   r!   r"   test_exception_nargs  s    z.TestDictIterableCtorNoJit.test_exception_nargsc              	   C   s,   d}|  t| tddi W 5 Q R X d S )Nz$.*dict\(mapping\) is not supported.*r   r%   rf  rg  r!   r!   r"   test_exception_mapping_ctor  s    z5TestDictIterableCtorNoJit.test_exception_mapping_ctorc              	   C   s(   d}|  t| td W 5 Q R X d S )Nz.*object is not iterable.*r<   rf  rg  r!   r!   r"   test_exception_non_iterable_arg  s    z9TestDictIterableCtorNoJit.test_exception_non_iterable_argc              	   C   s(   d}|  t| td W 5 Q R X d S )Nz6.*dictionary update sequence element #1 has length 3.*rc  )r^  
ValueErrorr	   rg  r!   r!   r"   rd  #  s    z0TestDictIterableCtorNoJit.test_exception_setitemN)r  r  r  rZ  rh  ri  rj  rd  r!   r!   r!   r"   re    s
   re  c                   @   sL   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S )TestDictRefctTypesc                 C   s   t dd }| }| |d d | |d d ddd}| t|| d|d< d|d< | |d d | t|| d	}t|D ]}||t|< ||t|< qt|D ]}| |t| | q| t|| d S )
Nc                  S   s&   t jtjtjd} d| d< d| d< | S )Nr0  {   123A  321)r	   r#  r   r   r   rc   r!   r!   r"   r#   ,  s    z,TestDictRefctTypes.test_str_key.<locals>.foorn  rm  rp  ro  )rn  rp     r&   r   r(   r]   r   r   r*   r#   r   r(  r   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	}t|D ]}t|||< t|||< qxt|D ]}| || t| q| t|| d S )
Nc                  S   s&   t jtjtjd} d| d< d| d< | S )Nr0  rn  rm  rp  ro  )r	   r#  r   r   r   rc   r!   r!   r"   r#   J  s    z,TestDictRefctTypes.test_str_val.<locals>.foorm  rn  ro  rp  rm  ro  Z231r   rr  rs  r!   r!   r"   test_str_valI  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< t	dD ]&}|t j| |d |t
|< qn| t|t| | |d |d	  | |d |d
  t| |D ]\}}| || q| d|k | d|k |d= | d|k |d= | d|k |d	d= t	dD ]&}| \}}| }| || qL|t jd |d |d< t| |D ]\}}| || qd S )Nrm  r0  r6   r7   ZmassrZ   velocityr&   r   r   r%   Z   last)r   randomseedr	   r#  r   r   r   r/   r   r   r(   r,   rw   r?   rt   r   r   rQ   r`   )	r*   r   r(  r    r   exprC   rD   wr!   r!   r"   test_str_key_array_valuef  sB    
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|| dD ] }||= ||= | t|| q`d S )Nc                  S   s   t jtjtjd} | S Nr0  r	   r#  r   intprc   r!   r!   r"   inner_numba_dict  s
    zITestDictRefctTypes.test_dict_of_dict_int_keyval.<locals>.inner_numba_dictr0  c                 S   s>   t dD ]0}| }t |d D ]}|d ||< q|| |< q| S )Nr&   r   r   r   )r   Zmake_inner_dictr    midjr!   r!   r"   usecase  s    
z@TestDictRefctTypes.test_dict_of_dict_int_keyval.<locals>.usecase)r   r<   r
     r6   )r	   r#  r   r  r   r]   assertIsInstancer(   )r*   r  r   r  r   r(  wherer!   r!   r"   test_dict_of_dict_int_keyval  s    

z/TestDictRefctTypes.test_dict_of_dict_int_keyvalc                    s   t t jt j tdd t fdd}|d}d}| D ]B\}}|d7 }| t||d  | D ]\}}| || qnqB| |d d S )Nc                  S   s   t jtjtjd} | S r  r  rc   r!   r!   r"   r    s
    zBTestDictRefctTypes.test_dict_of_dict_npm.<locals>.inner_numba_dictc                    sJ   t jtj d}t| D ],} ||< t|d D ]}||| |< q2q|S )Nr0  r   )r	   r#  r   r  r   )countr   r    r  Zinner_dict_tyr  r!   r"   r#     s    
z5TestDictRefctTypes.test_dict_of_dict_npm.<locals>.foor&   r   r   )r   r   r  r   rk   r(   r,   )r*   r#   r   ctrC   ddkkvvr!   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 )Nappler   c                 S   s
   | d= d S r   r!   )r~   rC   r!   r!   r"   r#     s    z,TestDictRefctTypes.test_delitem.<locals>.foor   )	r	   r#  r   r   r   r   r(   r,   r   )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 )Nr6   r   r   c                 S   s   | d  d7  < | d S r   r!   rc   r!   r!   r"   r#     s    z8TestDictRefctTypes.test_getitem_return_type.<locals>.foor   r&   )r	   r#  r   r   r   Zaranger   Znopython_signaturesreturn_typer  ZArrayZassertNotIsInstanceOptionalrw   )r*   r   r#   Zrettyr!   r!   r"   test_getitem_return_type  s    
z+TestDictRefctTypes.test_getitem_return_typec                 C   sH   t  }dddg}|D ]}|||< qt|D ]\}}| || | q*d S )N)r   Tr   )r   Fr   )r   Fr   )r	   r   r(   )r*   dctrefr~   r    r!   r!   r"   test_storage_model_mismatch  s    
z.TestDictRefctTypes.test_storage_model_mismatchN)r  r  r  rt  rv  r~  r  r  r  r  r  r!   r!   r!   r"   rl  )  s   +""rl  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 5 Q R X t|j}| || d S r.   )rL   r   r   r   r   )r*   r(  callabler   r`  r!   r!   r"   assert_disallow  s    
z&TestDictForbiddenTypes.assert_disallowc                    s>   d  }| | fdd t fdd}| || d S )Nz{} as key is forbiddenc                      s   t  tjS r.   r  r!   tyr!   r"   <lambda>      z<TestDictForbiddenTypes.assert_disallow_key.<locals>.<lambda>c                      s   t  tj d S 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 forbiddenc                      s   t tj S r.   r  r!   r  r!   r"   r    r  z>TestDictForbiddenTypes.assert_disallow_value.<locals>.<lambda>c                      s   t tj  d S r.   r  r!   r  r!   r"   r#     s    z9TestDictForbiddenTypes.assert_disallow_value.<locals>.foor  r  r!   r  r"   assert_disallow_value  s
    
z,TestDictForbiddenTypes.assert_disallow_valuec                 C   s(   |  ttj | ttj d S r.   )r  r   r   r  r  r  r!   r!   r"   test_disallow_list  s    z)TestDictForbiddenTypes.test_disallow_listc                 C   s(   |  ttj | ttj d S r.   )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  c                   @   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!S )"TestDictInferredc                 C   s^   t dd }d\}}| }| t|||i | t|jt| | t|jt| d S )Nc                  S   s   t  } d| d< | S )Nro  rm  rF  rc   r!   r!   r"   r#   (  s    z1TestDictInferred.test_simple_literal.<locals>.fooru  r   r(   r]   r   r1  r2  r*   r#   rC   rD   r   r!   r!   r"   test_simple_literal'  s    
z$TestDictInferred.test_simple_literalc                 C   sb   t dd }d\}}|||}| t|||i | t|jt| | t|jt| d S )Nc                 S   s   t  }||| < |S r.   rF  rI  r!   r!   r"   r#   5  s    z.TestDictInferred.test_simple_args.<locals>.fooru  r  r  r!   r!   r"   test_simple_args4  s    

z!TestDictInferred.test_simple_argsc                 C   sf   t dd }d\}}}||||}| t|||i | t|jt| | t|jt| d S )Nc                 S   s   t  }||| < ||| < |S r.   rF  rC   rD   r}  r   r!   r!   r"   r#   B  s    z0TestDictInferred.test_simple_upcast.<locals>.foo)rm  @@ro  r  )r*   r#   rC   rD   r}  r   r!   r!   r"   test_simple_upcastA  s    

z#TestDictInferred.test_simple_upcastc              	   C   sX   t dd }d\}}}| t}|||| W 5 Q R X | dt|t|j d S )Nc                 S   s   t  }||| < ||| < |S r.   rF  r  r!   r!   r"   r#   P  s    z9TestDictInferred.test_conflicting_value_type.<locals>.foo)rm  ro  r   cannot safely cast float64 to {}r   rL   r   r   r  r   r   r   )r*   r#   rC   rD   r}  r   r!   r!   r"   test_conflicting_value_typeO  s    

z,TestDictInferred.test_conflicting_value_typec              	   C   sX   t dd }d\}}}| t}|||| W 5 Q R X | dt|t|j d S )Nc                 S   s   t  }||| < |||< |S r.   rF  )rC   hrD   r   r!   r!   r"   r#   `  s    z7TestDictInferred.test_conflicting_key_type.<locals>.foo)rm  gfffff^@ro  r  r  )r*   r#   rC   r  rD   r   r!   r!   r"   test_conflicting_key_type_  s    

z*TestDictInferred.test_conflicting_key_typec           
   	   C   s   t dd }tdtdf}tdtdf}td}tjdd}||||\}}W 5 Q R X | t|d d}| 	|t
|d	  t| }	| |	d	 d
 | ||tdtdf  d S )Nc                 S   s   t  }||| < ||| fS r.   rF  )r   r   r   r   r!   r!   r"   r#   q  s    z?TestDictInferred.test_conflict_key_type_non_number.<locals>.foor   r%   rm  T)recordz:unsafe cast from UniTuple(int32 x 2) to UniTuple(int8 x 2)r   )r   r%   )r   r   r  r   r  warningscatch_warningsr(   r,   r   r   rn   rA   )
r*   r#   r   r   r   r}  r   Zdk2r`  rA   r!   r!   r"   !test_conflict_key_type_non_numbero  s    

z2TestDictInferred.test_conflict_key_type_non_numberc                 C   s`   t dd }d\}}|||}| t|||i d\}}|||}| t|d|d i d S )Nc                 S   s$   t  }| r||| < n|d |d< |S )Nr     rF  rI  r!   r!   r"   r#     s
    
z>TestDictInferred.test_ifelse_filled_both_branches.<locals>.fooru  rU   r  r   r   r(   r]   r  r!   r!   r"    test_ifelse_filled_both_branches  s    
	

z1TestDictInferred.test_ifelse_filled_both_branchesc                 C   s   t dd }d\}}|||}| t|||i d\}}|||}| t|i  | t|jt| | t|jt| d S )Nc                 S   s   t  }| r||| < |S r.   rF  rI  r!   r!   r"   r#     s    z:TestDictInferred.test_ifelse_empty_one_branch.<locals>.fooru  rU   r  r  r!   r!   r"   test_ifelse_empty_one_branch  s    


z-TestDictInferred.test_ifelse_empty_one_branchc                 C   sR   t dd }ttd}ttdd |}|||}| t|tt|| d S )Nc                 S   s&   t  }t| |D ]\}}|||< q|S r.   r=  )ksvsr   rC   rD   r!   r!   r"   r#     s    
z'TestDictInferred.test_loop.<locals>.foorH   c                 S   s   | d S )Nr&   r!   r~   r!   r!   r"   r    r  z,TestDictInferred.test_loop.<locals>.<lambda>)r   rn   r   mapr(   r]   r?   )r*   r#   r  r  r   r!   r!   r"   	test_loop  s    

zTestDictInferred.test_loopc              	   C   s>   t dd }| t}|  W 5 Q R X | dt|j d S )Nc                  S   s
   t  } | S r.   rF  rc   r!   r!   r"   r#     s    z)TestDictInferred.test_unused.<locals>.foozimprecise typer   r   r!   r!   r"   test_unused  s    
zTestDictInferred.test_unusedc                 C   s   t dd }|d\}}}| |d | |d | t|ddi |d\}}}| |d | t|i  | |d d S )Nc                 S   sB   t  }t|}| D ]\}}||7 }q| r4d|d< ||t|fS Nr%   r   )r	   r,   rk   )Zdefiner   r  rC   rD   r!   r!   r"   r#     s    
z3TestDictInferred.test_define_after_use.<locals>.fooTr   r   r%   Fr  )r*   r#   r  r   r   r!   r!   r"   test_define_after_use  s    
z&TestDictInferred.test_define_after_usec              	   C   sV   t dd }d\}}}||||}| t|||d || i||d || ii d S )Nc                 S   sF   t  }t  }||  || d < t  }|| ||d < ||| < |||< |S Nr   r%   rF  )r   r   rD   r   Zz1Zz2r!   r!   r"   r#     s    z/TestDictInferred.test_dict_of_dict.<locals>.foo)r&   r"  ro  r   r%   r  )r*   r#   r   r   rD   r   r!   r!   r"   test_dict_of_dict  s    


  z"TestDictInferred.test_dict_of_dictc                 C   s"   t dd }| | |  d S )Nc                   S   s   dd t dD S )Nc                 S   s   i | ]}|d | qS )r%   r!   r  r!   r!   r"   r    s      zJTestDictInferred.test_comprehension_basic.<locals>.foo.<locals>.<dictcomp>r6   r   r!   r!   r!   r"   r#     s    z6TestDictInferred.test_comprehension_basic.<locals>.foor   r)   r!   r!   r"   test_comprehension_basic  s    
z)TestDictInferred.test_comprehension_basicc                 C   s"   t dd }| | |  d S )Nc                   S   s    dd t tdtdddD S )Nc                 S   s   i | ]\}}|t |qS r!   r&  )r}   r    r  r!   r!   r"   r    s      zUTestDictInferred.test_comprehension_basic_mixed_type.<locals>.foo.<locals>.<dictcomp>r6   r   r7   )r?   r   r!   r!   r!   r"   r#     s    zATestDictInferred.test_comprehension_basic_mixed_type.<locals>.foor   r)   r!   r!   r"   #test_comprehension_basic_mixed_type  s    
z4TestDictInferred.test_comprehension_basic_mixed_typec                 C   s"   t dd }| | |  d S )Nc                      s"   dddd  fddt dD S )NABCrL  c                    s   i | ]}d |  | qS r  r!   r  r   r!   r"   r    s      zMTestDictInferred.test_comprehension_involved.<locals>.foo.<locals>.<dictcomp>r<   r   r!   r!   r  r"   r#     s    z9TestDictInferred.test_comprehension_involved.<locals>.foor   r)   r!   r!   r"   test_comprehension_involved   s    
z,TestDictInferred.test_comprehension_involvedc              	   C   sB   t dd }| t}|  W 5 Q R X t|j}| d| d S )Nc                      s"   dddd  fddt dD S )Nr  r  r   rL  c                    s   i | ]}d |  | qS r  r!   r  r  r!   r"   r    s      zTTestDictInferred.test_comprehension_fail_mixed_type.<locals>.foo.<locals>.<dictcomp>r<   r   r!   r!   r  r"   r#   	  s    z@TestDictInferred.test_comprehension_fail_mixed_type.<locals>.fooz&Cannot cast complex128 to unicode_type)r   rL   r   r   r   r   )r*   r#   r   excstrr!   r!   r"   "test_comprehension_fail_mixed_type  s    

z3TestDictInferred.test_comprehension_fail_mixed_typeN)r  r  r  r  r  r  r  r  r  r  r  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S )TestNonCompiledInferc              	   C   s  t  }| |j | t|d | t|ti  | tt|g  | t	}|d  W 5 Q R X | t|j
tt	d | t	}|d= W 5 Q R X | t|j
tt	d | t	 |d W 5 Q R X | t|j
tt	d | |dd d  | |dd  | t	}|  W 5 Q R X | t|j
tt	d | t}|d W 5 Q R X | t|j
ttd | d|k | |j d S )Nr   r   zdictionary is emptyz'invalid operation on untyped dictionary)r	   r   _typedr(   r,   r   rn   iterrL   rM   r   r`   ZassertIsr0   rQ   	TypeErrorr   )r*   r   r   r!   r!   r"   test_check_untyped_dict_ops  s:    

z0TestNonCompiledInfer.test_check_untyped_dict_opsc                 C   s.   t  }d|d< | |j | |d d d S r  )r	   r   r  r(   r3  r!   r!   r"   test_getitem>  s    z!TestNonCompiledInfer.test_getitemc                 C   s2   t  }|dd | |j | |d d d S r  )r	   r   r   r  r(   r3  r!   r!   r"   test_setdefaultF  s    z$TestNonCompiledInfer.test_setdefaultN)r  r  r  r  r  r  r!   r!   r!   r"   r    s   (r  r   )specc                   @   s   e Zd Zdd Zdd ZdS )Bagc                 C   s
   || _ d S r.   r  )r*   r   r!   r!   r"   __init__Q  s    zBag.__init__c                 C   s
   t | jS r.   )r   r   r  r!   r!   r"   __hash__T  s    zBag.__hash__N)r  r  r  r  r  r!   r!   r!   r"   r  O  s   r  c                   @   s   e Zd Zdd ZdS )TestDictWithJitclassc                 C   sB   t dd }|tdd}| |d jd | |d jd d S )Nc                 S   s   t  }| |d< td|d< |S )Nr   e   r   )r	   r  r~   r   r!   r!   r"   r#   Z  s    z8TestDictWithJitclass.test_jitclass_as_value.<locals>.foor&   r  r   r   r  )r   r  r(   r   )r*   r#   r   r!   r!   r"   test_jitclass_as_valueY  s
    
z+TestDictWithJitclass.test_jitclass_as_valueN)r  r  r  r  r!   r!   r!   r"   r  X  s   r  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )		TestNoJitz0Exercise dictionary creation with JIT disabled. c              
   C   sH   t dd4 t " ttt}| t|t W 5 Q R X W 5 Q R X d S NZDISABLE_JITT)	r   r   r
   r   r   r   r(   typer]   r3  r!   r!   r"   &test_dict_create_no_jit_using_new_dicti  s    z0TestNoJit.test_dict_create_no_jit_using_new_dictc              
   C   sB   t dd. t  t }| t|t W 5 Q R X W 5 Q R X d S r  )r   r   r	   r(   r  r]   r3  r!   r!   r"   "test_dict_create_no_jit_using_Dicto  s    z,TestNoJit.test_dict_create_no_jit_using_Dictc              
   C   sL   t dd8 t & ttjtj}| t|t	 W 5 Q R X W 5 Q R X d S r  )
r   r   r	   r#  r   r   r   r(   r  r]   r3  r!   r!   r"   #test_dict_create_no_jit_using_emptyu  s    z-TestNoJit.test_dict_create_no_jit_using_emptyN)r  r  r  __doc__r  r  r  r!   r!   r!   r"   r  f  s   r  c                   @   s   e Zd Zdd ZdS )TestDictIteratorc                 C   s   t dd }t dd }| }| }| dddg|d  | dd	d
g|d  | dddg|d  | dddg|d  d S )Nc                  S   sB   t jtjtjd} d| d< d| d< d| d< t|  t|  fS )Nr0  r6   r   rZ   r   r[   r%   r	   r#  r   r  rn   rA   rt   r  r!   r!   r"   fun1~  s    z1TestDictIterator.test_dict_iterator.<locals>.fun1c                  S   sB   t jtjtjd} d| d< d| d< d| d< t|  t|  fS )Nr0  M   rH   X   r4   c   r
  r  r  r!   r!   r"   fun2  s    z1TestDictIterator.test_dict_iterator.<locals>.fun2r   r   r%   r6   rZ   r[   rH   r4   r
  r  r  r  r'   )r*   r  r  Zres1Zres2r!   r!   r"   test_dict_iterator}  s    
	
z#TestDictIterator.test_dict_iteratorN)r  r  r  r  r!   r!   r!   r"   r  |  s   r  c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )TestTypedDictInitialValueszBTests that typed dictionaries carry their initial value if presentc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r.   r!   rc   r!   r!   r"   r     s    zDTestTypedDictInitialValues.test_homogeneous_and_literal.<locals>.barc                    sT   | j d krdd S  t| tj  | j dddd  t| dd d	d S )
Nc                 S   s   t | S r.   r   rc   r!   r!   r"   r    r  zYTestTypedDictInitialValues.test_homogeneous_and_literal.<locals>.ol_bar.<locals>.<lambda>r   r%   r<   rB  literal_valueFc                 S   s   | S r.   r!   rc   r!   r!   r"   r    r  )initial_valuer   
isinstancer   r   r(   hasattrrc   r  r!   r"   ol_bar  s    
zGTestTypedDictInitialValues.test_homogeneous_and_literal.<locals>.ol_barc                     s   dddd}  |  d S )Nr   r%   r<   rB  r!   r  r   r!   r"   r#     s    zDTestTypedDictInitialValues.test_homogeneous_and_literal.<locals>.foor   r   r*   r  r#   r!   r   r*   r"   test_homogeneous_and_literal  s    z7TestTypedDictInitialValues.test_homogeneous_and_literalc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r.   r!   rc   r!   r!   r"   r     s    zVTestTypedDictInitialValues.test_heterogeneous_but_castable_to_homogeneous.<locals>.barc                    s:     t| tj  | jd   t| dd dd S )Nr  Fc                 S   s   | S r.   r!   rc   r!   r!   r"   r    r  zkTestTypedDictInitialValues.test_heterogeneous_but_castable_to_homogeneous.<locals>.ol_bar.<locals>.<lambda>)r   r  r   r   r(   r  r  rc   r  r!   r"   r    s    zYTestTypedDictInitialValues.test_heterogeneous_but_castable_to_homogeneous.<locals>.ol_barc                     s   dddd}  |  d S )Nr   r%   r<   rB  r!   r  r   r!   r"   r#     s    zVTestTypedDictInitialValues.test_heterogeneous_but_castable_to_homogeneous.<locals>.foor  r  r!   r  r"   .test_heterogeneous_but_castable_to_homogeneous  s    zITestTypedDictInitialValues.test_heterogeneous_but_castable_to_homogeneousc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r.   r!   rc   r!   r!   r"   r     s    zZTestTypedDictInitialValues.test_heterogeneous_but_not_castable_to_homogeneous.<locals>.barc                    sd   dddd}dd   fdd|  D }t| tj | j| t| d	d
 dd S )Nr                  @r<   rB  c                 S   s   t | rt | S t| S r.   )r   Zmaybe_literalliteralr   r   r!   r!   r"   specific_ty  s    zrTestTypedDictInitialValues.test_heterogeneous_but_not_castable_to_homogeneous.<locals>.ol_bar.<locals>.specific_tyc                    s    i | ]\}}t | |qS r!   )r   r  )r}   r~   r   r  r!   r"   r    s      zqTestTypedDictInitialValues.test_heterogeneous_but_not_castable_to_homogeneous.<locals>.ol_bar.<locals>.<dictcomp>r  Fc                 S   s   | S r.   r!   rc   r!   r!   r"   r    r  zoTestTypedDictInitialValues.test_heterogeneous_but_not_castable_to_homogeneous.<locals>.ol_bar.<locals>.<lambda>)rk   r   r  r   LiteralStrKeyDictr(   r  r  )r   r   r   r  r  r"   r    s    z]TestTypedDictInitialValues.test_heterogeneous_but_not_castable_to_homogeneous.<locals>.ol_barc                     s   dddd}  |  d S )Nr   r  r<   rB  r!   r  r   r!   r"   r#     s    zZTestTypedDictInitialValues.test_heterogeneous_but_not_castable_to_homogeneous.<locals>.foor  r  r!   r  r"   2test_heterogeneous_but_not_castable_to_homogeneous  s    zMTestTypedDictInitialValues.test_heterogeneous_but_not_castable_to_homogeneousc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r.   r!   rc   r!   r!   r"   r     s    zATestTypedDictInitialValues.test_mutation_not_carried.<locals>.barc                    sB   | j d krdd S  t| tj  | j dddd dd S )Nc                 S   s   t | S r.   r  rc   r!   r!   r"   r    r  zVTestTypedDictInitialValues.test_mutation_not_carried.<locals>.ol_bar.<locals>.<lambda>r   r%   r<   rB  c                 S   s   | S r.   r!   rc   r!   r!   r"   r    r  )r  r   r  r   r   r(   rc   r  r!   r"   r    s
    
zDTestTypedDictInitialValues.test_mutation_not_carried.<locals>.ol_barc                     s    dddd} d| d<  |  d S Nr   r%   r<   rB  rH   r   r!   r  r   r!   r"   r#     s    zATestTypedDictInitialValues.test_mutation_not_carried.<locals>.foor  r  r!   r  r"   test_mutation_not_carried  s    z4TestTypedDictInitialValues.test_mutation_not_carriedc                    s   t dd }|d ftddddffD ]d\}t dd d	d
  t fdd}t  fdd}|  jd d }| |j| q$d S )Nc                  W   s   d S r.   r!   )rV  r!   r!   r"   nop  s    zQTestTypedDictInitialValues.test_mutation_not_carried_single_function.<locals>.nopr   r%   r<   rB  c                 S   s   d S r.   r!   r  r!   r!   r"   baz  s    zQTestTypedDictInitialValues.test_mutation_not_carried_single_function.<locals>.bazc                 S   s   d S r.   r!   r  r!   r!   r"   r     s    zQTestTypedDictInitialValues.test_mutation_not_carried_single_function.<locals>.barc                    s    fdd}|S )Nc                    s   |   |  d S r.   r!   r  r  fnr!   r"   impl
  s    zbTestTypedDictInitialValues.test_mutation_not_carried_single_function.<locals>.ol_bar.<locals>.implr!   )r   r  r  r!   r"   r    s    zTTestTypedDictInitialValues.test_mutation_not_carried_single_function.<locals>.ol_barc                     s    dddd}  |  d| d< | S r  r!   r  r   r!   r"   r#     s    zQTestTypedDictInitialValues.test_mutation_not_carried_single_function.<locals>.foor   )r   r   r   Z
signaturesr(   r  )r*   r  Zivr  r#   Zlargr!   )r   r  r  r"   )test_mutation_not_carried_single_function  s    
 
zDTestTypedDictInitialValues.test_mutation_not_carried_single_functionc                    s\   t dd  t  fdd}t }d|d< t }d|d< | |d	| | |d
| d S )Nc                 S   s   ddi}| rddi}|S )Nr   r%   r<   r!   )r~   or!   r!   r"   r     s    zGTestTypedDictInitialValues.test_unify_across_function_call.<locals>.barc                    s   | rddi}n | }|S )Nr<   rH   r!   r  r   r!   r"   r#   %  s    
zGTestTypedDictInitialValues.test_unify_across_function_call.<locals>.foorH   r<   r%   r   TF)r   r	   r(   )r*   r#   e1e2r!   r   r"   test_unify_across_function_call  s    
z:TestTypedDictInitialValues.test_unify_across_function_callN)
r  r  r  r  r  r  r   r  r  r  r!   r!   r!   r"   r    s   #r  c                   @   s   e Zd 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d0S )1TestLiteralStrKeyDictzB Tests for dictionaries with string keys that can map to anything!c                 C   s   t dd }| | d d S )Nc                  S   s"   dddd} | d | d | d fS )Nr   r  r   rB  r   r   r   r!   ldr!   r!   r"   r#   9  s    zCTestLiteralStrKeyDict.test_basic_const_lowering_boxing.<locals>.foo)r   r  r   r'   r)   r!   r!   r"    test_basic_const_lowering_boxing8  s    
z6TestLiteralStrKeyDict.test_basic_const_lowering_boxingc                 C   s,   t dd }| |d | |d d S )Nc                 S   s.   | d }|dkrdnd}ddd|d}|d	 S )
Nr4   r%   TFr   r  r   )r   r   r   	non_constr  r!   )r~   r   r   r  r!   r!   r"   r#   A  s    z?TestLiteralStrKeyDict.test_basic_nonconst_in_scope.<locals>.foo"   r   r)   r!   r!   r"   test_basic_nonconst_in_scope@  s    
	z2TestLiteralStrKeyDict.test_basic_nonconst_in_scopec                    s<   ddd  t  fdd}t fdd}|  d S )Nr4   c                 S   s   d S r.   r!   r  r!   r!   r"   r   Q  s    z>TestLiteralStrKeyDict.test_basic_nonconst_freevar.<locals>.barc                    sX     | jtdtdtdtdtdtdtdtdi dd	 }|S )
Nr   r   r   r  r   r   r4   c                 S   s   d S r.   r!   r  r!   r!   r"   r  \  s    zOTestLiteralStrKeyDict.test_basic_nonconst_freevar.<locals>.ol_bar.<locals>.implr(   r  r   r  r   r~   r  r  r!   r"   r  T  s       zATestLiteralStrKeyDict.test_basic_nonconst_freevar.<locals>.ol_barc                     s   dddd}  |  d S )Nr   r  r   r   r   r   r   r!   r  )r   r   r!   r"   r#   `  s    z>TestLiteralStrKeyDict.test_basic_nonconst_freevar.<locals>.foor  r  r!   )r   r   r*   r"   test_basic_nonconst_freevarN  s    z1TestLiteralStrKeyDict.test_basic_nonconst_freevarc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r.   r!   r  r!   r!   r"   r   i  s    z5TestLiteralStrKeyDict.test_literal_value.<locals>.barc                    sH     | jtdtdtdtdtdtdi dd }|S )	Nr   r   r   r  r   r   c                 S   s   d S r.   r!   r  r!   r!   r"   r  s  s    zFTestLiteralStrKeyDict.test_literal_value.<locals>.ol_bar.<locals>.implr  r  r  r!   r"   r  l  s      z8TestLiteralStrKeyDict.test_literal_value.<locals>.ol_barc                     s   dddd}  |  d S Nr   r  r   rB  r!   r  r   r!   r"   r#   w  s    z5TestLiteralStrKeyDict.test_literal_value.<locals>.foor  r  r!   r  r"   test_literal_valueg  s    
z(TestLiteralStrKeyDict.test_literal_valuec                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r.   r!   r  r!   r!   r"   r     s    z?TestLiteralStrKeyDict.test_list_and_array_as_value.<locals>.barc                    sZ     | jtdtdtdtjtjdddgdtdttdi d	d
 }|S )Nr   r   r   r%   r<   )r  r   r4   c                 S   s   d S r.   r!   r  r!   r!   r"   r    s    zPTestLiteralStrKeyDict.test_list_and_array_as_value.<locals>.ol_bar.<locals>.impl)	r(   r  r   r  r   r  r   r   zerosr  r  r!   r"   r    s     zBTestLiteralStrKeyDict.test_list_and_array_as_value.<locals>.ol_barc                     s(   dddg} d| t dd} | d S )Nr   r%   r<   r4   rB  r   r  )r   r  r   r!   r"   r#     s    
z?TestLiteralStrKeyDict.test_list_and_array_as_value.<locals>.foor  r  r!   r  r"   test_list_and_array_as_value~  s    z2TestLiteralStrKeyDict.test_list_and_array_as_valuec                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r.   r!   r  r!   r!   r"   r     s    zBTestLiteralStrKeyDict.test_repeated_key_literal_value.<locals>.barc                    sH     | jtdtdtdtdtdtdi dd }|S )	Nr   aaaar   r  r   r   c                 S   s   d S r.   r!   r  r!   r!   r"   r    s    zSTestLiteralStrKeyDict.test_repeated_key_literal_value.<locals>.ol_bar.<locals>.implr  r  r  r!   r"   r    s      zETestLiteralStrKeyDict.test_repeated_key_literal_value.<locals>.ol_barc                     s   dddddd}  |  d S )Nr   r6   r  r   r  )r   r   r   r   r   r!   r  r   r!   r"   r#     s    zBTestLiteralStrKeyDict.test_repeated_key_literal_value.<locals>.foor  r  r!   r  r"   test_repeated_key_literal_value  s    z5TestLiteralStrKeyDict.test_repeated_key_literal_valuec              
   C   sf   dd }dd }dd }dd }||||f}|D ]0}|  |j | t| |  W 5 Q R X q0d S )	Nc                  S   s   dddd} t | S r  )r,   r  r!   r!   r"   _len  s    z2TestLiteralStrKeyDict.test_read_only.<locals>._lenc                  S   s   dddd} | d S )Nr   r  r   rB  r   r!   r  r!   r!   r"   static_getitem  s    z<TestLiteralStrKeyDict.test_read_only.<locals>.static_getitemc                  S   s   dddd} d| kd| kfS )Nr   r  r   rB  r   r   r!   r  r!   r!   r"   contains  s    z6TestLiteralStrKeyDict.test_read_only.<locals>.containsc                  S   s   dddd} |   }| |kS r  )r|   )r  newr!   r!   r"   r|     s    z2TestLiteralStrKeyDict.test_read_only.<locals>.copy)subTestr  rw   r   )r*   r   r!  r"  r|   Zrdonlystestr!   r!   r"   test_read_only  s    z$TestLiteralStrKeyDict.test_read_onlyc                 C   s   dd }dd }dd }dd }d	d
 }dd }||||||f}|D ]R}|  |j< | t}	t|  W 5 Q R X d}
| |
t|	j W 5 Q R X qDd S )Nc                  S   s   dddd} d| d< d S )Nr   r  r   rB  r   r   r!   r  r!   r!   r"   setitem  s    z<TestLiteralStrKeyDict.test_mutation_failure.<locals>.setitemc                  S   s   dddd} | d= d S )Nr   r  r   rB  r   r!   r  r!   r!   r"   delitem  s    z<TestLiteralStrKeyDict.test_mutation_failure.<locals>.delitemc                  S   s   dddd} |    d S r  )rQ   r  r!   r!   r"   rQ     s    z<TestLiteralStrKeyDict.test_mutation_failure.<locals>.popitemc                  S   s   dddd} |    d S r  )r`   r  r!   r!   r"   r`     s    z8TestLiteralStrKeyDict.test_mutation_failure.<locals>.popc                  S   s   dddd} |    d S r  )ri   r  r!   r!   r"   ri     s    z:TestLiteralStrKeyDict.test_mutation_failure.<locals>.clearc                  S   s   dddd} |  dd d S )Nr   r  r   rB  r   )r   r  r!   r!   r"   r     s    z?TestLiteralStrKeyDict.test_mutation_failure.<locals>.setdefault"Cannot mutate a literal dictionary)r$  r  rL   r   r   r   r   r   )r*   r'  r(  rQ   r`   ri   r   Zillegalsr%  r   r(  r!   r!   r"   test_mutation_failure  s    z+TestLiteralStrKeyDict.test_mutation_failurec                 C   sv   t dd }t dd }||fD ]P}| |j: | t}|d W 5 Q R X d}| |t|j W 5 Q R X q d S )Nc                 S   s   ddd}| | S Nr  r   r   r   )r0   r~   r  r!   r!   r"   r0     s    
z+TestLiteralStrKeyDict.test_get.<locals>.getc                 S   s   ddd}||  S r+  r!   r-  r!   r!   r"   getitem  s    
z/TestLiteralStrKeyDict.test_get.<locals>.getitemr   z*Cannot get{item}() on a literal dictionary)r   r$  r  rL   r   r   r   r   )r*   r0   r.  r%  r   r(  r!   r!   r"   test_get  s    

zTestLiteralStrKeyDict.test_getc                 C   s"   t dd }| | ddg d S )Nc                  S   s   ddd} dd |   D S )Nr  r   r,  c                 S   s   g | ]}|qS r!   r!   r   r!   r!   r"   r   	  s     zETestLiteralStrKeyDict.test_dict_keys.<locals>.foo.<locals>.<listcomp>)rA   r  r!   r!   r"   r#    	  s    
z1TestLiteralStrKeyDict.test_dict_keys.<locals>.foor   r   r'   r)   r!   r!   r"   rq     s    
z$TestLiteralStrKeyDict.test_dict_keysc                 C   s   t dd }| | d d S )Nc                  S   s   ddd} |   S r+  )rt   r  r!   r!   r"   r#   		  s    
z3TestLiteralStrKeyDict.test_dict_values.<locals>.foo)r  r   r'   r)   r!   r!   r"   ru   	  s    
z&TestLiteralStrKeyDict.test_dict_valuesc              	   C   s.   t dd }| | dddtdff d S )Nc                  S   s   ddt dd} |  S )Nr  r   r4   )r   r   r   )r   r  rk   r  r!   r!   r"   r#   	  s    z2TestLiteralStrKeyDict.test_dict_items.<locals>.foo)r   r  )r   r   r   r4   )r   rw   r   r  r)   r!   r!   r"   ro   	  s
    
z%TestLiteralStrKeyDict.test_dict_itemsc              	   C   sB   t dd }| t}|  W 5 Q R X t|j}| d| d S )Nc                  S   s   ddd} | S r+  r!   r  r!   r!   r"   r#   	  s    
z3TestLiteralStrKeyDict.test_dict_return.<locals>.fooz#cannot convert native LiteralStrKey)r   rL   r  r   r   r   )r*   r#   r   r  r!   r!   r"   test_dict_return	  s    

z&TestLiteralStrKeyDict.test_dict_returnc                 C   s\   t dd }| |dd | |dd | |d|d | |d|d d S )Nc                 S   s:   | d dkr ddt dd}nddt dd}|d	 S )
N   rH   r  r   r   r   r                 @CATr4   r   r  )r~   r   r!   r!   r"   r#   (	  s    z2TestLiteralStrKeyDict.test_dict_unify.<locals>.foor&   r   r  r4  r   r)   r!   r!   r"   test_dict_unify'	  s    
z%TestLiteralStrKeyDict.test_dict_unifyc              	   C   s|   t dd }| t}|d W 5 Q R X | dt|j t dd }| t}|d W 5 Q R X | dt|j d S )Nc                 S   sJ   | d dkr ddt dd}nddt dd	}d
}d}d}d}|d S )Nr1  rH   r  r   )ZBAD_KEYr   r   r3  r4  r5  r2  r   r%   r<   r   r  r~   r   Zpy310_defeat1Zpy310_defeat2Zpy310_defeat3Zpy310_defeat4r!   r!   r"   key_mismatch8	  s    z?TestLiteralStrKeyDict.test_dict_not_unify.<locals>.key_mismatchr&   zCannot unify LiteralStrKeyc                 S   sJ   | d dkr ddt dd}nddt d	d}d
}d}d}d}|d S )Nr1  rH   r  r   )rH   r<   r2  r3  r4  r5  r   r%   r<   r   r  r7  r!   r!   r"   value_type_mismatchJ	  s    zFTestLiteralStrKeyDict.test_dict_not_unify.<locals>.value_type_mismatchr   )r*   r8  r   r9  r!   r!   r"   test_dict_not_unify6	  s    

z)TestLiteralStrKeyDict.test_dict_not_unifyc                    s   t jt jftjt jt jftjt jt jftjt jt jftjt jt jftjt jt jftjt jt jftjt jt j	ftji}dd  |
 D ]@\}t fdd}|\t fdd}|  qd S )Nc                 S   s   d S r.   r!   r  r!   r!   r"   r   p	  s    z;TestLiteralStrKeyDict.test_dict_value_coercion.<locals>.barc                    s    t|   dd }|S )Nc                 S   s   d S r.   r!   r  r!   r!   r"   r  x	  s    zLTestLiteralStrKeyDict.test_dict_value_coercion.<locals>.ol_bar.<locals>.impl)r   r  r  )	containerr*   r!   r"   r  t	  s    z>TestLiteralStrKeyDict.test_dict_value_coercion.<locals>.ol_barc                     s   ddd}  |  d S )Nr   r%   rD  r!   rc   )r   ty1ty2r!   r"   r#   ~	  s    z;TestLiteralStrKeyDict.test_dict_value_coercion.<locals>.foo)r   r   r   r   r  r  r  r   r   r   rk   r   r   )r*   pdtsr  r#   r!   )r   r;  r*   r<  r=  r"   test_dict_value_coercion\	  s2    
 
 
 
 
 
 
 
 z.TestLiteralStrKeyDict.test_dict_value_coercionc                    s2   dd  t  dd }t fdd}|  d S )Nc                 S   s   d S r.   r!   r  r!   r!   r"   r   	  s    z9TestLiteralStrKeyDict.test_build_map_op_code.<locals>.barc                 S   s   dd }|S )Nc                 S   s   d S r.   r!   r  r!   r!   r"   r  	  s    zJTestLiteralStrKeyDict.test_build_map_op_code.<locals>.ol_bar.<locals>.implr!   r  r!   r!   r"   r  	  s    z<TestLiteralStrKeyDict.test_build_map_op_code.<locals>.ol_barc                     s   ddddi}  |  d S )Nr   r6   string)b1b2r!   r  r   r!   r"   r#   	  s    z9TestLiteralStrKeyDict.test_build_map_op_code.<locals>.foor  r  r!   r   r"   test_build_map_op_code	  s    
z,TestLiteralStrKeyDict.test_build_map_op_codec                    s<   t ddd t  fdd}tj| tdd  d S )Nc                 S   s$   | d k	r | d d d   d7  < d S )Nr   r6   r!   Zfake_kwargsr!   r!   r"   r   	  s    z3TestLiteralStrKeyDict.test_dict_as_arg.<locals>.barc                     s6   d} d}d}t d}| |||d} |d |d S )Nr   r  rA  r<   r  rE  r   r  )r   r   r   r   r   r   r!   r"   r#   	  s    

z3TestLiteralStrKeyDict.test_dict_as_arg.<locals>.foor<   r6   )N)r   r   testingZassert_allcloseonesr)   r!   r   r"   test_dict_as_arg	  s
    	z&TestLiteralStrKeyDict.test_dict_as_argc                 C   s"   t dd }| | |  d S )Nc                  S   s    ddd dgi} | d d dS )Nr  c                 S   s   d|  S )Nr%   r!   r  r!   r!   r"   r  	  r  z\TestLiteralStrKeyDict.test_dict_with_single_literallist_value.<locals>.foo.<locals>.<lambda>r  r   r4   r!   r  r!   r!   r"   r#   	  s    zJTestLiteralStrKeyDict.test_dict_with_single_literallist_value.<locals>.foor   rw   r\   r)   r!   r!   r"   'test_dict_with_single_literallist_value	  s    
z=TestLiteralStrKeyDict.test_dict_with_single_literallist_valuec                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r.   r!   r  r!   r!   r"   r   	  s    z8TestLiteralStrKeyDict.test_tuple_not_in_mro.<locals>.barc                    s,     t| tj  t| tj dd S )Nc                 S   s   dS )N.r!   r  r!   r!   r"   r  	  r  zMTestLiteralStrKeyDict.test_tuple_not_in_mro.<locals>.ol_bar.<locals>.<lambda>)r   r  r   Z	BaseTupler   r  r  r  r!   r"   r  	  s    z;TestLiteralStrKeyDict.test_tuple_not_in_mro.<locals>.ol_barc                     s   ddd}  |  d S )Nr   r   rD  r!   rc   r   r!   r"   r#   	  s    
z8TestLiteralStrKeyDict.test_tuple_not_in_mro.<locals>.foor  r  r!   r  r"   test_tuple_not_in_mro	  s    z+TestLiteralStrKeyDict.test_tuple_not_in_mroc              	   C   s>   t dd }| t}|  W 5 Q R X | dt|j d S )Nc                  S   s   ddt dd} | d S )Nr  r   rH   )Znot_ar   r   r   r  r  r!   r!   r"   r#   	  s    z=TestLiteralStrKeyDict.test_const_key_not_in_dict.<locals>.foozKey 'a' is not in dict.r   r   r!   r!   r"   test_const_key_not_in_dict	  s
    
z0TestLiteralStrKeyDict.test_const_key_not_in_dictc                 C   s@   t dd }| | |  t dd }| | |  d S )Nc                  S   s   t ddd} t| S )Nr4   rH   )01r   rG  r,   rc   r!   r!   r"   r#   	  s    z<TestLiteralStrKeyDict.test_uncommon_identifiers.<locals>.fooc                  S   s   t ddd} t| S )Nr4   rH   )+zx--rO  rc   r!   r!   r"   r   	  s    z<TestLiteralStrKeyDict.test_uncommon_identifiers.<locals>.barrI  )r*   r#   r   r!   r!   r"   test_uncommon_identifiers	  s    

z/TestLiteralStrKeyDict.test_uncommon_identifiersc              	   C   s>   t dd }| t}|  W 5 Q R X | dt|j d S )Nc                  S   s   dddd} |  ddi | S )Nr%   rH   r   rB  r~   r<   )r  )r  r!   r!   r"   r#   	  s    z4TestLiteralStrKeyDict.test_update_error.<locals>.foor)  r   r   r!   r!   r"   test_update_error	  s    

z'TestLiteralStrKeyDict.test_update_errorN)r  r  r  r  r  r  r  r  r  r  r&  r*  r/  rq   ru   ro   r0  r6  r:  r@  rD  rH  rJ  rK  rL  rQ  rR  r!   r!   r!   r"   r  5  s0   #			&)	r  __main__)5r  r  r  numpyr   Znumbar   r   r   r   r   r   r   Znumba.typedr	   r
   r   Znumba.typed.typedobjectutilsr   Znumba.core.errorsr   Z
numba.corer   Znumba.tests.supportr   r   r   r   r   Znumba.experimentalr   Znumba.extendingr   r   r  r!  r<  rX  re  rl  r  r  r  r  objectr  r  r  r  r  r  r  mainr!   r!   r!   r"   <module>   s\           	jI! \" p:    N
