o
    ºiÚÃ  ã                   @   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 ]Z~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Žƒ q&e
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 )z;
    Return the modifier flags for integer arithmetic.
    Únsw)Úsigned)Úrettype© r   úV/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/cpython/old_numbers.pyÚ_int_arith_flags   s   r   c                 C   ó\   |\}}|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#   ó   
r-   c                 C   r   r   )r   r   r    Úsubr   r
   r"   r   r   r   Úint_sub_impl,   r.   r0   c                 C   r   r   )r   r   r    Úmulr   r
   r"   r   r   r   Úint_mul_impl5   r.   r2   c              
   C   s°  |j |j ksJ ‚|  d¡}|  d¡}t ||¡}t ||¡}| | d||  |j¡¡| d||  d¡¡¡}	|j| |	¡dd‡ | ||¡}
| 	||¡}| d| 
||¡|¡}| d||¡}| ||¡}| |¡N\}}| | |
|¡ | ||¡ W d	  ƒ n1 s…w   Y  | | | |
|¡|¡ | | ||¡|¡ W d	  ƒ n1 s«w   Y  W d	  ƒ n1 sºw   Y  W d	  ƒ n1 sÉw   Y  | |¡| |¡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©Úlikelyú<ú!=N)Útyper   Úalloca_once_valueÚand_Úicmp_signedÚminvalÚif_thenÚnot_ÚsdivÚsremÚxorÚif_elseÚstorer/   r!   Úload)r#   r$   ÚtyÚxÚyÚZEROÚONEÚresdivÚresmodÚis_overflowÚxdivyÚxmodyÚy_xor_xmody_ltzÚxmody_istrueÚcondÚif_different_signsÚif_same_signsr   r   r   Úint_divmod_signed>   s:   

þþþ€û€örV   c                 C   s.   |j rt| ||||ƒS | ||¡| ||¡fS )zD
    Integer divmod(x, y).  The caller must ensure that y != 0.
    )r   rV   ÚudivÚurem)r#   r$   rG   rH   rI   r   r   r   Ú
int_divmodw   s   rY   c              	   C   sf  |\}}|j \}}|j}	t|	tjƒr|	j}	|  ||||	¡}
|  ||||	¡}tj||
j	dd}tj||
j	dd}|j
t ||¡dde\}}| | j ||f¡s\| ||¡ | ||¡ W d   ƒ n1 sfw   Y  | t| ||	|
|ƒ\}}| ||¡ | ||¡ W d   ƒ n1 sŽw   Y  W d   ƒ ||fS W d   ƒ ||fS 1 sªw   Y  ||fS )NÚquot©ÚnameÚremFr6   )r   r    Ú
isinstancer   ÚUniTupleÚdtyper   r   Úalloca_oncer:   rD   Úis_scalar_zeroÚerror_modelÚfp_zero_divisionrE   rY   )r#   r$   r%   r   Úzerodiv_messager&   r'   r(   r)   rG   r*   r+   rZ   r]   Úif_zeroÚif_non_zeroÚqÚrr   r   r   Ú_int_divmod_impl   s>   
ÿ€ùý
öû
öñrj   c                 C   s0   t | |||dƒ\}}t || |¡| |¡f¡S )Nzinteger divmod by zero)rj   r   Ú
pack_arrayrF   ©r#   r$   r%   r   rZ   r]   r   r   r   Úint_divmod_implŸ   s   
ÿÿrm   c                 C   s   t | |||dƒ\}}| |¡S )Nzinteger division by zero©rj   rF   rl   r   r   r   Úint_floordiv_impl¨   ó   
ÿ
ro   c                 C   sŒ   |\}}|j \}}|  ||||j¡}|  ||||j¡}	t ||	¡ | j |d¡ W d   ƒ n1 s3w   Y  | ||	¡}
t| ||j|
ƒS )N©zdivision by zero)	r   r   r    r   rf   rc   rd   Úfdivr
   r"   r   r   r   Úint_truediv_impl°   s   
ÿrs   c                 C   s   t | |||dƒ\}}| |¡S )Nzinteger modulo by zerorn   rl   r   r   r   Úint_rem_impl½   rp   rt   c                 C   s&   t |tjƒr| jjsd|jd > S dS )Nr5   r3   F)r^   r   ÚIntegerrc   Úraise_on_fp_zero_divisionÚbitwidth)r#   r    r   r   r   Ú_get_power_zerodiv_returnÅ   s
   ÿrx   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 r0d}| }|dk rt ‚ˆ r/| dkr%ˆr!ˆS tdƒ‚| dkr/| dkr/dS nd}|}|dkr@t | t|ƒ¡S |dkrX|d@ rL|| 9 }|dL }| | 9 } |dksD|r^d| S |S )	Nr3   r   Tú&0 cannot be raised to a negative powerr5   Fé   ç      ð?)ÚOverflowErrorÚZeroDivisionErrorÚmathÚpowÚfloat)r*   r+   ri   ÚinvertÚexp©Ú
is_integerÚtpÚzerodiv_returnr   r   Ú	int_powerÖ   s4   €üz!int_power_impl.<locals>.int_power)r^   r   r   ru   r    rx   Úcompile_internalr
   )r#   r$   r%   r   r‡   r,   r   rƒ   r   Úint_power_implÎ   s   
r‰   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rc|d@ rV|	|
|ƒ}
|dL }|	||ƒ}|dksM|rˆrn‡fdd„}ndd„ }|  ˆ |t ||¡|
f¡}
|
S )	zH
    a ^ b, where a is an integer or real, and b a constant integer
    r3   rz   r   c                    s   ˆrˆ   | |¡S ˆ  | |¡S ©N)r1   Úfmul)r*   r+   )r$   r„   r   r   r1     s   zstatic_power_impl.<locals>.mulc                    s0   | dkrˆ rˆ S t dƒ‚| dkr| dkrdS | S )Nr   ry   r3   r5   )r}   ©r*   )r†   r   r   Úinvert_impl$  s   z&static_power_impl.<locals>.invert_implc                 S   s   d|  S )Nr{   r   rŒ   r   r   r   r   1  s   )r   Úvaluer^   ÚnumbersÚIntegralÚNotImplementedErrorÚabsr    r   ru   rx   r   r:   rˆ   r   Ú	signature)r#   r$   r%   r   r‚   r   r…   ÚvalÚltyr1   r,   r*   r   r   )r$   r„   r†   r   Ústatic_power_implù   s:   


üÿr–   c                 C   ó"   |j dg|¢R Ž }t| ||j|ƒS ©Nr8   ©r=   r
   r    ©r#   r$   r%   r   r,   r   r   r   Úint_slt_impl:  ó   r›   c                 C   r—   ©Nz<=r™   rš   r   r   r   Úint_sle_impl?  rœ   rž   c                 C   r—   ©Nú>r™   rš   r   r   r   Úint_sgt_implD  rœ   r¡   c                 C   r—   ©Nz>=r™   rš   r   r   r   Úint_sge_implI  rœ   r£   c                 C   r—   r˜   ©Úicmp_unsignedr
   r    rš   r   r   r   Úint_ult_implN  rœ   r¦   c                 C   r—   r   r¤   rš   r   r   r   Úint_ule_implS  rœ   r§   c                 C   r—   rŸ   r¤   rš   r   r   r   Úint_ugt_implX  rœ   r¨   c                 C   r—   r¢   r¤   rš   r   r   r   Úint_uge_impl]  rœ   r©   c                 C   r—   ©Nr4   r¤   rš   r   r   r   Úint_eq_implb  rœ   r«   c                 C   r—   ©Nr9   r¤   rš   r   r   r   Úint_ne_implg  rœ   r­   c                    ó   ‡ fdd„}|S )Nc           
         s`   |\}}|  d|t|jdƒ¡}|  ˆ |t|jdƒ¡}| ˆ ||¡}| |||¡}	t| ||j|	ƒS ©Nr8   r   ©r=   r   r:   r¥   Úselectr
   r    ©
r#   r$   r%   r   ÚleftÚrightÚcmp_zeroÚlt_zeroÚ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                    r®   )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 r˜   )r   r:   r=   Únegr±   r
   r    )	r#   r$   r%   r   rH   rJ   ÚltzÚnegatedr,   r   r   r   Úint_abs_implŒ  s   
rÁ   c                 C   ó   |\}t | ||j|ƒS rŠ   ©r
   r    )r#   r$   r%   r   rH   r   r   r   Úuint_abs_impl•  ó   rÄ   c           	      C   sR   |j \}}|\}}|  ||||j¡}|  ||||j¡}| ||¡}t| ||j|ƒS rŠ   )r   r   r    Úshlr
   ©	r#   r$   r%   r   ÚvaltyÚamttyr”   Úamtr,   r   r   r   Úint_shl_implš  ó   
rË   c           	      C   sh   |j \}}|\}}|  ||||j¡}|  ||||j¡}|jjr&| ||¡}n| ||¡}t| ||j|ƒS rŠ   )r   r   r    r   ÚashrÚlshrr
   rÇ   r   r   r   Úint_shr_impl£  s   
rÏ   c                 C   óR   |j \}}|\}}|  ||||j¡}|  ||||j¡}	| ||	¡}
t| ||j|
ƒS rŠ   )r   r   r    r<   r
   ©r#   r$   r%   r   ÚatÚbtÚavÚbvÚcavÚcbcr,   r   r   r   Úint_and_impl¯  rÌ   rØ   c                 C   rÐ   rŠ   )r   r   r    Úor_r
   rÑ   r   r   r   Úint_or_impl¸  rÌ   rÚ   c                 C   rÐ   rŠ   )r   r   r    rC   r
   rÑ   r   r   r   Úint_xor_implÁ  rÌ   rÛ   c                 C   s:   |j \}|\}| |¡}|  ||||j¡}t| ||j|ƒS rŠ   )r   r¾   r   r    r
   ©r#   r$   r%   r   Útypr”   r,   r   r   r   Úint_negate_implÊ  s
   
rÞ   c                 C   ó0   |j \}|\}|  ||||j¡}t| ||j|ƒS rŠ   ©r   r   r    r
   rÜ   r   r   r   Úint_positive_implÓ  ó   rá   c                 C   sR   |j \}|\}| |t|jtd|jj dƒƒ¡}|  ||||j¡}t| ||j|ƒS )NÚ1é   )	r   rC   r   r:   Ú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 d  ƒ n1 sew   Y  | |¡ | |	||¡ W d  ƒ n1 sw   Y  | |¡ | 	||
¡ | 
|¡ W d  ƒ n1 s¡w   Y  | |¡ | 	||
¡ | 
|¡ W d  ƒ n1 sÁw   Y  | |¡ | |
¡}t| ||j|ƒS )z
    np.sign(int)
    r3   r5   r   r4   r    z.zeroz.postestz.posz.negz.exitN)r   r:   r¥   r=   r   ra   Úappend_basic_blockÚcbranchÚ
goto_blockrE   ÚbranchÚposition_at_endrF   r
   r    )r#   r$   r%   r   rH   ÚPOSÚNEGrJ   rµ   Úcmp_posÚpresultÚbb_zeroÚ
bb_postestÚbb_posÚbb_negÚbb_exitr,   r   r   r   Úint_sign_implã  s>   




þÿþþ

rö   c                 C   s:   |j \}|\}|  ||||j¡}| |¡}t| ||j|ƒS rŠ   )r   r   r    r¾   r
   rÜ   r   r   r   Úbool_negate_impl  ó
   
r÷   c                 C   rß   rŠ   rà   rÜ   r   r   r   Úbool_unary_positive_impl  râ   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 ]J} 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)ƒ qœ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tj%t j*t j*ƒt+ƒ t j,D ]K} 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 rŠ   )1r   ru   r   Úoperatorr!   r-   Úiaddr/   r0   Úisubr1   r2   ÚimulÚeqr«   Úner­   ÚlshiftrË   ÚilshiftÚrshiftrÏ   Úirshiftr¾   rÞ   Úposrá   r   r‰   ÚipowÚunsigned_domainÚltr¦   Úler§   Úgtr¨   Úger©   ÚFloatr’   rÄ   ÚIntegerLiteralr›   Úsigned_domainrž   r¡   r£   rÁ   ©rG   r   r   r   Ú_implement_integer_operators&  sR   

ø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 rŠ   )r   ÚBooleanru   r   rú   r<   rØ   ÚiandrÙ   rÚ   ÚiorrC   rÛ   Úixorr   rç   r  r   r   r   Ú_implement_bitwise_operatorsV  s   ør  c                 C   ó   |j |Ž }t| ||j|ƒS rŠ   )Úfaddr
   r    rš   r   r   r   Úreal_add_implf  ó   
r  c                 C   r  rŠ   )Úfsubr
   r    rš   r   r   r   Úreal_sub_implk  r  r  c                 C   r  rŠ   )r‹   r
   r    rš   r   r   r   Úreal_mul_implp  r  r  c                 C   sX   t  ||d ¡ | j |d¡ W d   ƒ n1 sw   Y  |j|Ž }t| ||j|ƒS )Nr3   rq   )r   rf   rc   rd   rr   r
   r    rš   r   r   r   Úreal_div_implu  s
   ÿ
r  c                 C   sÎ   |j |j ksJ ‚|j }|j}|  d|j g¡}t |||t |¡f¡}t |||¡}|jrQd|_	t 
| d¡¡}	|j\}
}}t| |	|
|ƒ\}}|	 ||¡ |	 |¡ t ||¡}| ||||f¡}|| |¡fS )Nz.numba.python.remÚlinkonce_odrÚentry)r:   ÚmoduleÚmanglerr   ÚFunctionTypeÚPointerTyper   Úget_or_insert_functionÚis_declarationÚlinkageÚ	IRBuilderrè   r   Úreal_divmod_func_bodyrE   Úretra   ÚcallrF   )r#   r$   rH   rI   Úfloattyr  ÚfnameÚfntyÚfnÚ	fnbuilderÚfxÚfyÚpmodÚdivÚmodÚquotientr   r   r   Úreal_divmod|  s    
r5  c              
   C   sê  t  ||j¡}t  ||j¡}t  ||j¡}| ||¡}| | ||¡|¡}| ||¡ | ||¡ | d¡}	| d¡}
| d¡}| d||	¡}| d||	¡}| d||	¡}|j	|ddk\}}|8 | 
d||¡}| |¡ | | ||¡|¡ | | ||¡|¡ W d   ƒ n1 sw   Y  W d   ƒ n1 sœw   Y  | | ||
|	¡}| ||¡ W d   ƒ n1 s»w   Y  W d   ƒ n1 sÊw   Y  ~~| |¡}| d||	¡}| |¡M tjtjdœ}|t|jƒ }|  tjt ||¡¡}|||gƒ}| ||¡}| ||¡}t|jd	ƒ}| d
||¡}| |||¡}| ||¡ W d   ƒ n	1 s3w   Y  t  ||¡$ | ||¡}| ||¡ | | ||¡|¡}| ||¡ W d   ƒ n	1 sfw   Y  | |¡| |¡fS )Nç        g       €r{   r9   r8   Tr6   )r€   Údoubleg      à?r    )r   ra   r:   Úfremrr   r  rE   Úfcmp_unorderedÚfcmp_orderedrD   r¥   r?   r  r±   rF   r   Úfloat32Úfloat64ÚstrÚget_functionr~   Úfloorr   r“   r   Úifnotr‹   )r#   r$   ÚvxÚwxr1  ÚpdivÚ	pfloordivr3  r2  rJ   ÚNZEROrK   Ú
mod_istrueÚwx_ltzÚmod_ltzÚif_nonzero_modÚif_zero_modÚwx_ltz_ne_mod_ltzÚ
div_istrueÚrealtypemapÚrealtypeÚfloorfnÚfloordivÚfloordivdiffÚfloordivincrÚHALFÚpredr   r   r   r'  ’  sl   .


þ€û	ü€ö
ÿ
ÿôür'  c              	   C   s4  |\}}t j||jdd}t j||jdd}|jt  ||¡ddc\}	}
|	( | j |d|¡sG| ||¡}| ||¡}| 	||¡ | 	||¡ W d   ƒ n1 sQw   Y  |
 t
| |||ƒ\}}| 	||¡ | 	||¡ W d   ƒ n1 sxw   Y  W d   ƒ n1 s‡w   Y  t  || |¡| |¡f¡S )NrZ   r[   r]   Fr6   ©zmodulo by zero)r   ra   r:   rD   rb   rc   rd   rr   r8  rE   r5  rk   rF   )r#   r$   r%   r   ÚlocrH   rI   rZ   r]   rf   rg   rh   ri   r   r   r   Úreal_divmod_implþ  s2   ÿ€ø	ý€õÿrW  c              	   C   sô   |\}}t  ||j¡}|jt  ||¡ddQ\}}	| | j |d|¡s0| ||¡}
| |
|¡ W d   ƒ n1 s:w   Y  |	 t	| |||ƒ\}}
| |
|¡ W d   ƒ n1 s[w   Y  W d   ƒ n1 sjw   Y  t
| ||j| |¡ƒS )NFr6   rU  )r   ra   r:   rD   rb   rc   rd   r8  rE   r5  r
   r    rF   )r#   r$   r%   r   rV  rH   rI   r,   rf   rg   r]   Ú_r   r   r   Úreal_mod_impl  ó*   ÿ€úþ€÷
ÿrY  c              	   C   sô   |\}}t  ||j¡}|jt  ||¡ddQ\}}	| | j |d|¡s0| ||¡}
| |
|¡ W d   ƒ n1 s:w   Y  |	 t	| |||ƒ\}
}| |
|¡ W d   ƒ n1 s[w   Y  W d   ƒ n1 sjw   Y  t
| ||j| |¡ƒS )NFr6   rq   )r   ra   r:   rD   rb   rc   rd   rr   rE   r5  r
   r    rF   )r#   r$   r%   r   rV  rH   rI   r,   rf   rg   rZ   rX  r   r   r   Úreal_floordiv_impl+  rZ  r[  c           
      C   s^   |\}}|j }| jr|  tj|¡}|||ƒ}n| d|jg¡}	| |	||f¡}t| ||j	|ƒS )Nzllvm.pow)
r  Úimplement_powi_as_math_callr>  r~   r   Údeclare_intrinsicr:   r)  r
   r    )
r#   r$   r%   r   rH   rI   r  Úimpr,   r-  r   r   r   Úreal_power_impl>  s   r_  c                 C   r—   r˜   ©r:  r
   r    rš   r   r   r   Úreal_lt_implJ  rœ   ra  c                 C   r—   r   r`  rš   r   r   r   Úreal_le_implO  rœ   rb  c                 C   r—   rŸ   r`  rš   r   r   r   Úreal_gt_implT  rœ   rc  c                 C   r—   r¢   r`  rš   r   r   r   Úreal_ge_implY  rœ   rd  c                 C   r—   rª   r`  rš   r   r   r   Úreal_eq_impl^  rœ   re  c                 C   r—   r¬   )r9  r
   r    rš   r   r   r   Úreal_ne_implc  rœ   rf  c                 C   s,   |j \}t ||¡}|  tj|¡}|||ƒS rŠ   )r   r   r“   r>  r~   Úfabs)r#   r$   r%   r   rG   rº   r   r   r   Úreal_abs_implh  s   
rh  c                 C   s,   ddl m} | ||d ¡}t| ||j|ƒS ©Nr   ©Úmathimpl)Únumba.cpythonrk  Únegate_realr
   r    )r#   r$   r%   r   rk  r,   r   r   r   Úreal_negate_implo  s   rn  c                 C   rß   rŠ   rà   rÜ   r   r   r   Úreal_positive_implu  râ   ro  c                 C   s~  |\}t |jdƒ}t |jdƒ}t |jdƒ}t ||j¡}| d||¡}	| d||¡}
| |	¡{\}}| | ||¡ W d  ƒ n1 sEw   Y  |O | |
¡:\}}| | ||¡ W d  ƒ n1 shw   Y  | | ||¡ W d  ƒ n1 s€w   Y  W d  ƒ n1 sw   Y  W d  ƒ n1 sžw   Y  W d  ƒ n1 s­w   Y  | |¡}t| ||j	|ƒS )z
    np.sign(float)
    r3   r5   r   r    r8   N)
r   r:   r   ra   r:  rD   rE   rF   r
   r    )r#   r$   r%   r   rH   rí   rî   rJ   rð   Úis_posÚis_negÚgt_zeroÚnot_gt_zeror¶   Únot_lt_zeror,   r   r   r   Úreal_sign_impl|  s6   ÿÿý€ý€ÿ€ý
ru  Úrealc                 C   ó$   | j |||d}|j}t| |||ƒS ©N©rŽ   )Úmake_complexrv  r
   ©r#   r$   rÝ   rŽ   Úcplxr,   r   r   r   Úcomplex_real_impl»  ó   r}  Úimagc                 C   rw  rx  )rz  r  r
   r{  r   r   r   Úcomplex_imag_implÁ  r~  r€  zcomplex.conjugatec                 C   sL   ddl m} |  ||jd |d ¡}| ||j¡|_| ¡ }t| ||j|ƒS ri  )	rl  rk  rz  r   rm  r  Ú	_getvaluer
   r    )r#   r$   r%   r   rk  Úzr,   r   r   r   Úcomplex_conjugate_implÇ  s
   rƒ  c                 C   s   t | |||ƒS rŠ   )r
   )r#   r$   rÝ   rŽ   r   r   r   Úreal_real_implÏ  s   r„  c                 C   s   t  |j¡}t| |||ƒS rŠ   )r   Úget_null_valuer:   r
   )r#   r$   rÝ   rŽ   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   s´  |\}}|j d }|j}| j|||d}| j|||d}	|  ||¡}
|j}| ¡ }|	 ¡ }|
 ¡ }|  |d¡}|  |d¡}| d|	j|¡}| d|	j|¡}| 	||¡}| 
|¡m\}}|! t| ||||fƒ}| j|||d}|j|
_|j|
_W d   ƒ n1 sw   Y  |. tjdtjdi| }t t ¡ |jgd ¡}t |||¡}| ||||f¡ W d   ƒ n1 s¹w   Y  W d   ƒ n1 sÈw   Y  | |¡}t| ||j|ƒS )Nr   ry  rä   r4   Únumba_cpowfÚ
numba_cpowé   )r   Úunderlying_floatÚmake_helperr  Ú_getpointerÚget_constantr:  rv  r  r<   rD   Úcomplex_mul_implr   Ú	complex64Ú
complex128r   r!  ÚVoidTyper:   r   r#  r)  rF   r
   r    )r#   r$   r%   r   ÚcaÚcbrG   Úftyr*   r+   Úcr  ÚpaÚpbÚpcÚTWOrJ   Úb_real_is_twoÚb_imag_is_zeroÚb_is_twoÚthenÚ	otherwiser,   ÚcresÚ	func_namer,  Úcpowr   r   r   Úcomplex_power_implß  sH   

ûþýø€ø
r¥  c                 C   óŠ   |\}}|j d }| j|||d}| j|||d}|  ||¡}	|j}
|j}|j}|j}| |
|¡|	_| ||¡|	_|	 ¡ }t| ||j|ƒS ©Nr   ry  )r   rz  rv  r  r  r  r
   r    ©r#   r$   r%   r   ÚcxÚcyrG   rH   rI   r‚  r*   r+   r˜  Údr,   r   r   r   Úcomplex_add_impl  ó   
r¬  c                 C   r¦  r§  )r   rz  rv  r  r  r  r
   r    r¨  r   r   r   Úcomplex_sub_impl  r­  r®  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   ry  )
r   rz  rv  r  r‹   r  r  r  r
   r    )r#   r$   r%   r   r©  rª  rG   rH   rI   r‚  r*   r+   r˜  r«  ÚacÚbdÚadÚbcr,   r   r   r   r‘  +  s"   
r‘  Únanc                 C   ó(   dd„ }|   ||||¡}t| ||j|ƒS )Nc                 S   sÈ   | j }| j}|j }|j}|s|stdƒ‚t|ƒt|ƒkr>|s#tttƒS || }|||  }t|||  | |||  | ƒS |sEtttƒS || }|| | }t| j | | j | | j| | j  | ƒS )Nzcomplex division by zero)rv  r  r}   r’   ÚcomplexÚNAN)r*   r+   ÚarealÚaimagÚbrealÚbimagÚratioÚdenomr   r   r   Úcomplex_divE  s.   
þ
þz%complex_div_impl.<locals>.complex_div©rˆ   r
   r    )r#   r$   r%   r   r½  r,   r   r   r   Úcomplex_div_implD  s   r¿  c           	      C   sn   ddl m} |j\}|\}| j|||d}|  ||¡}| ||j¡|_| ||j¡|_| ¡ }t| ||j	|ƒS )Nr   rj  ry  )
rl  rk  r   rz  rm  rv  r  r  r
   r    )	r#   r$   r%   r   rk  rÝ   r”   Úcmplxr,   r   r   r   Úcomplex_negate_impld  s   rÁ  c                 C   rÂ   rŠ   rÃ   ©r#   r$   r%   r   r”   r   r   r   Úcomplex_positive_implp  rÅ   rÃ  c                 C   ór   |\}}|j d }| j|||d}| j|||d}| d|j|j¡}	| d|j|j¡}
| |	|
¡}t| ||j|ƒS )Nr   ry  r4   )r   rz  r:  rv  r  r<   r
   r    )r#   r$   r%   r   r©  rª  rÝ   rH   rI   Úreals_are_eqÚimags_are_eqr,   r   r   r   Úcomplex_eq_implu  ó   
rÇ  c                 C   rÄ  )Nr   ry  r9   )r   rz  r9  rv  r  rÙ   r
   r    )r#   r$   r%   r   r©  rª  rÝ   rH   rI   Úreals_are_neÚimags_are_ner,   r   r   r   Úcomplex_ne_impl  rÈ  rË  c                 C   r´  )z)
    abs(z) := hypot(z.real, z.imag)
    c                 S   s   t  | j| j¡S rŠ   )r~   Úhypotrv  r  )r‚  r   r   r   Úcomplex_abs‘  s   z%complex_abs_impl.<locals>.complex_absr¾  )r#   r$   r%   r   rÍ  r,   r   r   r   Úcomplex_abs_impl  s   rÎ  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   rÏ  c                 C   s:   |j \}|\}|  ||||j¡}| |¡}t| ||j|ƒS rŠ   )r   r   r    r@   r
   )r#   r$   r%   r   rÝ   r”   Úistruer,   r   r   r   Únumber_not_implº  rø   rÑ  c                 C   s
   |\}|S rŠ   r   rÂ  r   r   r   Úbool_as_boolÁ  s   rÒ  c                 C   ó   |\}|  d|t|jdƒ¡S )Nr9   r   )r¥   r   r:   rÂ  r   r   r   Úint_as_boolÆ  ó   rÔ  c                 C   rÓ  )Nr9   r6  )r9  r   r:   rÂ  r   r   r   Úfloat_as_boolË  rÕ  rÖ  c                 C   s^   |j \}|\}|  |||¡}|j|j}}t|jdƒ}	| d||	¡}
| d||	¡}| |
|¡S )Nr6  r9   )r   rz  rv  r  r   r:   r9  rÙ   )r#   r$   r%   r   rÝ   r”   rÀ  rv  r  ÚzeroÚreal_istrueÚimag_istruer   r   r   Úcomplex_as_boolÐ  s   rÚ  c                 C   s$   |   ||j|j¡}|  |||j|¡S rŠ   )Úget_constant_genericÚliteral_typeÚliteral_valuer   ©r#   r$   ÚfromtyÚtotyr”   Úlitr   r   r   Úliteral_int_to_numberè  s   ýrâ  c                 C   sX   |j |j kr|S |j |j k r| ||  |¡¡S |jr#| ||  |¡¡S | ||  |¡¡S rŠ   )rw   ÚtruncÚget_value_typer   ÚsextÚzext©r#   r$   rß  rà  r”   r   r   r   Úinteger_to_integerô  s   rè  c                 C   s   |  ||  |¡¡S rŠ   )Úinttoptrrä  rç  r   r   r   Úinteger_to_voidptr  s   rê  c                 C   s.   |   |¡}|j|jk r| ||¡S | ||¡S rŠ   )rä  rw   ÚfpextÚfptrunc©r#   r$   rß  rà  r”   r•   r   r   r   Úfloat_to_float  s   
rî  c                 C   s(   |   |¡}|jr| ||¡S | ||¡S rŠ   )rä  r   ÚsitofpÚuitofprí  r   r   r   Úinteger_to_float  ó   
rñ  c                 C   s(   |   |¡}|jr| ||¡S | ||¡S rŠ   )rä  r   ÚfptosiÚfptouirí  r   r   r   Úfloat_to_integer  rò  rõ  c                 C   s@   |   ||||j¡}|  |jd¡}|  ||¡}||_||_| ¡ S r‡  )r   r  r  rz  rv  r  r  )r#   r$   rß  rà  r”   rv  r  rÀ  r   r   r   Únon_complex_to_complex  s   rö  c           	      C   sX   |j }|j }| j|||d}|  ||¡}|  ||j||¡|_|  ||j||¡|_| ¡ S rx  )r  rz  r   rv  r  r  )	r#   r$   rß  rà  r”   ÚsrctyÚdsttyÚsrcÚdstr   r   r   Úcomplex_to_complex*  s   rû  c                 C   s   |   |||¡S rŠ   )Úis_truerç  r   r   r   Úany_to_boolean5  s   rý  c                 C   s$   |  |t d¡¡}|  ||tj|¡S )Né    )ræ  r   ÚIntTyper   r   Úint32)r#   r$   rß  rà  r”   Úasintr   r   r   Úboolean_to_any9  s   r  c                 C   s"   |   ||j|j¡}|  ||j|¡S rŠ   )rÛ  rÜ  rÝ  rü  rÞ  r   r   r   Úliteral_int_to_boolean?  s   ýr  c                 C   s4   |j }|  |||j¡}|  |||j¡}t ||f¡S rŠ   )r  rÛ  rv  r  r   Úliteral_struct)r#   r$   rG   Úpyvalr—  rv  r  r   r   r   Úconstant_complexL  s   r  c                 C   s&   t |tjƒr
t|ƒ}|  |¡}||ƒS rŠ   )r^   ÚnpÚbool_Úboolrä  )r#   r$   rG   r  r•   r   r   r   Úconstant_integerS  s   
r
  c                 C   sL   t | tjtjfƒr"t |tjjƒr$| j|jjkrt 	d¡‚dd„ }|S 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 rŠ   r   )ÚscalarÚviewtyr   r   r   rº   m  s   
zscalar_view.<locals>.implN)
r^   r   r  ru   ÚabstractÚ	DTypeSpecrw   r`   r   ÚTypingError)r  r  rº   r   r   r   Úscalar_viewd  s   ÿÿ÷r  ÚviewrŠ   )¦r~   r   Únumpyr  rú   Úllvmliter   Úllvmlite.irr   Únumba.core.imputilsr   r   r   r   r   r	   r
   Ú
numba.corer   r   r   r   r   r   Únumba.core.extendingr   r   Únumba.cpython.unsafe.numbersr   r   r-   r0   r2   rV   rY   rj   Údivmodru   rm   rP  Ú	ifloordivro   ÚtruedivÚitruedivrs   r3  Úimodrt   rx   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þ   Úbooleanrÿ   r  r  r	  r
  r¾   r  r  r  r  r  r  r  r5  r'  rW  rY  r[  r_  ra  rb  rc  rd  re  rf  rh  rn  ro  ru  rG   r!   rû   r/   rü   r1   rý   r’   ÚComplexr}  r€  rƒ  r„  r†  r‰  Úclsr¥  r¬  r®  r‘  r€   r¶  r¿  rÁ  rÃ  rÇ  rË  rÎ  r  ÚNumberrÏ  rÑ  r	  rÒ  rÔ  rÖ  rÚ  r@   râ  rè  Úvoidptrrê  rî  rñ  rõ  rö  rû  ÚAnyrý  r  ÚBooleanLiteralr  r  r
  r  r   r   r   r   Ú<module>   s¦   $ 			9

	+=							*0l







) 










		




	


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