o
    8ήc                     @   s  d Z ddlZddl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mZmZmZ ddlmZmZ ddlmZmZ dd	lmZmZmZmZmZmZ dd
lmZm Z  ddl!m"Z"m#Z# ddlm$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ej-Z.ej-Z/ej-Z0ej1Z2ej3Z4e4Z5ej-Z6e7ej8Z9G dd deZ:G dd deZ;dd Z<eeG dd dej=Z>eeeeeeeeG dd dej=Z?eedd eedd eedd dd Z@edd ZAedd ZBd d! ZCd"d# ZDed$d% ZEed&d' ZFed(d) ZGed*d+ ZHed,d- ZIed.d/ ZJed0d1 ZKed2d3 ZLd4d5 ZMed6d7 ZNed8d9 ZOed:d; ZPed<d= ZQe
e<d>d? ZRe
eSd@dA ZTe
eSdBdC ZUeejdDe
ejVdEdF ZWeejdGddHdIZXe
ejYdJdK ZZeejdLdMdN Z[eejdOddPdQZ\e
ej]dRdS Z^e
ej_dTdU Z`eejdVdWdX ZaeejdYdZd[ Zbeejd\dd]d^Zceejd_d`da Zdeejdbdcdd Zeeejdedfdg Zfeejdhdidj Zge
ejhdkdl Zie
ejjdmdn Zkedoejedoejedoejdpdq Zledoejdrds Zmedtejee jndudv Zodwdx Zpedydz Zqeejrded{d| Zseejrdbd}d~ Zteejhejrejrdd Zue
ejYeejrdGdd ZveejrdYdd Zwedd Zxeejrd_dd Zye
ej_dd Zze
eSdd Z{e
ejVdd Z|e
ej]dd Z}eejrdLeejrdOeejrdVeejrd\eejrdhdd Z~eejrejrdd Zeejejdd ZdS )z1
Compiler-side implementation of the dictionary.
    N)IntEnum)ir)
_helperlib)overloadoverload_method	intrinsicregister_modelmodelslower_builtin
lower_castmake_attribute_wrapper)iternext_implimpl_ret_untracked)typescgutils)DictTypeDictItemsIterableTypeDictKeysIterableTypeDictValuesIterableTypeDictIteratorTypeType)impl_ret_borrowedRefType)TypingErrorLoweringError)typing)	_as_bytes_cast_nonoptional_sentry_safe_cast_default_get_incref_decref
_get_equal_container_get_datac                   @   s   e Zd ZdZdZdS )DKIXz)Special return value of dict lookup.
    N)__name__
__module____qualname____doc__EMPTY r*   r*   =/tmp/pip-target-vg8gfxp4/lib/python/numba/typed/dictobject.pyr#   6   s    r#   c                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
Statusz+Status code for other dict operations.
    r      r$   N)r%   r&   r'   r(   OKOK_REPLACEDERR_NO_MEMORYERR_DICT_MUTATEDERR_ITER_EXHAUSTEDERR_DICT_EMPTYERR_CMP_FAILEDr*   r*   r*   r+   r,   <   s    r,   c                 C   s   t  S )zConstruct a new dict.

    Parameters
    ----------
    key, value : TypeRef
        Key type and value type of the new dict.
    )dict)keyvaluer*   r*   r+   new_dictH   s   	r<   c                          e Zd Z fddZ  ZS )	DictModelc                    s*   dt fdtjfg}tt| ||| d S )Nmeminfodata)_meminfo_dictptrr   voidptrsuperr>   __init__selfdmmfe_typemembers	__class__r*   r+   rD   V   s   zDictModel.__init__r%   r&   r'   rD   __classcell__r*   r*   rJ   r+   r>   T   s    r>   c                       r=   )DictIterModelc                    s,   d|j fdtjfg}tt| ||| d S )Nparentstate)rO   r   rB   rC   rN   rD   rE   rJ   r*   r+   rD   c   s   zDictIterModel.__init__rL   r*   r*   rJ   r+   rN   ^   s    rN   rO   _parentc                 C   s\   | ttj}||d|| | j|t|f W d   dS 1 s'w   Y  dS )z?Raise an internal error depending on the value of *status*
    z!=N)	typeintr,   r2   if_thenicmp_signed	call_convreturn_user_excRuntimeError)contextbuilderstatusmsg	ok_statusr*   r*   r+   _raise_if_errorq   s   "r^   c                 C   s,   t |tjs
tddd }t|}||fS )z0Returns the MemInfoPointer of a dictionary.
    z"expected *dctobj* to be a DictTypec                 S   s<   |j \}|\}| j||| t|}|| ||d}|jS )N)r;   )argsnrtincrefr   create_struct_proxyr?   )rY   rZ   sigr_   tddctordstructr*   r*   r+   codegen   s   
z_as_meminfo.<locals>.codegen)
isinstancer   r   r   rA   )	typingctxdctobjrh   rc   r*   r*   r+   _as_meminfoy   s
   
rl   c                    sL   |t krtd|j t tstdt fdd} ||}||fS )z0Recreate a dictionary from a MemInfoPointer
    z#expected a MemInfoPointer for dict.zexpected a {}c                    sn   |j \}}|j}|\}}t|}	|	| |}
| j||}||t }|	||
_
||
_t| | |
 S N)r_   instance_typer   rb   r`   meminfo_databitcastll_dict_type
as_pointerloadr@   r?   r   	_getvalue)rY   rZ   rc   r_   tmitdrefrd   mi_rf   rg   data_pointerdicttyper*   r+   rh      s   


z_from_meminfo.<locals>.codegen)rA   r   rn   ri   r   format)rj   rw   dicttyperefrh   rc   r*   rz   r+   _from_meminfo   s   

r~   c                 C   s4   t t  tg}t|j|d}|||g dS )zCall numba_dict_free(ptr)
    numba_dict_freeN)r   FunctionTypeVoidTyperq   r   get_or_insert_functionmodulecall)rY   rZ   ptrfntyfreer*   r*   r+   _call_dict_free   s   
r   c           
      C   s   |  tj}|  tj}tt |||g}d}t|||}|j	rGd|_
t| }||jd t }||}	t| ||	 |  |S )z#Define the dtor for dictionary
    _numba_dict_dtorlinkonce_odrr   )get_value_typer   rB   uintpr   r   r   r   r   is_declarationlinkage	IRBuilderappend_basic_blockrp   r_   rq   rr   rs   r   ret_void)
rY   r   	llvoidptrllsizer   fnamefnrZ   dpre   r*   r*   r+   	_imp_dtor   s    
r   c                    s&   t j}| } fdd}||fS )zWrap numba_dict_new_minsize.

    Allocate a new dictionary object with the minimum capacity.

    Parameters
    ----------
    keyty, valty: Type
        Type of the key and value, respectively.

    c                    s   t tt ttg}t|j|d}| 	 j
}| 	j
}| |}| |}	tj|tdd}
|||
t|t|	g}t| ||dd ||
}|S )Nnumba_dict_new_minsizeTzfillzFailed to allocate dictionary)r\   )r   r   	ll_statusrq   rr   
ll_ssize_tr   r   r   get_data_typern   get_abi_sizeofalloca_oncer   r^   rs   )rY   rZ   rc   r_   r   r   ll_keyll_valsz_keysz_valrefdpr[   r   keytyvaltyr*   r+   rh      s,   



z"_dict_new_minsize.<locals>.codegen)r   rB   )rj   r   r   restyrc   rh   r*   r   r+   _dict_new_minsize   s   
r   c                    s(   t j}|| } fdd}||fS )z%Wrap numba_dict_set_method_table
    c                    s  t tttttg}t t  t| g}t j|j|dd}|d }t	j
||dd}t	||dd}	t	||dd}
t	||dd}t	||dd}t	||dd	}| j j }| rt| |j|d
}t| |j|d
\}}||||	jj|	 ||||
jj|
 ||||jj| | jj }| rt| |j|d\}}||||jj| ||||jj| ||||g d S )Nnumba_dict_set_method_table)namer   Tr   r-            dict_key
dict_value)r   LiteralStructTypell_voidptr_typer   r   rq   rr   Functionr   r   r   gep_inboundsdata_model_managerrn   contains_nrt_meminfor!   r    storerp   rR   pointeer   )rY   rZ   rc   r_   vtabletysetmethod_fntysetmethod_fnr   vtablekey_equal_ptrkey_incref_ptrkey_decref_ptrval_incref_ptrval_decref_ptrdm_keyequal
key_incref
key_decrefdm_val
val_incref
val_decrefr   r*   r+   rh     sn   


z'_dict_set_method_table.<locals>.codegenr   void)rj   r   r   r   r   rc   rh   r*   r   r+   _dict_set_method_table   s   >r   c                 C   s*   t j}|||jt j|j}dd }||fS )zWrap numba_dict_insert
    c              
   S   s   t ttttttg}|\}}}}|j\}	}
}}t|j	|d}| j
|
 }| j
| }|||}|||}t||}t|| t||}t||j}t| ||	|}|||t|||t||t||g}|S )Nnumba_dict_insert)r   r   r   rq   ll_bytesll_hashr_   r   r   r   r   as_dataalloca_once_valuememset_paddingr   rR   r"   r   r   )rY   rZ   rc   r_   r   re   r:   hashvalvalrd   tkeythashvaltvalr   r   r   data_keydata_valptr_keyptr_val
ptr_oldvalr   r[   r*   r*   r+   rh   O  s8   



z_dict_insert.<locals>.codegen)r   int32key_typeintp
value_type)rj   re   r:   r   r   r   rc   rh   r*   r*   r+   _dict_insertH  s   $r   c                 C      t j}||}dd }||fS )zFWrap numba_dict_length

    Returns the length of the dictionary.
    c           
      S   sL   t ttg}t|j|d}|\}|j\}t| |||}|	||g}	|	S )Nnumba_dict_length)
r   r   r   rq   r   r   r   r_   r"   r   )
rY   rZ   rc   r_   r   r   re   rd   r   nr*   r*   r+   rh     s   
z_dict_length.<locals>.codegen)r   r   rj   re   r   rc   rh   r*   r*   r+   _dict_lengthv  s   r   c                 C   r   )zRDump the dictionary keys and values.
    Wraps numba_dict_dump for debugging.
    c           	      S   sP   t t  tg}|j\}|\}t| |||}t|j|d}|	||g d S )Nnumba_dict_dump)
r   r   r   rq   r_   r"   r   r   r   r   )	rY   rZ   rc   r_   r   rd   re   r   r   r*   r*   r+   rh     s   
z_dict_dump.<locals>.codegenr   r   r*   r*   r+   
_dict_dump  s   r   c                    s8   t t jt |jg  |||} fdd}||fS )zGWrap numba_dict_lookup

    Returns 2-tuple of (intp, ?value_type)
    c              	      sn  t tttttg}|j\}}}|\}}	}
t|j	|d}| j
| }| j
|j }|||	}t||}t|| | |j}t||}t| |||}|||t|||
t||g}|d||ttj}| ||j}t||}||% |||}| j||j| | ||j|}||| W d    n1 sw   Y  | |}| !| ||gS )Nnumba_dict_lookup>)"r   r   r   rq   r   r   r_   r   r   r   r   r   r   r   r   r   r   r"   r   r   rU   rR   rS   r#   r)   make_optional_nonerT   load_from_data_pointerr`   ra   make_optional_valuer   rs   
make_tuple)rY   rZ   rc   r_   r   rd   r   r   re   r:   r   r   r   r   r   r   r   r   r   ixfoundoutpoutr   loadedr   r*   r+   rh     sH   





z_dict_lookup.<locals>.codegen)r   Tupler   Optionalr   )rj   re   r:   r   rc   rh   r*   r   r+   _dict_lookup  s   -r   c                    sD   t |j|jg t t jt  g}||} fdd}||fS )zWrap numba_dict_popitem
    c                    sN  t ttttg}|\}|j\}t|j|d}| j	|j
 }| j	|j }	t|| }
t||	 }t| |||}|||t||
t||g}| | }t||}|d||ttj}||* |||
}|	||}| | ||g}| | |}||| W d    n1 sw   Y  ||}t|||gS )Nnumba_dict_popitem==)r   r   r   rq   r   r_   r   r   r   r   r   r   r   r   r"   r   r   r   r   rU   rR   rS   r,   r2   rT   r   r   r   r   rs   pack_struct)rY   rZ   rc   r_   r   re   rd   r   r   r   r   r   r   r[   r   r   condr:   r   keyval	optkeyvalkeyvaltyr*   r+   rh     sB   

z_dict_popitem.<locals>.codegen)r   r   r   r   r   r   r   r*   r   r+   _dict_popitem  s
   'r   c                 C   s$   t j}|||t j}dd }||fS )zWrap numba_dict_delitem
    c                 S   s\   t ttttg}|\}}}|j\}}	}
t|j	|d}t
| |||}|||||g}|S )Nnumba_dict_delitem)r   r   r   rq   r   r   r_   r   r   r   r"   r   )rY   rZ   rc   r_   r   re   hkr   rd   thktixr   r   r[   r*   r*   r+   rh     s   

z_dict_delitem.<locals>.codegen)r   r   r   )rj   re   r  r   r   rc   rh   r*   r*   r+   _dict_delitem  s   r  c                    s    fdd}|S )z`The common codegen for iterator intrinsics.

    Populates the iterator struct and increfs.
    c                    s@   |\}|j \}| | }||_|jd |_t| | | S rm   )r_   make_helperrO   rP   rR   r   rt   )rY   rZ   rc   r_   re   rd   
iterhelperr   r*   r+   rh   2  s   z"_iterator_codegen.<locals>.codegenr*   )r   rh   r*   r   r+   _iterator_codegen,  s   r  c                 C   "   t |}||}t|}||fS )z$Get dictionary iterator for .items())r   r   r  r   r*   r*   r+   _dict_itemsB     
r	  c                 C   r  )z#Get dictionary iterator for .keys())r   r   r  r   r*   r*   r+   
_dict_keysK  r
  r  c                 C   r  )z%Get dictionary iterator for .values())r   r   r  r   r*   r*   r+   _dict_valuesT  r
  r  c                    s0   t |j|j  fdd} |||}||fS )zMake a dictionary struct with the given *ptr*

    Parameters
    ----------
    keyty, valty: Type
        Type of the key and value, respectively.
    ptr : llvm pointer value
        Points to the dictionary object.
    c                    s   |\}}}t  }|| |}||_| | tj}t| |j}	| j	
|| tj||	}
| j	||
}||t }||| |
|_| S rm   )r   rb   r@   r   r   r   rB   r   r   r`   meminfo_alloc_dtorget_constantr   ro   rp   rq   rr   r   r?   rt   )rY   rZ   	signaturer_   rx   r   rf   rg   
alloc_sizedtorr?   ry   dict_tyr*   r+   rh   j  s$   



z_make_dict.<locals>.codegen)r   r   rn   )rj   r   r   r   rh   rc   r*   r  r+   
_make_dict]  s   r  c                    s@   t t| t t|t grtd| |  fdd}|S )zsCreates a new dictionary with *key* and *value* as the type
    of the dictionary key and value, respectively.
    z.expecting *key* and *value* to be a numba Typec                    s&   t  }t|  t |}|S rm   )r   r   r  )r:   r;   r   re   r   r*   r+   imp  s   
zimpl_new_dict.<locals>.imp)anyri   r   	TypeError)r:   r;   r  r*   r   r+   impl_new_dict  s   


r  c                 C   s   t | tjsdS dd }|S )zlen(dict)
    Nc                 S      t | S rm   )r   re   r*   r*   r+   impl     zimpl_len.<locals>.implri   r   r   re   r  r*   r*   r+   impl_len  s   r  c                 C   s    t | tttfs
dS dd }|S )z<len(dict.keys()), len(dict.values()), len(dict.items())
    Nc                 S   s
   t | jS rm   )r   rQ   r  r*   r*   r+   r       
zimpl_len_iters.<locals>.impl)ri   r   r   r   r  r*   r*   r+   impl_len_iters  s   r!  __setitem__c                    sl   t | tjsd S | j| j  fdd}|  r|S | ||} | j| j ttj	|  }||fS )Nc                    s\   t | }t |}t| |t||}|tjkrd S |tjkr!d S |tjkr*tdtd)Nzkey comparison failedz$dict.__setitem__ failed unexpectedly)	r   r   hashr,   r2   r3   r8   
ValueErrorrX   )re   r:   r;   	castedkey	castedvalr[   r   r*   r+   r    s   




zimpl_setitem.<locals>.impl)
ri   r   r   r   r   
is_preciserefiner   r  r   )re   r:   r;   r  rc   r*   r   r+   impl_setitem  s   r)  getc                    s8   t | tjsd S | j | j}t|| d fdd	}|S )Nc                    s0   t | }t| |t|\}}|tjkr|S |S rm   r   r   r#  r#   r)   )dctr:   defaultr%  r   r   r   r*   r+   r    s
   

zimpl_get.<locals>.implrm   )ri   r   r   r   r   r   r,  r:   r-  r   r  r*   r.  r+   impl_get  s   
r0  c                    &   t | tjsd S | j  fdd}|S )Nc                    sH   t | }t| |t|\}}|tjkrt |tjk r tdt|S )N!internal dict error during lookup)r   r   r#  r#   r)   KeyErrorAssertionErrorr   )re   r:   r%  r   r   r.  r*   r+   r    s   


zimpl_getitem.<locals>.implri   r   r   r   )re   r:   r  r*   r.  r+   impl_getitem  s
   
r6  popitemc                 C      t | tjsd S dd }|S )Nc                 S   s6   t | \}}|tjkrt|S |tjkrt td)Nz"internal dict error during popitem)r   r,   r2   r   r7   r3  r4  )re   r[   r   r*   r*   r+   r    s   

zimpl_popitem.<locals>.implr  r  r*   r*   r+   impl_popitem  s   	r9  popc                    sF   t | tjsd S | j | j}t |tjt|| d fdd	}|S )Nc                    sn   t | }t|}t| ||\}}|tjkrrt |S |tjk r&tdt| ||}|tj	kr5td|S )Nr2  z"internal dict error during delitem)
r   r#  r   r#   r)   r3  r4  r  r,   r2   )r,  r:   r-  r%  hashedr   r   r[   r   should_raiser*   r+   r    s   



zimpl_pop.<locals>.implrm   )ri   r   r   r   r   Omittedr   r/  r*   r<  r+   impl_pop  s   
r?  c                 C      t | tjsd S dd }|S )Nc                 S   s   |  | d S rm   )r:  re   kr*   r*   r+   r  5  s   zimpl_delitem.<locals>.implr  re   rB  r  r*   r*   r+   impl_delitem0     rD  c                    r1  )Nc                    s(   t | }t| |t|\}}|tjkS rm   r+  )re   rB  r   r   r.  r*   r+   r  A  s   

zimpl_contains.<locals>.implr5  rC  r*   r.  r+   impl_contains:  s
   rF  clearc                 C   r8  )Nc                 S   s    t | r|   t | sd S d S rm   )lenr7  r  r*   r*   r+   r  M  s   zimpl_clear.<locals>.implr  r  r*   r*   r+   
impl_clearH     rI  copyc                    s0   t | tjsd S | j| j  fdd}|S )Nc                    s(   t  }|  D ]\}}|||< q	|S rm   )r<   items)re   newdrB  vr   val_typer*   r+   r  [  s   

zimpl_copy.<locals>.impl)ri   r   r   r   r   r  r*   rO  r+   	impl_copyT  s
   rQ  
setdefaultc                 C   s   t | tjsd S ddd}|S )Nc                 S   s   || vr|| |< | | S rm   r*   )r,  r:   r-  r*   r*   r+   r  i  s   zimpl_setdefault.<locals>.implrm   r  )r,  r:   r-  r  r*   r*   r+   impl_setdefaultd  s   
rS  rL  c                 C   r8  )Nc                 S   s   t | }|S rm   )r	  )re   itr*   r*   r+   r  v  s   zimpl_items.<locals>.implr  r  r*   r*   r+   
impl_itemsq  rJ  rU  keysc                 C   r8  )Nc                 S   r  rm   )r  r  r*   r*   r+   r    r  zimpl_keys.<locals>.implr  r  r*   r*   r+   	impl_keys}     rW  valuesc                 C   r8  )Nc                 S   r  rm   )r  r  r*   r*   r+   r    r  zimpl_values.<locals>.implr  r  r*   r*   r+   impl_values  rX  rZ  updatec                 C   s,   t | tjsd S t |tjsd S dd }|S )Nc                 S   s   |  D ]\}}|| |< qd S rm   )rL  )re   otherrB  rN  r*   r*   r+   r    s   
zol_dict_update.<locals>.implr  )re   r\  r  r*   r*   r+   ol_dict_update  s   r]  c                    s>   t | tjsd S t |tjsdd }|S |j  fdd}|S )Nc                 S   s   dS )NFr*   dadbr*   r*   r+   impl_type_mismatch     z&impl_equal.<locals>.impl_type_mismatchc                    sf   t | t |kr
dS |  D ]"\}}t| }t||t|\}}|tjkr) dS ||kr0 dS qdS )NFT)rH  rL  r   r   r#  r#   r)   )r_  r`  kavakbr   vb
otherkeytyr*   r+   impl_type_matched  s   

z%impl_equal.<locals>.impl_type_matchedr5  )r_  r`  ra  ri  r*   rg  r+   
impl_equal  s   rj  c                 C   r@  )Nc                 S   s
   | |k S rm   r*   r^  r*   r*   r+   r    r   zimpl_not_equal.<locals>.implr  )r_  r`  r  r*   r*   r+   impl_not_equal  rX  rk  getiterc                 C   s   |j d }| ||j|d }tt ttg}t	|j
|d}ttj}|tjd }	ttd|	 }
tj||
dd}t|||_t| ||j|j}|||j|g t| ||j| S )z6Implement iter() for .keys(), .values(), .items()
    r   numba_dict_iterdict_iter_sizeof   Tr   )r_   r  iterator_typer   r   r   ll_dictiter_typerq   r   r   r   ctypes	CFUNCTYPEc_size_tr   	c_helpers	ArrayTypeIntTyper   r   rP   r"   rO   r   r   return_typert   )rY   rZ   rc   r_   
iterabletyrT  r   r   protodictiter_sizeof
state_typepstater   r*   r*   r+   impl_iterable_getiter  s,   

r~  c                 C   s   |j \}|\}t|}| ||j}tt tt	g}t
|j|d}	ttj}
|
tjd }ttd| }t
j||dd}t|||_||_t| ||j|d }||	|j|g t| ||j| S )zBImplement iter(Dict).  Semantically equivalent to dict.keys()
    rm  rn  ro  Tr   r   )r_   r   r   r  rp  r   r   r   rq  rq   r   r   r   rr  rs  rt  r   ru  rv  rw  r   r   rP   rO   r"   r   r   rx  rt   )rY   rZ   rc   r_   rd   re   ry  rT  r   r   rz  r{  r|  r}  r   r*   r*   r+   impl_dict_getiter  s.   
r  iternextc                 C   s  |j d }| |||d }t }ttt||g}t|j	|d}	t
|t}
t
|t}||	|j|
|f}|d||d}|| || |j}|jj\}}| j| }| j| }|||
|  }||||  }|||}|||}t|jtr| ||||g}|| n t|jtr|| nt|jtr|| nt d!|jW d    d S W d    d S W d    d S 1 sw   Y  d S )Nr   numba_dict_iter_nextr   zunknown type: {})"r_   r  r   rr   r   r   r   r   r   r   r   r   rP   icmp_unsignedrR   	set_validrT   
yield_typerO   keyvalue_typer   rp   rs   r   r   ri   iterabler   r   yield_r   r   r4  r|   )rY   rZ   rc   r_   result	iter_typerT  	p2p_bytesiternext_fntyr  key_raw_ptrval_raw_ptrr[   is_validr  key_tyval_tyr   r   key_ptrval_ptrr:   r   tupr*   r*   r+   impl_iterator_iternext  sX   





"r  c                    s  t |tjrkdd |j D }t||j}dd |D }| |}dd |j D }	|j}
|
d u r;t	t
|}n|
 }t|D ]\}}|| }| |||	| || }||||}qC|}| j||| |S ddlm  t|j|j}|j|jt|} fdd}| |||d	}|rt||D ]"\\\}}ttj|}|||f}d
d }| |||| q|S )Nc                 S      g | ]}|qS r*   r*   .0xr*   r*   r+   
<listcomp>L      zbuild_map.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )r-   r*   r  r*   r*   r+   r  P  s    c                 S   r  r*   r*   r  r*   r*   r+   r  S  r  r   )Dictc                      s     S rm   )emptyr*   r  ktvtr*   r+   	make_dictm     zbuild_map.<locals>.make_dictr*   c                 S   s   || |< d S rm   r*   )re   rB  rN  r*   r*   r+   putw  r  zbuild_map.<locals>.put)ri   r   LiteralStrKeyDictliteral_valuerY  
NamedTupletuple_tyget_constant_undefvalue_indexrangerH  	enumeratecastinsert_valuer`   ra   numba.typedr  r   r   r   r   r  compile_internalzipr   )rY   rZ   	dict_type
item_typesrL  unliteral_tysnbtyrY  r  literal_tysr  value_indexerir   r   castedre   dtrc   r  rB  rN  r_   r  r*   r  r+   	build_mapI  sH   


r  c                    sP   dd  j  D dd  j  D  fdd}t j }||fS )Nc                 S   r  r*   r*   r  r*   r*   r+   r    r  z*_mixed_values_to_tuple.<locals>.<listcomp>c                 S   r  r*   r*   r  r*   r*   r+   r    r  c              	      s   |\}|  dt td}g }ttD ]&}||||f}| |||  j| }	||	 | j	| j| | q| 
||j|}
|
S )Nstatic_getitemdummy)get_functionr   noneliteralr  rH  r  appendr`   ra   r   rx  )cgctxrZ   rc   r_   lldr  rL  rB  itemr  retre   rV  r  r*   r+   r    s   
z$_mixed_values_to_tuple.<locals>.implr  rV  rY  r   r   )tyctxre   r  rc   r*   r  r+   _mixed_values_to_tuple  s
   r  c                 C   r8  )Nc                 S   r  rm   )r  r  r*   r*   r+   r    r  z+literalstrkeydict_impl_values.<locals>.implri   r   r  r  r*   r*   r+   literalstrkeydict_impl_values  s   r  c                    s8   t | tjsd S tdd | j D   fdd}|S )Nc                 S   s   g | ]}|j qS r*   )r  r  r*   r*   r+   r    s    z/literalstrkeydict_impl_keys.<locals>.<listcomp>c                    s    t  }  D ]}d| |< q|  S )Nr   )r9   rV  )re   r  tr*   r+   r    s   
z)literalstrkeydict_impl_keys.<locals>.impl)ri   r   r  tupler  rV  r  r*   r  r+   literalstrkeydict_impl_keys  s
   r  c           
      C   s<   |j \}}|\}}|j|jk}| tj|}	t| ||j|	S rm   )r_   r  r  r   booleanr   rx  )
rY   rZ   rc   r_   tutvurN  predresr*   r*   r+   literalstrkeydict_impl_equals  s
   
r  c                 G   s   t | tjsd S d}t|)NzWCannot get{item}() on a literal dictionary, return type cannot be statically determinedri   r   r  r   )r,  r_   r\   r*   r*   r+   literalstrkeydict_impl_get  s   r  c                 C   r8  )Nc                 S   s   | S rm   r*   r  r*   r*   r+   r    rb  z)literalstrkeydict_impl_copy.<locals>.implr  r  r*   r*   r+   literalstrkeydict_impl_copy  rE  r  c                    s^   dd  j  D dd  j  D  fdd}dd  jD }t| }||fS )Nc                 S   r  r*   r*   r  r*   r*   r+   r    r  z4_str_items_mixed_values_to_tuple.<locals>.<listcomp>c                 S   r  r*   r*   r  r*   r*   r+   r    r  c              	      s   |\}|  dt td}g }ddlm} ttD ]C}||||f}	| ||	|  j| }
| j	
| j| |	 || |tj| j}| |ttj j| g||
f}|| q| ||j|}|S )Nr  r  r   )make_string_from_constant)r  r   r  r  numba.cpython.unicoder  r  rH  r  r`   ra   unicode_typer  r   r   r  rx  )r  rZ   rc   r_   r  r  rL  r  rB  r  r  keydatapairr  r  r*   r+   r    s.   z._str_items_mixed_values_to_tuple.<locals>.implc                 S   s   g | ]
}t t j|fqS r*   )r   r   r  r  r*   r*   r+   r    s    r  )r  re   r  kvsrc   r*   r  r+    _str_items_mixed_values_to_tuple  s   r  c                 C   r8  )Nc                 S   r  rm   )r  r  r*   r*   r+   r    r  z*literalstrkeydict_impl_items.<locals>.implr  r  r*   r*   r+   literalstrkeydict_impl_items  rE  r  c                 C   r@  )Nc                 S   s    |   D ]	}||kr dS qdS )NTF)rV  )re   rB  r:   r*   r*   r+   r    s
   z-literalstrkeydict_impl_contains.<locals>.implr  rC  r*   r*   r+   literalstrkeydict_impl_contains  s   r  c                    s"   t | tjsd S | j  fddS )Nc                    s    S rm   r*   r  lr*   r+   <lambda>  s    z,literalstrkeydict_impl_len.<locals>.<lambda>)ri   r   r  countr  r*   r  r+   literalstrkeydict_impl_len	  s   r  c                 C      t | tjsd S tdNz"Cannot mutate a literal dictionaryr  )re   r:   r;   r*   r*   r+   %literalstrkeydict_banned_impl_setitem     r  c                 C   r  r  r  rA  r*   r*   r+   %literalstrkeydict_banned_impl_delitem  r  r  c                 G   r  r  r  )re   r_   r*   r*   r+   &literalstrkeydict_banned_impl_mutators  s   r  c                    s   t |j |j D ])\\}}\}}||kr!d}	t|	||j||d u r4d}	t|	||qt|j}t|j}t	
 |t|}
 fddt |
||D } ||S )Nz0LiteralDictionary keys are not the same {} != {}z:LiteralDictionary values cannot by unified, have {} and {}c                    s"   g | ]\}}}  |||qS r*   )r  )r  rN  fr  rZ   rY   r*   r+   r  =  s    z<cast_LiteralStrKeyDict_LiteralStrKeyDict.<locals>.<listcomp>)r  r  rL  r   r|   typing_contextunify_pairsr   r   r   unpack_tuplerH  r   )rY   rZ   fromtytotyr   k1v1k2v2r\   olditemsrL  r*   r  r+   (cast_LiteralStrKeyDict_LiteralStrKeyDict*  s"   

r  c                 C   s   |S rm   r*   )rY   rZ   r  r  r   r*   r*   r+   cast_DictType_DictTypeB  s   r  rm   )r(   rr  operatorenumr   llvmliter   numbar   numba.core.extendingr   r   r   r   r	   r
   r   r   numba.core.imputilsr   r   
numba.corer   r   numba.core.typesr   r   r   r   r   r   r   r   numba.core.errorsr   r   r   numba.typed.typedobjectutilsr   r   r   r   r    r!   r"   	voidptr_trq   rq  r   int32_tr   intp_tr   r   r   MemInfoPointerrB   rA   r#   r,   r<   StructModelr>   rN   r^   rl   r~   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  rH  r  r!  setitemr)  r0  getitemr6  r9  r?  delitemrD  containsrF  rI  rQ  rS  rU  rW  rZ  r]  eqrj  nerk  r~  r  BORROWEDr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*   r*   r*   r+   <module>   s.   (
 $	


"
)
G
-


8
2




(




"




	
























!::








	


	









