U
    Ã9%eÚÃ  ã                   @   s
  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	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mZmZ d dlmZmZ d dlmZ dd	„ Zd
d„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#e
e$ej%ej%ƒdd„ ƒZ&e
ej'ej%ej%ƒe
ej(ej%ej%ƒdd„ ƒƒZ)e
ej*ej%ej%ƒe
ej+ej%ej%ƒdd„ ƒƒZ,e
ej-ej%ej%ƒe
ej.ej%ej%ƒdd„ ƒƒZ/dd„ Z0d d!„ Z1e
ej2ej%ej3ƒe
ej4ej%ej3ƒe
ej2ej5ej3ƒe
ej4ej5ej3ƒd"d#„ ƒƒƒƒZ6d$d%„ Z7d&d'„ Z8d(d)„ Z9d*d+„ Z:d,d-„ Z;d.d/„ Z<d0d1„ Z=d2d3„ Z>d4d5„ Z?d6d7„ Z@d8d9„ ZAd:d;„ ZBd<d=„ ZCd>d?„ ZDd@dA„ ZEdBdC„ ZFdDdE„ ZGdFdG„ ZHdHdI„ ZIdJdK„ ZJdLdM„ ZKdNdO„ ZLdPdQ„ ZMdRdS„ ZNdTdU„ ZOe
ejPejQejQƒe?ƒ e
ejRejQejQƒe@ƒ e
ejSejQejQƒe;ƒ e
ejTejQejQƒe<ƒ e
ejUejQejQƒe=ƒ e
ejVejQejQƒe>ƒ e
ejWejQƒeNƒ e
ejXejQƒeOƒ dVdW„ ZYdXdY„ ZZeYƒ  eZƒ  dZd[„ Z[d\d]„ Z\d^d_„ Z]d`da„ Z^dbdc„ Z_ddde„ Z`e
e$ej5ej5ƒdÐdfdg„ƒZadÑdhdi„ZbdÒdjdk„Zcdldm„ Zddndo„ Zedpdq„ Zfdrds„ Zgdtdu„ Zhdvdw„ Zidxdy„ Zjdzd{„ Zkd|d}„ Zld~d„ Zmd€d„ Znej5Zoe
ejpeoeoƒe[ƒ e
ejqeoeoƒe[ƒ e
ejreoeoƒe\ƒ e
ejseoeoƒe\ƒ e
ejteoeoƒe]ƒ e
ejueoeoƒe]ƒ e
ej'eoeoƒecƒ e
ej(eoeoƒecƒ e
ej*eoeoƒe^ƒ e
ej+eoeoƒe^ƒ e
ej-eoeoƒebƒ e
ej.eoeoƒebƒ e
ej2eoeoƒedƒ e
ej4eoeoƒedƒ e
e2eoeoƒedƒ e
ejPeoeoƒeiƒ e
ejReoeoƒejƒ e
ejSeoeoƒeeƒ e
ejTeoeoƒefƒ e
ejUeoeoƒegƒ e
ejVeoeoƒehƒ e
eveoƒekƒ e
ejWeoƒelƒ e
ejXeoƒemƒ [oeejwd‚ƒdƒd„„ ƒZxeejwd…ƒd†d‡„ ƒZye
dˆejwƒd‰dŠ„ ƒZzd‹dŒ„ Z{ddŽ„ Z|dd„ Z}ej5ej%fD ]0Z~ee~d‚ƒe{ƒ ee~d…ƒe|ƒ e
dˆe~ƒe}ƒ qe
ej2ejwejwƒe
ej4ejwejwƒe
e2ejwejwƒd‘d’„ ƒƒƒZd“d”„ Z€d•d–„ Zd—d˜„ Z‚eƒd™ƒZ„dšd›„ Z…dœd„ Z†dždŸ„ Z‡d d¡„ Zˆd¢d£„ Z‰d¤d¥„ ZŠejwZoe
ejpeoeoƒe€ƒ e
ejqeoeoƒe€ƒ e
ejreoeoƒeƒ e
ejseoeoƒeƒ e
ejteoeoƒe‚ƒ e
ejueoeoƒe‚ƒ e
ej*eoeoƒe…ƒ e
ej+eoeoƒe…ƒ e
ejWeoƒe†ƒ e
ejXeoƒe‡ƒ e
ejPeoeoƒeˆƒ e
ejReoeoƒe‰ƒ e
eveoƒeŠƒ [oe
d¦ej‹ƒe
d¦ejŒƒd§d¨„ ƒƒZd©dª„ ZŽe
eej‹ƒd«d¬„ ƒZe
eej%ƒd­d®„ ƒZ‘e
eej5ƒd¯d°„ ƒZ’e
eejwƒd±d²„ ƒZ“ej%ej5ejwfD ]Zoe
ej”eoƒeŽƒ qLe
ej”ejQƒeŽƒ eej3ej%ƒeej3ej5ƒeej3ejwƒd³d´„ ƒƒƒZ•eej%ej%ƒdµd¶„ ƒZ–eej%ej—ƒd·d¸„ ƒZ˜eej5ej5ƒd¹dº„ ƒZ™eej%ej5ƒd»d¼„ ƒZšeej5ej%ƒd½d¾„ ƒZ›eej5ejwƒeej%ejwƒd¿dÀ„ ƒƒZœeejwejwƒdÁdÂ„ ƒZeejžej‹ƒdÃdÄ„ ƒZŸeej‹ejŒƒdÅdÆ„ ƒZ eej3ej‹ƒeej¡ej‹ƒdÇdÈ„ ƒƒZ¢eejwƒdÉdÊ„ ƒZ£eej%ƒeej5ƒeej‹ƒdËdÌ„ ƒƒƒZ¤dÍdÎ„ Z¥eej5dÏƒe¥ƒ eej%dÏƒe¥ƒ dS )Óé    N)Úir)ÚConstant)Úlower_builtinÚlower_getattrÚlower_getattr_genericÚ
lower_castÚlower_constantÚimpl_ret_borrowedÚimpl_ret_untracked)ÚtypingÚtypesÚutilsÚerrorsÚcgutilsÚoptional)Ú	intrinsicÚoverload_method©Úviewerc                 C   s   | j rdgS g S dS )z;
    Return the modifier flags for integer arithmetic.
    ZnswN)Úsigned)Zrettype© r   úT/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/cpython/numbers.pyÚ_int_arith_flags   s    r   c                 C   s\   |\}}|j \}}|  ||||j¡}|  ||||j¡}	|j||	t|jƒd}
t| ||j|
ƒS ©N)Úflags)ÚargsÚcastÚreturn_typeÚaddr   r
   ©ÚcontextÚbuilderÚsigr   ÚvaÚvbÚtaÚtbÚaÚbÚresr   r   r   Úint_add_impl#   s    
r*   c                 C   s\   |\}}|j \}}|  ||||j¡}|  ||||j¡}	|j||	t|jƒd}
t| ||j|
ƒS r   )r   r   r   Úsubr   r
   r   r   r   r   Úint_sub_impl,   s    
r,   c                 C   s\   |\}}|j \}}|  ||||j¡}|  ||||j¡}	|j||	t|jƒd}
t| ||j|
ƒS r   )r   r   r   Úmulr   r
   r   r   r   r   Úint_mul_impl5   s    
r.   c                 C   s`  |j |j kst‚|  d¡}|  d¡}t ||¡}t ||¡}| | d||  |j¡¡| d||  d¡¡¡}	|j| |	¡ddÈ | 	||¡}
| 
||¡}| d| ||¡|¡}| d||¡}| ||¡}| |¡j\}}| | |
|¡ | ||¡ W 5 Q R X |. | | |
|¡|¡ | | ||¡|¡ W 5 Q R X W 5 Q R X W 5 Q R X | |¡| |¡fS )	a@  
    Reference Objects/intobject.c
    xdivy = x / y;
    xmody = (long)(x - (unsigned long)xdivy * y);
    /* If the signs of x and y differ, and the remainder is non-0,
     * C89 doesn't define whether xdivy is now the floor or the
     * ceiling of the infinitely precise quotient.  We want the floor,
     * and we have it iff the remainder's sign matches y's.
     */
    if (xmody && ((y ^ xmody) < 0) /* i.e. and signs differ */) {
        xmody += y;
        --xdivy;
        assert(xmody && ((y ^ xmody) >= 0));
    }
    *p_xdivy = xdivy;
    *p_xmody = xmody;
    r   é   ú==éÿÿÿÿT©Zlikelyú<ú!=)ÚtypeÚAssertionErrorr   Zalloca_once_valueÚand_Úicmp_signedÚminvalÚif_thenÚnot_ZsdivZsremÚxorÚif_elseÚstorer+   r   Úload)r    r!   ÚtyÚxÚyÚZEROÚONEZresdivZresmodZis_overflowZxdivyZxmodyZy_xor_xmody_ltzZxmody_istrueZcondZif_different_signsZif_same_signsr   r   r   Úint_divmod_signed>   s.    

þ2rE   c                 C   s2   |j rt| ||||ƒS | ||¡| ||¡fS dS )zD
    Integer divmod(x, y).  The caller must ensure that y != 0.
    N)r   rE   ZudivZurem)r    r!   r@   rA   rB   r   r   r   Ú
int_divmodw   s    rF   c              
   C   s  |\}}|j \}}|j}	t|	tjƒr*|	j}	|  ||||	¡}
|  ||||	¡}tj||
j	dd}tj||
j	dd}|j
t ||¡dd~\}}|. | j ||f¡s¸| ||¡ | ||¡ W 5 Q R X |2 t| ||	|
|ƒ\}}| ||¡ | ||¡ W 5 Q R X W 5 Q R X ||fS )NÚquot©ÚnameÚremFr2   )r   r   Ú
isinstancer   ZUniTupleÚdtyper   r   Úalloca_oncer5   r=   Úis_scalar_zeroÚerror_modelÚfp_zero_divisionr>   rF   )r    r!   r"   r   Zzerodiv_messager#   r$   r%   r&   r@   r'   r(   rG   rJ   Úif_zeroÚif_non_zeroÚqÚrr   r   r   Ú_int_divmod_impl   s.    
 ÿ rU   c                 C   s0   t | |||dƒ\}}t || |¡| |¡f¡S )Nzinteger divmod by zero)rU   r   Ú
pack_arrayr?   ©r    r!   r"   r   rG   rJ   r   r   r   Úint_divmod_implŸ   s    
ÿÿrX   c                 C   s   t | |||dƒ\}}| |¡S )Nzinteger division by zero©rU   r?   rW   r   r   r   Úint_floordiv_impl¨   s    
ÿrZ   c              	   C   sx   |\}}|j \}}|  ||||j¡}|  ||||j¡}	t ||	¡ | j |d¡ W 5 Q R X | ||	¡}
t| ||j|
ƒS )N©zdivision by zero)	r   r   r   r   rQ   rO   rP   Úfdivr
   r   r   r   r   Úint_truediv_impl°   s    
r]   c                 C   s   t | |||dƒ\}}| |¡S )Nzinteger modulo by zerorY   rW   r   r   r   Úint_rem_impl½   s    
ÿr^   c                 C   s*   t |tjƒr"| jjs"d|jd > S dS d S )Nr1   r/   F)rK   r   ÚIntegerrO   Zraise_on_fp_zero_divisionÚbitwidth)r    r   r   r   r   Ú_get_power_zerodiv_returnÅ   s
    ÿra   c                    sR   t |jd tjƒ‰ |j‰t| ˆƒ‰‡ ‡‡fdd„}|  ||||¡}t| ||j|ƒS )z@
    a ^ b, where a is an integer or real, and b an integer
    r   c                    sº   ˆdƒ}ˆ| ƒ} |dk r`d}| }|dk r.t ‚ˆ rh| dkrJˆrBˆS tdƒ‚| dkrh| dkrhdS nd}|}|dkr€t | t|ƒ¡S |dkrª|d@ r˜|| 9 }|dL }| | 9 } q€|r¶d| S |S )	Nr/   r   Tú&0 cannot be raised to a negative powerr1   Fé   ç      ð?)ÚOverflowErrorÚZeroDivisionErrorÚmathÚpowÚfloat)r'   r(   rT   ÚinvertÚexp©Ú
is_integerÚtpÚzerodiv_returnr   r   Ú	int_powerÖ   s0    
z!int_power_impl.<locals>.int_power)rK   r   r   r_   r   ra   Úcompile_internalr
   )r    r!   r"   r   rp   r)   r   rl   r   Úint_power_implÎ   s    
rr   c                    sü   |j d j}t|tjƒst‚t|ƒdkr,t‚|dk }t|ƒ}|j}t|tj	ƒ‰t
| |ƒ‰|  ˆ |d |j d |¡}|j}‡ ‡fdd„}	|dƒ}
|}|dkrÀ|d@ r¬|	|
|ƒ}
|dL }|	||ƒ}q’|røˆrÖ‡fdd„}ndd„ }|  ˆ |t ||¡|
f¡}
|
S )	zH
    a ^ b, where a is an integer or real, and b a constant integer
    r/   rc   r   c                    s    ˆrˆ   | |¡S ˆ  | |¡S d S ©N)r-   Úfmul)r'   r(   )r!   rm   r   r   r-     s    zstatic_power_impl.<locals>.mulc                    s4   | dkrˆ rˆ S t dƒ‚| dkr,| dkr,dS | S d S )Nr   rb   r/   r1   )rf   ©r'   )ro   r   r   Úinvert_impl$  s    z&static_power_impl.<locals>.invert_implc                 S   s   d|  S )Nrd   r   ru   r   r   r   rv   1  s    )r   ÚvaluerK   ÚnumbersÚIntegralÚNotImplementedErrorÚabsr   r   r_   ra   r   r5   rq   r   Ú	signature)r    r!   r"   r   rk   rj   rn   ÚvalÚltyr-   r)   r'   rv   r   )r!   rm   ro   r   Ústatic_power_implù   s:    


 ÿr   c                 C   s   |j d|žŽ }t| ||j|ƒS ©Nr3   )r3   ©r8   r
   r   ©r    r!   r"   r   r)   r   r   r   Úint_slt_impl:  s    rƒ   c                 C   s   |j d|žŽ }t| ||j|ƒS ©Nú<=)r…   r   r‚   r   r   r   Úint_sle_impl?  s    r†   c                 C   s   |j d|žŽ }t| ||j|ƒS ©Nú>)rˆ   r   r‚   r   r   r   Úint_sgt_implD  s    r‰   c                 C   s   |j d|žŽ }t| ||j|ƒS ©Nú>=)r‹   r   r‚   r   r   r   Úint_sge_implI  s    rŒ   c                 C   s   |j d|žŽ }t| ||j|ƒS r€   ©Úicmp_unsignedr
   r   r‚   r   r   r   Úint_ult_implN  s    r   c                 C   s   |j d|žŽ }t| ||j|ƒS r„   r   r‚   r   r   r   Úint_ule_implS  s    r   c                 C   s   |j d|žŽ }t| ||j|ƒS r‡   r   r‚   r   r   r   Úint_ugt_implX  s    r‘   c                 C   s   |j d|žŽ }t| ||j|ƒS rŠ   r   r‚   r   r   r   Úint_uge_impl]  s    r’   c                 C   s   |j d|žŽ }t| ||j|ƒS ©Nr0   )r0   r   r‚   r   r   r   Úint_eq_implb  s    r”   c                 C   s   |j d|žŽ }t| ||j|ƒS ©Nr4   )r4   r   r‚   r   r   r   Úint_ne_implg  s    r–   c                    s   ‡ fdd„}|S )Nc           
         s`   |\}}|  d|t|jdƒ¡}|  ˆ |t|jdƒ¡}| ˆ ||¡}| |||¡}	t| ||j|	ƒS ©Nr3   r   ©r8   r   r5   rŽ   Úselectr
   r   ©
r    r!   r"   r   ÚleftÚrightÚcmp_zeroÚlt_zeroZge_zeror)   ©Úopr   r   Úimplm  s    
z%int_signed_unsigned_cmp.<locals>.implr   ©r    r¡   r   rŸ   r   Úint_signed_unsigned_cmpl  s    r£   c                    s   ‡ fdd„}|S )Nc           
         s`   |\}}|  d|t|jdƒ¡}|  ˆ t|jdƒ|¡}| ˆ ||¡}| |||¡}	t| ||j|	ƒS r—   r˜   rš   rŸ   r   r   r¡     s    z%int_unsigned_signed_cmp.<locals>.implr   r¢   r   rŸ   r   Úint_unsigned_signed_cmp€  s    r¤   c           	      C   sH   |\}t |jd ƒ}| d||¡}| |¡}| |||¡}t| ||j|ƒS )Nr3   )r   r5   r8   Únegr™   r
   r   )	r    r!   r"   r   rA   rC   ZltzZnegatedr)   r   r   r   Úint_abs_implŒ  s    
r¦   c                 C   s   |\}t | ||j|ƒS rs   ©r
   r   )r    r!   r"   r   rA   r   r   r   Úuint_abs_impl•  s    r¨   c           	      C   sR   |j \}}|\}}|  ||||j¡}|  ||||j¡}| ||¡}t| ||j|ƒS rs   )r   r   r   Zshlr
   ©	r    r!   r"   r   ZvaltyZamttyr}   Úamtr)   r   r   r   Úint_shl_implš  s    
r«   c           	      C   sh   |j \}}|\}}|  ||||j¡}|  ||||j¡}|jjrL| ||¡}n| ||¡}t| ||j|ƒS rs   )r   r   r   r   ZashrZlshrr
   r©   r   r   r   Úint_shr_impl£  s    
r¬   c                 C   sR   |j \}}|\}}|  ||||j¡}|  ||||j¡}	| ||	¡}
t| ||j|
ƒS rs   )r   r   r   r7   r
   ©r    r!   r"   r   ÚatZbtÚavZbvZcavZcbcr)   r   r   r   Úint_and_impl¯  s    
r°   c                 C   sR   |j \}}|\}}|  ||||j¡}|  ||||j¡}	| ||	¡}
t| ||j|
ƒS rs   )r   r   r   Úor_r
   r­   r   r   r   Úint_or_impl¸  s    
r²   c                 C   sR   |j \}}|\}}|  ||||j¡}|  ||||j¡}	| ||	¡}
t| ||j|
ƒS rs   )r   r   r   r<   r
   r­   r   r   r   Úint_xor_implÁ  s    
r³   c                 C   s:   |j \}|\}| |¡}|  ||||j¡}t| ||j|ƒS rs   )r   r¥   r   r   r
   ©r    r!   r"   r   Útypr}   r)   r   r   r   Úint_negate_implÊ  s
    
r¶   c                 C   s0   |j \}|\}|  ||||j¡}t| ||j|ƒS rs   ©r   r   r   r
   r´   r   r   r   Úint_positive_implÓ  s    r¸   c                 C   sR   |j \}|\}| |t|jtd|jj dƒƒ¡}|  ||||j¡}t| ||j|ƒS )NÚ1é   )	r   r<   r   r5   ÚintÚwidthr   r   r
   r´   r   r   r   Úint_invert_implÚ  s
    "r½   c              	   C   s`  |\}t |jdƒ}t |jdƒ}t |jdƒ}| d||¡}| d||¡}	t ||j¡}
| d¡}| d¡}| d¡}| d	¡}| d
¡}| |||¡ | |¡ | 	||
¡ | 
|¡ W 5 Q R X | |¡ | |	||¡ W 5 Q R X | |¡ | 	||
¡ | 
|¡ W 5 Q R X | |¡ | 	||
¡ | 
|¡ W 5 Q R X | |¡ | |
¡}t| ||j|ƒS )z
    np.sign(int)
    r/   r1   r   r0   rˆ   z.zeroz.postestz.posz.negz.exit)r   r5   rŽ   r8   r   rM   Úappend_basic_blockZcbranchZ
goto_blockr>   ÚbranchZposition_at_endr?   r
   r   )r    r!   r"   r   rA   ÚPOSÚNEGrC   r   Zcmp_posÚpresultZbb_zeroZ
bb_postestZbb_posZbb_negZbb_exitr)   r   r   r   Úint_sign_implã  s6    






rÃ   c                 C   s:   |j \}|\}|  ||||j¡}| |¡}t| ||j|ƒS rs   )r   r   r   r¥   r
   r´   r   r   r   Úbool_negate_impl  s
    
rÄ   c                 C   s0   |j \}|\}|  ||||j¡}t| ||j|ƒS rs   r·   r´   r   r   r   Úbool_unary_positive_impl  s    rÅ   c                  C   sÊ  t j} ttj| | ƒtƒ ttj| | ƒtƒ ttj| | ƒtƒ ttj	| | ƒtƒ ttj
| | ƒtƒ ttj| | ƒtƒ ttj| | ƒtƒ ttj| | ƒtƒ ttj| | ƒtƒ ttj| | ƒtƒ ttj| | ƒtƒ ttj| | ƒtƒ ttj| ƒtƒ ttj| ƒtƒ ttj| | ƒtƒ ttj| | ƒtƒ tt| | ƒtƒ t jD ]–} ttj| | ƒt ƒ ttj!| | ƒt"ƒ ttj#| | ƒt$ƒ ttj%| | ƒt&ƒ ttjt j'| ƒtƒ ttjt j'| ƒtƒ ttt j'| ƒtƒ tt(| ƒt)ƒ q8ttjt j*t j*ƒt+ƒ ttj#t j*t j*ƒt+ƒ ttj!t j*t j*ƒt+ƒ ttj%t j*t j*ƒt+ƒ t j,D ]–} ttj| | ƒt+ƒ ttj!| | ƒt-ƒ ttj#| | ƒt.ƒ ttj%| | ƒt/ƒ ttjt j'| ƒtƒ ttjt j'| ƒtƒ ttt j'| ƒtƒ tt(| ƒt0ƒ q.d S rs   )1r   r_   r   Úoperatorr   r*   Úiaddr+   r,   Úisubr-   r.   ÚimulÚeqr”   Úner–   Úlshiftr«   ÚilshiftÚrshiftr¬   Úirshiftr¥   r¶   Úposr¸   rh   rr   ÚipowZunsigned_domainÚltr   Úler   Úgtr‘   Úger’   ÚFloatr{   r¨   ÚIntegerLiteralrƒ   Zsigned_domainr†   r‰   rŒ   r¦   ©r@   r   r   r   Ú_implement_integer_operators&  sP    

rÙ   c                  C   s’   t jt jfD ]€} ttj| | ƒtƒ ttj| | ƒtƒ ttj| | ƒt	ƒ ttj
| | ƒt	ƒ ttj| | ƒtƒ ttj| | ƒtƒ ttj| ƒtƒ qd S rs   )r   ÚBooleanr_   r   rÆ   r7   r°   Úiandr±   r²   Úiorr<   r³   Úixorrj   r½   rØ   r   r   r   Ú_implement_bitwise_operatorsV  s    rÞ   c                 C   s   |j |Ž }t| ||j|ƒS rs   )Úfaddr
   r   r‚   r   r   r   Úreal_add_implf  s    
rà   c                 C   s   |j |Ž }t| ||j|ƒS rs   )Úfsubr
   r   r‚   r   r   r   Úreal_sub_implk  s    
râ   c                 C   s   |j |Ž }t| ||j|ƒS rs   )rt   r
   r   r‚   r   r   r   Úreal_mul_implp  s    
rã   c              	   C   sD   t  ||d ¡ | j |d¡ W 5 Q R X |j|Ž }t| ||j|ƒS )Nr/   r[   )r   rQ   rO   rP   r\   r
   r   r‚   r   r   r   Úreal_div_implu  s    
rä   c                 C   sÎ   |j |j kst‚|j }|j}|  d|j g¡}t |||t |¡f¡}t |||¡}|j	r¢d|_
t | d¡¡}	|j\}
}}t| |	|
|ƒ\}}|	 ||¡ |	 |¡ t ||¡}| ||||f¡}|| |¡fS )Nz.numba.python.remZlinkonce_odrÚentry)r5   r6   ÚmoduleZmanglerr   ÚFunctionTypeZPointerTyper   Úget_or_insert_functionZis_declarationÚlinkageZ	IRBuilderr¾   r   Úreal_divmod_func_bodyr>   ÚretrM   Úcallr?   )r    r!   rA   rB   Zfloattyræ   ÚfnameÚfntyÚfnZ	fnbuilderZfxÚfyÚpmodÚdivÚmodZquotientr   r   r   Úreal_divmod|  s     
rô   c                 C   sn  t  ||j¡}t  ||j¡}t  ||j¡}| ||¡}| | ||¡|¡}| ||¡ | ||¡ | d¡}	| d¡}
| d¡}| d||	¡}| d||	¡}| d||	¡}|j	|dd\}}|R | 
d||¡}| |¡. | | ||¡|¡ | | ||¡|¡ W 5 Q R X W 5 Q R X |  | ||
|	¡}| ||¡ W 5 Q R X W 5 Q R X ~~| |¡}| d||	¡}| |¡ tjtjdœ}|t|jƒ }|  tjt ||¡¡}|||gƒ}| ||¡}| ||¡}t|jd	ƒ}| d
||¡}| |||¡}| ||¡ W 5 Q R X t  ||¡> | ||¡}| ||¡ | | ||¡|¡}| ||¡ W 5 Q R X | |¡| |¡fS )Nç        g       €rd   r4   r3   Tr2   )ri   Údoubleg      à?rˆ   )r   rM   r5   Úfremr\   rá   r>   Úfcmp_unorderedÚfcmp_orderedr=   rŽ   r:   rß   r™   r?   r   Zfloat32Zfloat64ÚstrÚget_functionrg   Úfloorr   r|   r   Zifnotrt   )r    r!   ZvxZwxrñ   ZpdivZ	pfloordivró   rò   rC   ZNZEROrD   Z
mod_istrueZwx_ltzZmod_ltzZif_nonzero_modZif_zero_modZwx_ltz_ne_mod_ltzZ
div_istrueZrealtypemapZrealtypeZfloorfnÚfloordivZfloordivdiffZfloordivincrZHALFÚpredr   r   r   rê   ’  s\    .


( 
ÿ
ÿrê   c              
   C   sø   |\}}t j||jdd}t j||jdd}|jt  ||¡dd”\}	}
|	F | j |d|¡sŽ| ||¡}| ||¡}| 	||¡ | 	||¡ W 5 Q R X |
0 t
| |||ƒ\}}| 	||¡ | 	||¡ W 5 Q R X W 5 Q R X t  || |¡| |¡f¡S )NrG   rH   rJ   Fr2   ©zmodulo by zero)r   rM   r5   r=   rN   rO   rP   r\   r÷   r>   rô   rV   r?   )r    r!   r"   r   ÚlocrA   rB   rG   rJ   rQ   rR   rS   rT   r   r   r   Úreal_divmod_implþ  s,      ÿ ÿr  c              
   C   s¸   |\}}t  ||j¡}|jt  ||¡ddp\}}	|. | j |d|¡s`| ||¡}
| |
|¡ W 5 Q R X |	$ t	| |||ƒ\}}
| |
|¡ W 5 Q R X W 5 Q R X t
| ||j| |¡ƒS )NFr2   rÿ   )r   rM   r5   r=   rN   rO   rP   r÷   r>   rô   r
   r   r?   )r    r!   r"   r   r   rA   rB   r)   rQ   rR   rJ   Ú_r   r   r   Úreal_mod_impl  s$      ÿ 
ÿr  c              
   C   s¸   |\}}t  ||j¡}|jt  ||¡ddp\}}	|. | j |d|¡s`| ||¡}
| |
|¡ W 5 Q R X |	$ t	| |||ƒ\}
}| |
|¡ W 5 Q R X W 5 Q R X t
| ||j| |¡ƒS )NFr2   r[   )r   rM   r5   r=   rN   rO   rP   r\   r>   rô   r
   r   r?   )r    r!   r"   r   r   rA   rB   r)   rQ   rR   rG   r  r   r   r   Úreal_floordiv_impl+  s$      ÿ 
ÿr  c           
      C   s^   |\}}|j }| jr.|  tj|¡}|||ƒ}n | d|jg¡}	| |	||f¡}t| ||j	|ƒS )Nzllvm.pow)
ræ   Zimplement_powi_as_math_callrû   rg   rh   Zdeclare_intrinsicr5   rì   r
   r   )
r    r!   r"   r   rA   rB   ræ   Úimpr)   rï   r   r   r   Úreal_power_impl>  s    r  c                 C   s   |j d|žŽ }t| ||j|ƒS r€   ©rù   r
   r   r‚   r   r   r   Úreal_lt_implJ  s    r  c                 C   s   |j d|žŽ }t| ||j|ƒS r„   r  r‚   r   r   r   Úreal_le_implO  s    r	  c                 C   s   |j d|žŽ }t| ||j|ƒS r‡   r  r‚   r   r   r   Úreal_gt_implT  s    r
  c                 C   s   |j d|žŽ }t| ||j|ƒS rŠ   r  r‚   r   r   r   Úreal_ge_implY  s    r  c                 C   s   |j d|žŽ }t| ||j|ƒS r“   r  r‚   r   r   r   Úreal_eq_impl^  s    r  c                 C   s   |j d|žŽ }t| ||j|ƒS r•   )rø   r
   r   r‚   r   r   r   Úreal_ne_implc  s    r  c                 C   s,   |j \}t ||¡}|  tj|¡}|||ƒS rs   )r   r   r|   rû   rg   Úfabs)r    r!   r"   r   r@   r¡   r   r   r   Úreal_abs_implh  s    r  c                 C   s,   ddl m} | ||d ¡}t| ||j|ƒS ©Nr   ©Úmathimpl)Únumba.cpythonr  Únegate_realr
   r   )r    r!   r"   r   r  r)   r   r   r   Úreal_negate_implo  s    r  c                 C   s0   |j \}|\}|  ||||j¡}t| ||j|ƒS rs   r·   r´   r   r   r   Úreal_positive_implu  s    r  c                 C   s  |\}t |jdƒ}t |jdƒ}t |jdƒ}t ||j¡}| d||¡}	| d||¡}
| |	¡ˆ\}}| | ||¡ W 5 Q R X |X | |
¡B\}}| | ||¡ W 5 Q R X | | ||¡ W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X | |¡}t| ||j	|ƒS )z
    np.sign(float)
    r/   r1   r   rˆ   r3   )
r   r5   r   rM   rù   r=   r>   r?   r
   r   )r    r!   r"   r   rA   rÀ   rÁ   rC   rÂ   Zis_posZis_negZgt_zeroZnot_gt_zerorž   Znot_lt_zeror)   r   r   r   Úreal_sign_impl|  s$    4
r  Úrealc                 C   s$   | j |||d}|j}t| |||ƒS ©N©rw   )Úmake_complexr  r
   ©r    r!   rµ   rw   Zcplxr)   r   r   r   Úcomplex_real_impl»  s    r  Úimagc                 C   s$   | j |||d}|j}t| |||ƒS r  )r  r  r
   r  r   r   r   Úcomplex_imag_implÁ  s    r  zcomplex.conjugatec                 C   sL   ddl m} |  ||jd |d ¡}| ||j¡|_| ¡ }t| ||j|ƒS r  )	r  r  r  r   r  r  Ú	_getvaluer
   r   )r    r!   r"   r   r  Úzr)   r   r   r   Úcomplex_conjugate_implÇ  s
    r"  c                 C   s   t | |||ƒS rs   )r
   )r    r!   rµ   rw   r   r   r   Úreal_real_implÏ  s    r#  c                 C   s   t  |j¡}t| |||ƒS rs   )r   Zget_null_valuer5   r
   )r    r!   rµ   rw   r)   r   r   r   Úreal_imag_implÒ  s    r$  c                 C   s   t | ||j|d ƒS ©Nr   r§   ©r    r!   r"   r   r   r   r   Úreal_conjugate_implÖ  s    r'  c              
   C   sx  |\}}|j d }|j}| j|||d}| j|||d}	|  ||¡}
|j}| ¡ }|	 ¡ }|
 ¡ }|  |d¡}|  |d¡}| d|	j|¡}| d|	j|¡}| 	||¡}| 
|¡¨\}}|8 t| ||||fƒ}| j|||d}|j|
_|j|
_W 5 Q R X |R tjdtjdi| }t t ¡ |jgd ¡}t |||¡}| ||||f¡ W 5 Q R X W 5 Q R X | |¡}t| ||j|ƒS )Nr   r  rº   r0   Znumba_cpowfZ
numba_cpowé   )r   Úunderlying_floatZmake_helperræ   Z_getpointerÚget_constantrù   r  r  r7   r=   Úcomplex_mul_implr   Z	complex64Z
complex128r   rç   ZVoidTyper5   r   rè   rì   r?   r
   r   )r    r!   r"   r   ÚcaÚcbr@   Úftyr'   r(   Úcræ   ÚpaZpbZpcZTWOrC   Zb_real_is_twoZb_imag_is_zeroZb_is_twoZthenZ	otherwiser)   ZcresÚ	func_namerî   Zcpowr   r   r   Úcomplex_power_implß  sD    
  þý&
r2  c                 C   sŠ   |\}}|j d }| j|||d}| j|||d}|  ||¡}	|j}
|j}|j}|j}| |
|¡|	_| ||¡|	_|	 ¡ }t| ||j|ƒS ©Nr   r  )r   r  r  r  rß   r   r
   r   ©r    r!   r"   r   ÚcxÚcyr@   rA   rB   r!  r'   r(   r/  Údr)   r   r   r   Úcomplex_add_impl  s    
r8  c                 C   sŠ   |\}}|j d }| j|||d}| j|||d}|  ||¡}	|j}
|j}|j}|j}| |
|¡|	_| ||¡|	_|	 ¡ }t| ||j|ƒS r3  )r   r  r  r  rá   r   r
   r   r4  r   r   r   Úcomplex_sub_impl  s    
r9  c                 C   sº   |\}}|j d }| j|||d}| j|||d}|  ||¡}	|j}
|j}|j}|j}| |
|¡}| ||¡}| |
|¡}| ||¡}| ||¡|	_| ||¡|	_|	 ¡ }t| ||j	|ƒS )z'
    (a+bi)(c+di)=(ac-bd)+i(ad+bc)
    r   r  )
r   r  r  r  rt   rá   rß   r   r
   r   )r    r!   r"   r   r5  r6  r@   rA   rB   r!  r'   r(   r/  r7  ÚacZbdÚadÚbcr)   r   r   r   r+  +  s"    
r+  Únanc                 C   s(   dd„ }|   ||||¡}t| ||j|ƒS )Nc                 S   sÌ   | j }| j}|j }|j}|s(|s(tdƒ‚t|ƒt|ƒkr||sFtttƒS || }|||  }t|||  | |||  | ƒS |sŠtttƒS || }|| | }t| j | | j | | j| | j  | ƒS d S )Nzcomplex division by zero)r  r  rf   r{   ÚcomplexÚNAN)r'   r(   ZarealZaimagZbrealZbimagÚratioÚdenomr   r   r   Úcomplex_divE  s.    
þ
þz%complex_div_impl.<locals>.complex_div©rq   r
   r   )r    r!   r"   r   rB  r)   r   r   r   Úcomplex_div_implD  s    rD  c           	      C   sn   ddl m} |j\}|\}| j|||d}|  ||¡}| ||j¡|_| ||j¡|_| ¡ }t| ||j	|ƒS )Nr   r  r  )
r  r  r   r  r  r  r  r   r
   r   )	r    r!   r"   r   r  rµ   r}   Úcmplxr)   r   r   r   Úcomplex_negate_impld  s    rF  c                 C   s   |\}t | ||j|ƒS rs   r§   ©r    r!   r"   r   r}   r   r   r   Úcomplex_positive_implp  s    rH  c                 C   sr   |\}}|j d }| j|||d}| j|||d}| d|j|j¡}	| d|j|j¡}
| |	|
¡}t| ||j|ƒS )Nr   r  r0   )r   r  rù   r  r  r7   r
   r   )r    r!   r"   r   r5  r6  rµ   rA   rB   Zreals_are_eqZimags_are_eqr)   r   r   r   Úcomplex_eq_implu  s    
rI  c                 C   sr   |\}}|j d }| j|||d}| j|||d}| d|j|j¡}	| d|j|j¡}
| |	|
¡}t| ||j|ƒS )Nr   r  r4   )r   r  rø   r  r  r±   r
   r   )r    r!   r"   r   r5  r6  rµ   rA   rB   Zreals_are_neZimags_are_ner)   r   r   r   Úcomplex_ne_impl  s    
rJ  c                 C   s(   dd„ }|   ||||¡}t| ||j|ƒS )z)
    abs(z) := hypot(z.real, z.imag)
    c                 S   s   t  | j| j¡S rs   )rg   Úhypotr  r  )r!  r   r   r   Úcomplex_abs‘  s    z%complex_abs_impl.<locals>.complex_absrC  )r    r!   r"   r   rL  r)   r   r   r   Úcomplex_abs_impl  s    rM  znumber.itemc                 C   s   |d S )z;
    The no-op .item() method on booleans and numbers.
    r   r   r&  r   r   r   Únumber_item_impl®  s    rN  c                 C   s:   |j \}|\}|  ||||j¡}| |¡}t| ||j|ƒS rs   )r   r   r   r;   r
   )r    r!   r"   r   rµ   r}   Zistruer)   r   r   r   Únumber_not_implº  s
    
rO  c                 C   s
   |\}|S rs   r   rG  r   r   r   Úbool_as_boolÁ  s    rP  c                 C   s   |\}|  d|t|jdƒ¡S )Nr4   r   )rŽ   r   r5   rG  r   r   r   Úint_as_boolÆ  s    rQ  c                 C   s   |\}|  d|t|jdƒ¡S )Nr4   rõ   )rø   r   r5   rG  r   r   r   Úfloat_as_boolË  s    rR  c                 C   s^   |j \}|\}|  |||¡}|j|j }}t|jdƒ}	| d||	¡}
| d||	¡}| |
|¡S )Nrõ   r4   )r   r  r  r  r   r5   rø   r±   )r    r!   r"   r   rµ   r}   rE  r  r  ÚzeroZreal_istrueZimag_istruer   r   r   Úcomplex_as_boolÐ  s    rT  c                 C   s$   |   ||j|j¡}|  |||j|¡S rs   )Úget_constant_genericÚliteral_typeÚliteral_valuer   ©r    r!   ÚfromtyÚtotyr}   Zlitr   r   r   Úliteral_int_to_numberè  s    ýr[  c                 C   s\   |j |j kr|S |j |j k r.| ||  |¡¡S |jrF| ||  |¡¡S | ||  |¡¡S d S rs   )r`   ÚtruncÚget_value_typer   ZsextÚzext©r    r!   rY  rZ  r}   r   r   r   Úinteger_to_integerô  s    r`  c                 C   s   |  ||  |¡¡S rs   )Zinttoptrr]  r_  r   r   r   Úinteger_to_voidptr  s    ra  c                 C   s2   |   |¡}|j|jk r"| ||¡S | ||¡S d S rs   )r]  r`   ZfpextZfptrunc©r    r!   rY  rZ  r}   r~   r   r   r   Úfloat_to_float  s    
rc  c                 C   s,   |   |¡}|jr| ||¡S | ||¡S d S rs   )r]  r   ZsitofpZuitofprb  r   r   r   Úinteger_to_float  s    
rd  c                 C   s,   |   |¡}|jr| ||¡S | ||¡S d S rs   )r]  r   ZfptosiZfptouirb  r   r   r   Úfloat_to_integer  s    
re  c                 C   s@   |   ||||j¡}|  |jd¡}|  ||¡}||_||_| ¡ S r%  )r   r)  r*  r  r  r  r   )r    r!   rY  rZ  r}   r  r  rE  r   r   r   Únon_complex_to_complex  s    rf  c           	      C   sX   |j }|j }| j|||d}|  ||¡}|  ||j||¡|_|  ||j||¡|_| ¡ S r  )r)  r  r   r  r  r   )	r    r!   rY  rZ  r}   ZsrctyZdsttyÚsrcÚdstr   r   r   Úcomplex_to_complex*  s    ri  c                 C   s   |   |||¡S rs   )Úis_truer_  r   r   r   Úany_to_boolean5  s    rk  c                 C   s$   |  |t d¡¡}|  ||tj|¡S )Né    )r^  r   ZIntTyper   r   Zint32)r    r!   rY  rZ  r}   Zasintr   r   r   Úboolean_to_any9  s    rm  c                 C   s"   |   ||j|j¡}|  ||j|¡S rs   )rU  rV  rW  rj  rX  r   r   r   Úliteral_int_to_boolean?  s    ýrn  c                 C   s4   |j }|  |||j¡}|  |||j¡}t ||f¡S rs   )r)  rU  r  r  r   Zliteral_struct)r    r!   r@   Úpyvalr.  r  r  r   r   r   Úconstant_complexL  s    rp  c                 C   s&   t |tjƒrt|ƒ}|  |¡}||ƒS rs   )rK   ÚnpZbool_Úboolr]  )r    r!   r@   ro  r~   r   r   r   Úconstant_integerS  s    
rs  c                 C   sH   t | tjtjfƒrDt |tjjƒrD| j|jjkr8t 	d¡‚dd„ }|S dS )z) Typing for the np scalar 'view' method. zOChanging the dtype of a 0d array is only supported if the itemsize is unchangedc                 S   s
   t | |ƒS rs   r   )ÚscalarÚviewtyr   r   r   r¡   m  s    zscalar_view.<locals>.implN)
rK   r   rÖ   r_   ZabstractZ	DTypeSpecr`   rL   r   ZTypingError)rt  ru  r¡   r   r   r   Úscalar_viewd  s    ÿÿrv  Úview)N)N)N)¦rg   rx   Únumpyrq  rÆ   Zllvmliter   Zllvmlite.irr   Znumba.core.imputilsr   r   r   r   r   r	   r
   Z
numba.corer   r   r   r   r   r   Znumba.core.extendingr   r   Znumba.cpython.unsafe.numbersr   r   r*   r,   r.   rE   rF   rU   Údivmodr_   rX   rý   Ú	ifloordivrZ   ÚtruedivÚitruedivr]   ró   Úimodr^   ra   rr   rh   r×   rÑ   rÖ   r   rƒ   r†   r‰   rŒ   r   r   r‘   r’   r”   r–   r£   r¤   r¦   r¨   r«   r¬   r°   r²   r³   r¶   r¸   r½   rÃ   rÄ   rÅ   rÊ   ÚbooleanrË   rÒ   rÓ   rÔ   rÕ   r¥   rÐ   rÙ   rÞ   rà   râ   rã   rä   rô   rê   r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r@   r   rÇ   r+   rÈ   r-   rÉ   r{   ÚComplexr  r  r"  r#  r$  r'  Úclsr2  r8  r9  r+  ri   r?  rD  rF  rH  rI  rJ  rM  rÚ   ÚNumberrN  rO  rr  rP  rQ  rR  rT  r;   r[  r`  Zvoidptrra  rc  rd  re  rf  ri  ÚAnyrk  rm  ZBooleanLiteralrn  rp  rs  rv  r   r   r   r   Ú<module>   s¤  $ 			9

	+=							*0l







) 










		




	




