U
    hâËd´Š  ã                   @   sž  d dl mZ d dlZd dlmZ d dlZd dlZd dl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mZmZmZ d dlmZmZ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' d d
l(m)Z) d dl*m+Z+ eej,ƒdd„ ƒZ-eej.ej/ej/ƒdd„ ƒZ0eej1ej/ej/ƒdd„ ƒZ2eej1ej3ej3ƒdd„ ƒZ4eej1ej5ej5ƒdd„ ƒZ6eej7ej8ej8ƒeej7ej9ej9ƒdd„ ƒƒZ:eej;ej8ej8ƒeej;ej9ej9ƒdd„ ƒƒZ<dd„ Z=eej7ƒe=dƒƒ eej;ƒe=dƒƒ eej>ƒdd„ ƒZ?eej/ej>ƒeej@ej>ƒeej5ej>ƒd d!„ ƒƒƒZAeej>ej/ƒeej>ej5ƒeej>ej@ƒd"d#„ ƒƒƒZBeejCejDejEƒd$d%„ ƒZFeejGejDejEej/ƒd&d'„ ƒZHd(d)„ ZIeeJejKƒd*d+„ ƒZLeeJe Mej/¡ƒd,d-„ ƒZNeeOejKƒd.d/„ ƒZPeeOe Mej/¡ƒd0d1„ ƒZQd2d3„ ZReeSejTƒd4d5„ ƒZUeeSejTejEƒd6d7„ ƒZVeeWej/ƒeeXej/ƒd8d9„ ƒƒZYeeZe Mej/¡ƒd:d;„ ƒZ[eej\ej/ƒd<d=„ ƒZ]eej^ƒd>d?„ ƒZ_eej`ƒd@dA„ ƒZaeej@ƒdBdC„ ƒZbeecej/ƒdDdE„ ƒZdeeeejfƒdFdG„ ƒZgeehejiƒdHdI„ ƒZjedJej/ej/ƒdKdL„ ƒZkeelejmƒdMdN„ ƒZneeoejpƒdOdP„ ƒZqeerƒdQdR„ ƒZseerejKƒdSdT„ ƒZteeoƒdUdV„ ƒZueeodWdX�dYdZ„ ƒZvd[d\„ Zwd]d^„ Zxeexej\ƒeexejyƒd_d`„ ƒƒZzeewej\ƒeewejyƒdadb„ ƒƒZ{d dcl|m}Z}m~Z~ d ddlmZm€Z€ ee}ej�ej‚ƒee}ejƒej‚ƒdedf„ ƒƒZ„eeOƒdgdh„ ƒZ…eeOƒdidj„ ƒZ†eeJƒdkdl„ ƒZ‡eeJƒdmdn„ ƒZˆe€dodp„ ƒZ‰e€dqdp„ ƒZŠe€drds„ ƒZ‹eeOƒdtdu„ ƒZŒeeJƒdvdw„ ƒZ�eejŽe Mej/¡ƒdxdy„ ƒZ�ee�ƒd›dzd{„ƒZ‘ee’ƒd|d}„ ƒZ“ee”ƒd~d„ ƒZ•d€d�„ Z–ee—ƒd‚dƒ„ ƒZ˜ee–ƒd„d…„ ƒZ™d†d‡„ Zšeešƒdˆd‰„ ƒZ›edŠd‹„ ƒZœedŒd�ƒZ�e�ƒ ZžeeŸddŽ�d�d�„ ƒZ eeŸƒd‘d’„ ƒZ¡ed“d”„ ƒZ¢ee£ƒd•d–„ ƒZ¤ee¥ƒd—d˜„ ƒZ¦ee§ƒdœd™dš„ƒZ¨dS )�é    )Ú
namedtupleN)Úreduce)Úir)Úlower_builtinÚlower_getattrÚlower_getattr_genericÚ
lower_castÚlower_constantÚiternext_implÚcall_getiterÚcall_iternextÚimpl_ret_borrowedÚimpl_ret_untrackedÚnumba_typeref_ctor)ÚtypingÚtypesÚutilsÚcgutils)ÚoverloadÚ	intrinsic)Ú
Conversion)ÚTypingErrorÚLoweringErrorÚNumbaExperimentalFeatureWarningÚNumbaTypeErrorÚRequireLiteralValueÚNumbaPerformanceWarning)Úliteral_unroll)Úas_numba_typec                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   | S ©N© ©Úvalr    r    úO/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cpython/builtins.pyÚimpl   s    zol_truth.<locals>.impl©Ú
isinstancer   ÚBoolean)r"   r$   r    r    r#   Úol_truth   s    r(   c                 C   s   |   tj|¡}| |||ƒ¡S )z3
    Implement `x is not y` as `not (x is y)`.
    )Úget_functionÚoperatorÚis_Únot_)ÚcontextÚbuilderÚsigÚargsZis_implr    r    r#   Úgeneric_is_not#   s    r1   c                 C   sj   |j \}}||kr`|jr&d}t|ƒ‚qfz|  tj|¡}W n tk
rR   tj Y S X |||ƒS ntjS dS )z-
    Default implementation for `x is y`
    zno default `is` implementationN)	r0   Zmutabler   r)   r*   ÚeqÚNotImplementedErrorr   Ú	false_bit)r-   r.   r/   r0   Úlhs_typeÚrhs_typeÚmsgÚeq_implr    r    r#   Ú
generic_is,   s    

r9   c                 C   sN   |j \}}||krD| |d tj¡}| |d tj¡}| d||¡S tjS dS )z7
    Implementation for `x is y` for Opaque types.
    r   é   z==N)r0   Zptrtointr   Zintp_tZicmp_unsignedr4   )r-   r.   r/   r0   r5   r6   Zlhs_ptrZrhs_ptrr    r    r#   Ú	opaque_isF   s    
r;   c                 C   sb   |\}}|j \}}|  |||tj¡}|  |||tj¡}	|  tjt tjtjtj¡¡}
|
|||	fƒS )zà
    Implementation for `x is y` for types derived from types.Boolean
    (e.g. BooleanLiteral), and cross-checks between literal and non-literal
    booleans, to satisfy Python's behavior preserving identity for bools.
    )	r0   Úcastr   Úbooleanr)   r*   r2   r   Ú	signature)r-   r.   r/   r0   Úarg1Úarg2Z	arg1_typeZ	arg2_typeZ_arg1Z_arg2r8   r    r    r#   Úbool_is_implV   s    
þrA   c                 C   s@   |j \}}d}|j|jkrd}t t d¡|¡}t| ||j|ƒS ©Nr   r:   ©r0   Úliteral_valuer   ÚConstantÚIntTyper   Úreturn_type©r-   r.   r/   r0   r?   r@   r"   Úresr    r    r#   Úconst_eq_impli   s    
rJ   c                 C   s@   |j \}}d}|j|jkrd}t t d¡|¡}t| ||j|ƒS rB   rC   rH   r    r    r#   Úconst_ne_implu   s    
rK   c                    s   ‡ fdd„}|S )Nc                    sL   t | tjƒ}t |tjƒ}|r0|r0‡ fdd„}|S ||A rH‡ fdd„}|S d S )Nc                    s   ˆ S r   r    ©ÚaÚbr!   r    r#   r$   …   s    z/gen_non_eq.<locals>.none_equality.<locals>.implc                    s   ˆ  S r   r    rL   r!   r    r#   r$   ‰   s    ©r&   r   ÚNoneType)rM   rN   Za_noneZb_noner$   r!   r    r#   Únone_equality�   s    z!gen_non_eq.<locals>.none_equalityr    )r"   rQ   r    r!   r#   Ú
gen_non_eq€   s    rR   TFc                 C   s4   |  ¡ }|  ||||¡}|  ||¡}|| ||||ƒS )z>
    Deferred.__getattr__ => redirect to the actual type.
    )Úgetr<   Úget_getattr)r-   r.   ÚtypÚvalueÚattrZ
inner_typer"   Úimpr    r    r#   Údeferred_getattr“   s    rY   c                 C   s0   |   |||| ¡ ¡}| j| }| || ¡ |¡S r   )r<   rS   Údata_model_managerÚsetZmake_uninitialized)r-   r.   ÚfromtyÚtotyr"   ÚactualÚmodelr    r    r#   Úany_to_deferred�   s    
r`   c                 C   s*   | j | }| ||¡}|  ||| ¡ |¡S r   )rZ   rS   r<   )r-   r.   r\   r]   r"   r_   r    r    r#   Údeferred_to_any¥   s    
ra   c                 C   s0   |\}}|  ||g¡}| |¡}t| ||j|ƒS r   )ÚgepÚloadr   rG   )r-   r.   r/   r0   Úbase_ptrÚidxÚelem_ptrrI   r    r    r#   Úgetitem_cpointer°   s    
rg   c                 C   s(   |\}}}|  ||g¡}| ||¡ d S r   )rb   Ústore)r-   r.   r/   r0   rd   re   r"   rf   r    r    r#   Úsetitem_cpointer¸   s    
ri   c           	         sX   t |ƒt |ƒkst||fƒ‚t |ƒdks,t‚‡ ‡‡fdd„}t||ƒ}t||ƒ\}}|S )Nr   c                    sŠ   | \}}|\}}ˆj  ||¡}|d k	s*t‚ˆ ˆ |||¡}ˆ ˆ |||¡}t tj||¡}ˆ ˆ|¡}|ˆ ||fƒ}	ˆ  	|	||¡}
||
fS r   )
Ztyping_contextZunify_typesÚAssertionErrorr<   r   r>   r   r=   r)   Úselect)ZaccumulatorrV   ZacctyÚaccZvtyÚvÚtyZcmpsigÚgeÚpredrI   ©r.   Úcmpopr-   r    r#   Úbinary_minmaxÅ   s    z do_minmax.<locals>.binary_minmax)Úlenrj   Úzipr   )	r-   r.   Úargtysr0   rr   rs   ZtypvalsZrestyZresvalr    rq   r#   Ú	do_minmaxÁ   s    
rw   c                 C   s0   t |jd ƒ}t ||d ¡}t| |||tjƒS ©Nr   )Úlistr0   r   Úunpack_tuplerw   r*   Úgt©r-   r.   r/   r0   rv   r    r    r#   Úmax_iterableÙ   s    r}   c                 C   s   t | ||j|tjƒS r   )rw   r0   r*   r{   ©r-   r.   r/   r0   r    r    r#   Ú
max_varargß   s    r   c                 C   s0   t |jd ƒ}t ||d ¡}t| |||tjƒS rx   )ry   r0   r   rz   rw   r*   Últr|   r    r    r#   Úmin_iterableã   s    r�   c                 C   s   t | ||j|tjƒS r   )rw   r0   r*   r€   r~   r    r    r#   Ú
min_varargé   s    r‚   c                 C   s   d| j f S )Nzllvm.rint.f%d)Úbitwidth)Útpr    r    r#   Ú_round_intrinsicî   s    r…   c           
      C   sj   |j d }|  |¡}|j}t ||g¡}t ||t|ƒ¡}| ||¡}	| 	|	|  |j
¡¡}	t| ||j
|	ƒS rx   )r0   Zget_value_typeÚmoduler   ÚFunctionTyper   Zget_or_insert_functionr…   ÚcallZfptosirG   r   )
r-   r.   r/   r0   ÚflttyZlltyr†   ÚfntyÚfnrI   r    r    r#   Úround_impl_unaryò   s    

rŒ   c                    sN   |j d }t t|ƒt ||¡¡‰ ‡ fdd„}|  ||||¡}t| ||j|ƒS )Nr   c                    s’   t  | ¡st  | ¡r| S |dkrp|dkr:d|d  }d}nd| }d}| | | }t  |¡r`| S ˆ |ƒ| | S d|  }| | }ˆ |ƒ| S d S )Nr   é   g      $@g’ÕMÏð€Dg      ð?)ÚmathÚisinfÚisnan)ÚxÚndigitsZpow1Zpow2Úy©Z_roundr    r#   Úround_ndigits  s    

z(round_impl_binary.<locals>.round_ndigits)	r0   r   ZExternalFunctionr…   r   r>   Úcompile_internalr   rG   )r-   r.   r/   r0   r‰   r•   rI   r    r”   r#   Úround_impl_binaryþ   s    
 
ÿr—   c                 C   s0   |j \}|\}|  ||||j¡}t| ||j|ƒS r   )r0   r<   rG   r   )r-   r.   r/   r0   rn   r"   rI   r    r    r#   Úint_impl$  s    r˜   c                 C   sâ   |j }|j}t|jƒdkrr|j\}|\}t|tjƒrT|  ||||¡}t| ||j |ƒS |  ||||¡}	|  	|d¡}
n@t|jƒdkr²|j\}}|\}	}
|  ||	||¡}	|  ||
||¡}
|  
||¡}|	|_|
|_| ¡ }t| ||j |ƒS )Nr:   r   é   )rG   Zunderlying_floatrt   r0   r&   r   ÚComplexr<   r   Úget_constantZmake_complexÚrealÚimagÚ	_getvalue)r-   r.   r/   r0   Zcomplex_typeZ
float_typeZargtyÚargrI   rœ   r�   ZrealtyZimagtyZcmplxr    r    r#   Úcomplex_impl-  s(    
r    c                    sf   t |jtjƒrB|jj‰ ‡ fdd„}|  ||||¡}t| ||j|ƒS |\}|j\}|  ||||j¡S dS )z1
    Call a number class, e.g. np.int32(...)
    c                     s   t j| ˆ d�S )N)Údtype)ÚnpÚarray)Zarg_hack©Údtr    r#   ÚfooQ  s    znumber_constructor.<locals>.fooN)	r&   rG   r   ÚArrayr¡   r–   r   r0   r<   )r-   r.   r/   r0   r¦   rI   r"   Zvaltyr    r¤   r#   Únumber_constructorI  s    r¨   c                 C   s   |   ¡ S r   ©Úget_dummy_value©r-   r.   rn   Úpyvalr    r    r#   Úconstant_dummy_  s    r­   c                 C   s0   |   |¡}| j|| |¡t|ƒd�}| ||¡S )N)Úinfo)Zget_function_pointer_typeZadd_dynamic_addrZget_pointerÚstrZbitcast)r-   r.   rn   r¬   ZptrtyZptrvalr    r    r#   Úconstant_function_pointerd  s
    
ÿr°   c                 C   s*   |d kr|   ||j¡S |  ||j|¡S d S r   )Zmake_optional_noneÚtypeZmake_optional_valuer«   r    r    r#   Úconstant_optionall  s    r²   c                 C   s   |   ¡ S )z&
    One-argument type() builtin.
    r©   r~   r    r    r#   Ú	type_implv  s    r³   c                 C   s    |j \}|\}t| |||ƒ}|S r   )r0   r   )r-   r.   r/   r0   rn   r"   Úitervalr    r    r#   Ú	iter_impl~  s    rµ   c              	   C   sX   |j \}|\}t| |||ƒ}|j| | ¡ ¡dd�� | j |td¡ W 5 Q R X | ¡ S )NF)Zlikelyr    )	r0   r   Zif_thenr,   Zis_validZ	call_convZreturn_user_excÚStopIterationZyielded_value)r-   r.   r/   r0   Zitertyr´   rI   r    r    r#   Ú	next_impl†  s    r·   znot inc                 C   s"   dd„ }|   ||||¡}| |¡S )Nc                 S   s   t  || ¡S r   )r*   ÚcontainsrL   r    r    r#   Úin_impl—  s    znot_in.<locals>.in_impl)r–   r,   )r-   r.   r/   r0   r¹   rI   r    r    r#   Únot_in•  s    rº   c                 C   s0   |j \}|j}|  |t|jƒ¡}t| ||j|ƒS r   )r0   rG   r›   rt   r   r   )r-   r.   r/   r0   rn   ÚrettyrI   r    r    r#   Úconstsized_len   s    r¼   c                 C   s    |j \}t|ƒrtjS tjS d S r   )r0   rt   r   Útrue_bitr4   )r-   r.   r/   r0   rn   r    r    r#   Ú
sized_bool¨  s    r¾   c                 C   s    |j }|  |¡}t| ||j |ƒS r   )rG   Zget_constant_undefr   )r-   r.   r/   r0   r»   rI   r    r    r#   Úlower_empty_tuple°  s    
r¿   c                 C   s   |\}t | ||j|ƒS r   )r   rG   )r-   r.   r/   r0   r"   r    r    r#   Úlower_tuple¶  s    rÀ   c                 C   s6   t jt jt jt jt jt jf}t| |ƒr2dd„ }|S d S )Nc                 S   s   t | ƒdkS rx   )rt   ©r‘   r    r    r#   Ú	bool_implÇ  s    z bool_sequence.<locals>.bool_impl)r   ZCharSeqZUnicodeCharSeqÚDictTypeÚListTypeÚUnicodeTypeÚSetr&   )r‘   Zvalid_typesrÂ   r    r    r#   Úbool_sequence»  s    ú	
rÇ   Úalways)Úinlinec                 C   s    t | tjƒs| d krdd„ S d S )Nc                 S   s   dS ©NFr    rÁ   r    r    r#   Ú<lambda>Î  ó    zbool_none.<locals>.<lambda>rO   rÁ   r    r    r#   Ú	bool_noneË  s    rÍ   c                 C   s0   t | tjƒrtjS t | tjƒr$| jS tdƒ‚d S ©NzUnsupported type)r&   r   ÚFloatr¢   ÚinfÚIntegerÚmaxvalr3   ©rU   r    r    r#   Úget_type_max_valueÒ  s
    rÔ   c                 C   s2   t | tjƒrtj S t | tjƒr&| jS tdƒ‚d S rÎ   )r&   r   rÏ   r¢   rÐ   rÑ   Úminvalr3   rÓ   r    r    r#   Úget_type_min_valueÙ  s
    rÖ   c           
      C   sâ   |j d j}t|tjƒr<|j}t |¡}|j}t 	||¡}n˜t|tj
ƒrœ|j}|dkr`t ¡ }n|dkrrt ¡ }ntdƒ‚ttd |¡ƒ}	t 	|tj ¡}n8t|tjtjfƒrÔd}t |¡}tjjd }t 	||¡}t| |||ƒS )Nr   é    é@   ú+llvmlite only supports 32 and 64 bit floatsúfloat{}r:   )r0   r¡   r&   r   rÑ   rƒ   r   rF   rÕ   rE   rÏ   Ú	FloatTypeÚ
DoubleTyper3   Úgetattrr¢   ÚformatrÐ   Ú
NPDatetimeÚNPTimedeltaÚint64r   ©
r-   r.   r/   r0   rU   ÚbwZltyr"   rI   Znptyr    r    r#   Úlower_get_type_min_valueà  s*    



rä   c           
      C   sÜ   |j d j}t|tjƒr<|j}t |¡}|j}t 	||¡}n’t|tj
ƒrš|j}|dkr`t ¡ }n|dkrrt ¡ }ntdƒ‚ttd |¡ƒ}	t 	|tj¡}n4t|tjtjfƒrÎd}t |¡}tjj}t 	||¡}t| |||ƒS )Nr   r×   rØ   rÙ   rÚ   )r0   r¡   r&   r   rÑ   rƒ   r   rF   rÒ   rE   rÏ   rÛ   rÜ   r3   rÝ   r¢   rÞ   rÐ   rß   rà   rá   r   râ   r    r    r#   Úlower_get_type_max_valueû  s*    



rå   )Ú
IndexValueÚIndexValueType)r   Úregister_jitablec                 C   s2   |j }|\}}t |¡| |ƒ}||_||_| ¡ S r   )rG   r   Zcreate_struct_proxyÚindexrV   rž   )r-   r.   r/   r0   rU   ré   rV   Zindex_valuer    r    r#   Úimpl_index_value  s    rê   c                 C   s$   t | tƒr t |tƒr dd„ }|S d S )Nc                 S   sx   t  | j¡r4t  |j¡r.| j|jk r(| S |S qt| S n@t  |j¡rD|S | j|jkrT|S | j|jkrt| j|jk rp| S |S | S r   ©r¢   r�   rV   ré   ©Úindval1Úindval2r    r    r#   Úmin_impl*  s    zindval_min.<locals>.min_impl©r&   rç   )rí   rî   rï   r    r    r#   Ú
indval_min&  s
    
ÿrñ   c                 C   s(   t | tjƒr$t |tjƒr$dd„ }|S d S )Nc                 S   s   | o|S r   r    ©Úval1Úval2r    r    r#   Úbool_min_implG  s    z"boolval_min.<locals>.bool_min_implr%   )ró   rô   rõ   r    r    r#   Úboolval_minC  s
    
ÿrö   c                 C   s$   t | tƒr t |tƒr dd„ }|S d S )Nc                 S   sx   t  | j¡r4t  |j¡r.| j|jk r(| S |S qt| S n@t  |j¡rD|S |j| jkrT|S | j|jkrt| j|jk rp| S |S | S r   rë   rì   r    r    r#   Úmax_implP  s    zindval_max.<locals>.max_implrð   )rí   rî   r÷   r    r    r#   Ú
indval_maxL  s
    
ÿrø   c                 C   s(   t | tjƒr$t |tjƒr$dd„ }|S d S )Nc                 S   s   | p|S r   r    rò   r    r    r#   Úbool_max_implm  s    z"boolval_max.<locals>.bool_max_implr%   )ró   rô   rù   r    r    r#   Úboolval_maxi  s
    
ÿrú   c                 C   s   | |kS r   r    rL   r    r    r#   rË   r  rÌ   rË   c                 C   s   | |k S r   r    rL   r    r    r#   rË   s  rÌ   c                    s    t | tjƒr‡ fdd„}|S d S )Nc                    s,   t | ƒ}t|ƒ}|D ]}ˆ ||ƒr|}q|S r   )ÚiterÚnext)ÚiterableÚitÚ
return_valr"   ©Úopr    r#   r$   y  s    
zmin_max_impl.<locals>.impl)r&   r   ÚIterableType)rý   r  r$   r    r   r#   Úmin_max_implv  s    r  c                 C   s
   t | tƒS r   )r  Ú	less_than©rý   r    r    r#   Úiterable_minƒ  s    r  c                 C   s
   t | tƒS r   )r  Úgreater_thanr  r    r    r#   Úiterable_maxˆ  s    r  c                 C   sz   |j }dd„ }tj |j¡}t |t |¡|¡}t|ƒdkrT|  	¡ |  
|||¡f}n|  	¡ |  
||d¡f}|  ||||¡S )ae  Redirect constructor implementation to `numba_typeref_ctor(cls, *args)`,
    which should be overloaded by the type's implementation.

    For example:

        d = Dict()

    `d` will be typed as `TypeRef[DictType]()`.  Thus, it will call into this
    implementation.  We need to redirect the lowering to a function
    named ``numba_typeref_ctor``.
    c                 W   s   t | f|žŽ S r   )r   )Úclsr0   r    r    r#   Ú	call_ctorœ  s    z%redirect_type_ctor.<locals>.call_ctorr   r    )rG   r   ÚTupleZ
from_typesr0   r   r>   ÚTypeRefrt   rª   Z
make_tupler–   )r-   r.   r/   r0   r	  r
  Z	ctor_argsr    r    r#   Úredirect_type_ctor�  s    ÿÿr  c                    s¢   d }t |tjƒrd}n"t |tjƒr(d}nt |tjƒr8d}|d k	rRdj|Ž }t|ƒ‚t | tjjtj	tj
tjtjfƒrxt‰ nt | tjjƒrŒt‰ nd S d‡ fdd„	}|S )	N)ÚstringsÚ )ÚbytesrN   )Ú	bytearrayrN   z/sum() can't sum {} [use {}''.join(seq) instead]r   c                    s   |}ˆ | ƒD ]}|| }q|S r   r    )rý   Ústartrl   r‘   ©Úiteratorr    r#   r$   È  s    
zol_sum.<locals>.impl)r   )r&   r   rÅ   ÚBytesZ	ByteArrayrÞ   r   Ú
containersZ_HomogeneousTupleÚListrÄ   r§   Ú	RangeTyperû   Z_HeterogeneousTupler   )rý   r  Úerrorr7   r$   r    r  r#   Úol_sum­  s*    
  ÿr  c                 G   s   dd„ }|S )Nc                 w   s"   t |f|žŽ D ]}| |Ž V  qd S r   )ru   )Úfuncrý   r0   r‘   r    r    r#   r$   ×  s    zol_map.<locals>.implr    )r  rý   r0   r$   r    r    r#   Úol_mapÕ  s    r  c                 C   s*   | d kst | tjƒrdd„ }ndd„ }|S )Nc                 s   s   |D ]}|r|V  qd S r   r    ©r  rý   r‘   r    r    r#   r$   à  s    zol_filter.<locals>.implc                 s   s   |D ]}| |ƒr|V  qd S r   r    r  r    r    r#   r$   å  s    rO   )r  rý   r$   r    r    r#   Ú	ol_filterÝ  s    
r  c                 C   s   d S r   r    ©ÚvarÚtypsr    r    r#   Ú_isinstance_no_warnì  s    r"  c                 C   s   d}t j|td� t| |ƒS )Nz>Use of isinstance() detected. This is an experimental feature.)Úcategory)ÚwarningsÚwarnr   Úol_isinstance_no_warn)r   r!  r7   r    r    r#   Úol_isinstanceð  s    r'  c                 C   s4  dd„ }dd„ }t | ƒ}t|tjƒr8d|› d�}t|ƒ‚tjtjtjtjtj	tj
tjtjtjtjtjtjtjtjtjtjf}t||ƒsšd|› d�}t|ƒ‚|}t|tjƒr´|jd	 }t|tjƒsÆ|f}|D �]b}t|tjƒrè|jd	 }	nt|tjƒrú|}	n|j}	ttjttjttjtj	fttj
ttjttji}
|	|
k�rPt||
|	 ƒrÊ|  S qÊt|tjƒ�r–|	tjtjfk�r|d
}t|ƒ‚t|ƒ|	k�rŽ|n|  S t |	ƒ}||k�r°|  S t|tjƒ�rät|tjƒ�rä|j|jjk�rä|  S t|tj ƒrÊ|jd	 tj!krÊt||j"ƒ�s&t|tjƒrÊt|tjƒrÊ|  S qÊ|S )Nc                 S   s   dS )NTr    r  r    r    r#   Ú	true_implü  s    z(ol_isinstance_no_warn.<locals>.true_implc                 S   s   dS rÊ   r    r  r    r    r#   Ú
false_implÿ  s    z)ol_isinstance_no_warn.<locals>.false_implz1isinstance cannot handle optional types. Found: "ú"z1isinstance() does not support variables of type "z".r   zLNumba type classes (except numba.typed.* container types) are not supported.)#r   r&   r   ÚOptionalr   ÚNumberr  r  rÃ   ZLiteralStrKeyDictr  rÄ   r  ZUniTuplerÆ   ÚFunctionZ	ClassTyperÅ   ZClassInstanceTyperP   r§   Úkeyr  ÚrangeÚdictry   ÚtupleÚ	BaseTupler[   r  r±   Zinstance_typeÚ	ContainerÚ	undefinedÚ	__class__)r   r!  r(  r)  Zvar_tyr7   Zsupported_var_tyZt_typsrU   r.  Ztypes_not_registeredZ	numba_typr    r    r#   r&  ù  s˜             ü


   
   ú


ÿþÿ
ÿ
þ
r&  c                 C   s   d S r   r    ©ÚobjÚnamer    r    r#   Ú_getattr_raise_attr_exc[  s    r9  c                    s<   t |tjƒstdƒ‚|j}d| › d|› d�‰ ‡ fdd„}|S )Nú(argument 'name' must be a literal stringú'z' has no attribute 'c                    s   t ˆ ƒ‚d S r   )ÚAttributeErrorr6  ©Úmessager    r#   r$   h  s    z(ol__getattr_raise_attr_exc.<locals>.impl)r&   r   ÚStringLiteralr   rD   )r7  r8  Úlnamer$   r    r=  r#   Úol__getattr_raise_attr_exca  s    rA  c                    s  t |tjƒstdƒ‚|j‰|  ˆˆ¡‰t ˆtjƒrRdˆ› dˆ› dˆ› d�}t|ƒ‚ˆd krÄt ˆtjƒrpˆj	t
ksŠˆˆ|ˆƒ}‡fdd„}n8|  t¡‰ˆ | ˆ|fi ¡‰t ˆ|ˆ¡}‡‡fdd„}nFˆˆ|ˆƒ}t ˆtjƒrì‡‡fd	d„}n|  ˆˆ¡‰ ‡ ‡‡‡fd
d„}||fS )Nr:  zQReturning function objects is not implemented. getattr() was requested to return z from attribute 'z' of Ú.c                    s   |d }| j  |ˆ |¡ |S ©Néÿÿÿÿ)ÚnrtÚincref)Úcgctxr.   r/   ÚllargsÚtmp)Údefaultr    r#   r$   ‚  s    zresolve_getattr.<locals>.implc                    s   |   ˆ ˆ¡}|||d d… ƒS rC  )r)   )rG  r.   r/   rH  Znative_impl)rŠ   Ú	raise_sigr    r#   r$   ‹  s    c                    s<   ˆ j }|  ||d ˆ|¡}|  |||¡}| j |ˆ |¡ |S rx   )Úthisr<   Zget_bound_functionrE  rF  )rG  r.   r/   Úll_argsZ	cast_typeÚcastedrI   )r‹   r7  r    r#   r$   “  s
    c                    sD   |   ˆˆ¡}|| |ˆ|d ˆƒ}|  ||ˆ ˆ¡}| j |ˆ|¡ |S rx   )rT   r<   rE  rF  )rG  r.   r/   rM  Z	attr_implrI   rN  )Úattrtyr‹   r@  r7  r    r#   r$   �  s
    )r&   r   r?  r   rD   Úresolve_getattrr-  r   Ú
NamedTupleZinstance_classÚ_getattr_default_typeZresolve_value_typer9  Zget_call_typeÚnoneZBoundFunction)Útyctxr7  r8  rJ  r7   r/   r$   r    )rO  rJ  r‹   rŠ   r@  r7  rK  r#   rP  m  s.    ÿ
	rP  rR  r  )Zprefer_literalc                 C   s   dd„ }|S )Nc                 S   s   t | |tƒS r   )rP  Ú_getattr_defaultr6  r    r    r#   r$   °  s    zol_getattr_2.<locals>.implr    ©r7  r8  r$   r    r    r#   Úol_getattr_2®  s    rW  c                 C   s   dd„ }|S )Nc                 S   s   t | ||ƒS r   )rP  )r7  r8  rJ  r    r    r#   r$   »  s    zol_getattr_3.<locals>.implr    )r7  r8  rJ  r$   r    r    r#   Úol_getattr_3¹  s    rX  c                    sb   t |tjƒstdƒ‚|j}|  ||¡‰ ˆ d kr:t d¡}n
t d¡}|||ƒ}‡ fdd„}||fS )Nr:  FTc                    s   ˆ d krt jS t jS r   )r   r4   r½   )rG  r.   r/   rM  ©r‹   r    r#   r$   Ñ  s    zresolve_hasattr.<locals>.impl)r&   r   r?  r   rD   rP  Úliteral)rT  r7  r8  r@  r»   r/   r$   r    rY  r#   Úresolve_hasattrÀ  s    

r[  c                 C   s   dd„ }|S )Nc                 S   s
   t | |ƒS r   )r[  r6  r    r    r#   r$   Ü  s    zol_hasattr.<locals>.implr    rV  r    r    r#   Ú
ol_hasattrÚ  s    r\  c                    s   d| › d�‰ ‡ fdd„}|S )Nz<object type:ú>c                    s&   d}t | |ƒdkrt| |ƒƒ S ˆ S d S )NÚ__repr__T)ÚhasattrrÝ   )r7  rW   ©Zmissing_repr_formatr    r#   r$   ä  s    zol_repr_generic.<locals>.implr    )r7  r$   r    r`  r#   Úol_repr_genericá  s    ra  c                 C   s   ddd„}|S )Nr  c                 S   s*   d}t | |ƒdkrt| |ƒƒ S t| ƒS d S )NÚ__str__T)r_  rÝ   Úrepr)ÚobjectrW   r    r    r#   r$   ñ  s    zol_str_generic.<locals>.impl)r  r    )rd  r$   r    r    r#   Úol_str_genericï  s    
re  )r   )r  )©Úcollectionsr   rŽ   Ú	functoolsr   Únumpyr¢   r*   r$  Zllvmliter   Znumba.core.imputilsr   r   r   r   r	   r
   r   r   r   r   r   Z
numba.corer   r   r   r   Znumba.core.extendingr   r   Znumba.core.typeconvr   Znumba.core.errorsr   r   r   r   r   r   Znumba.misc.specialr   Znumba.core.typing.asnumbatyper   Útruthr(   Úis_notÚAnyr1   r+   r9   ZOpaquer;   r'   rA   r2   ÚLiteralZIntegerLiteralrJ   ÚnerK   rR   ZDeferredTyperY   r+  r`   ra   ÚgetitemZCPointerrÑ   rg   Úsetitemri   rw   Úmaxr2  r}   ZVarArgr   Úminr�   r‚   r…   ÚroundrÏ   rŒ   r—   ÚintÚfloatr˜   Úcomplexr    ZNumberClassr¨   ZDummyr­   ZExternalFunctionPointerr°   r²   r±   r³   rû   r  rµ   rü   ZIteratorTyper·   rº   rt   Z
ConstSizedr¼   ÚboolÚSizedr¾   r1  r¿   rÀ   rÇ   rÍ   rÔ   rÖ   ZDTyperä   rå   Znumba.core.typing.builtinsræ   rç   Znumba.extendingrè   ZintpÚTypeZuintprê   rñ   rö   rø   rú   r  r  r  r  r  r  r  Úsumr  Úmapr  Úfilterr  r"  r&   r'  r&  r9  rA  rP  rR  rU  rÝ   rW  rX  r[  r_  r\  rc  ra  r¯   re  r    r    r    r#   Ú<module>   s4  4 





	
	










%






	





















	







'



a

9







