a
    þ
þdd½  ã                   @   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„ ZMe
ejNejOejOƒe?ƒ e
ejPejOejOƒe@ƒ e
ejQejOejOƒe;ƒ e
ejRejOejOƒe<ƒ e
ejSejOejOƒe=ƒ e
ejTejOejOƒe>ƒ e
ejUejOƒeLƒ e
ejVejOƒeMƒ dRdS„ ZWdTdU„ ZXeWƒ  eXƒ  dVdW„ ZYdXdY„ ZZdZd[„ Z[d\d]„ Z\d^d_„ Z]d`da„ Z^e
e$ej5ej5ƒdÌdbdc„ƒZ_dÍddde„Z`dÎdfdg„Zadhdi„ Zbdjdk„ Zcdldm„ Zddndo„ Zedpdq„ Zfdrds„ Zgdtdu„ Zhdvdw„ Zidxdy„ Zjdzd{„ Zkd|d}„ Zlej5Zme
ejnememƒeYƒ e
ejoememƒeYƒ e
ejpememƒeZƒ e
ejqememƒeZƒ e
ejrememƒe[ƒ e
ejsememƒe[ƒ e
ej'ememƒeaƒ e
ej(ememƒeaƒ e
ej*ememƒe\ƒ e
ej+ememƒe\ƒ e
ej-ememƒe`ƒ e
ej.ememƒe`ƒ e
ej2ememƒebƒ e
ej4ememƒebƒ e
e2ememƒebƒ e
ejNememƒegƒ e
ejPememƒehƒ e
ejQememƒecƒ e
ejRememƒedƒ e
ejSememƒeeƒ e
ejTememƒefƒ e
etemƒeiƒ e
ejUemƒejƒ e
ejVemƒekƒ [meejud~ƒdd€„ ƒZveejudƒd‚dƒ„ ƒZwe
d„ejuƒd…d†„ ƒZxd‡dˆ„ Zyd‰dŠ„ Zzd‹dŒ„ Z{ej5ej%fD ]0Z|ee|d~ƒeyƒ ee|dƒezƒ e
d„e|ƒe{ƒ qe
ej2ejuejuƒe
ej4ejuejuƒe
e2ejuejuƒddŽ„ ƒƒƒZ}dd„ Z~d‘d’„ Zd“d”„ Z€ed•ƒZ‚d–d—„ Zƒd˜d™„ Z„dšd›„ Z…dœd„ Z†dždŸ„ Z‡d d¡„ ZˆejuZme
ejnememƒe~ƒ e
ejoememƒe~ƒ e
ejpememƒeƒ e
ejqememƒeƒ e
ejrememƒe€ƒ e
ejsememƒe€ƒ e
ej*ememƒeƒƒ e
ej+ememƒeƒƒ e
ejUemƒe„ƒ e
ejVemƒe…ƒ e
ejNememƒe†ƒ e
ejPememƒe‡ƒ e
etemƒeˆƒ [me
d¢ej‰ƒe
d¢ejŠƒd£d¤„ ƒƒZ‹d¥d¦„ ZŒe
eej‰ƒd§d¨„ ƒZŽe
eej%ƒd©dª„ ƒZe
eej5ƒd«d¬„ ƒZe
eejuƒd­d®„ ƒZ‘ej%ej5ejufD ]Zme
ej’emƒeŒƒ q<e
ej’ejOƒeŒƒ eej3ej%ƒeej3ej5ƒeej3ejuƒ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juƒeej%ejuƒd»d¼„ ƒƒZšeejuejuƒd½d¾„ ƒZ›eejœej‰ƒd¿dÀ„ ƒZeej‰ejŠƒdÁdÂ„ ƒZžeej3ej‰ƒeejŸej‰ƒdÃdÄ„ ƒƒZ eejuƒ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   ú^/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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J ‚|  d¡}|  d¡}t ||¡}t ||¡}| | d||  |j¡¡| d||  d¡¡¡}	|j| |	¡dd | ||¡}
| 	||¡}| d| 
||¡|¡}| d||¡}| ||¡}| |¡ \}}|( | |
|¡ | ||¡ W d	  ƒ n1 s0    Y  |8 | | |
|¡|¡ | | ||¡|¡ W d	  ƒ n1 s\0    Y  W d	  ƒ n1 s|0    Y  W d	  ƒ n1 sœ0    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©Zlikelyú<ú!=N)Útyper   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.    

þ,trD   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   rD   ZudivZurem)r    r!   r?   r@   rA   r   r   r   Ú
int_divmodw   s    rE   c              	   C   sP  |\}}|j \}}|j}	t|	tjƒr*|	j}	|  ||||	¡}
|  ||||	¡}tj||
j	dd}tj||
j	dd}|j
t ||¡dd²\}}|8 | j ||f¡s¸| ||¡ | ||¡ W d   ƒ n1 sÌ0    Y  |< t| ||	|
|ƒ\}}| ||¡ | ||¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s>0    Y  ||fS )NÚquot©ÚnameÚremFr2   )r   r   Ú
isinstancer   ZUniTupleÚdtyper   r   Úalloca_oncer5   r<   Úis_scalar_zeroÚerror_modelÚfp_zero_divisionr=   rE   )r    r!   r"   r   Zzerodiv_messager#   r$   r%   r&   r?   r'   r(   rF   rI   Úif_zeroÚif_non_zeroÚqÚrr   r   r   Ú_int_divmod_impl   s,    
ÿ*LrT   c                 C   s0   t | |||dƒ\}}t || |¡| |¡f¡S )Nzinteger divmod by zero)rT   r   Ú
pack_arrayr>   ©r    r!   r"   r   rF   rI   r   r   r   Úint_divmod_implŸ   s    
ÿÿrW   c                 C   s   t | |||dƒ\}}| |¡S )Nzinteger division by zero©rT   r>   rV   r   r   r   Úint_floordiv_impl¨   s    
ÿrY   c                 C   sŒ   |\}}|j \}}|  ||||j¡}|  ||||j¡}	t ||	¡ | j |d¡ W d   ƒ n1 sf0    Y  | ||	¡}
t| ||j|
ƒS )N©zdivision by zero)	r   r   r   r   rP   rN   rO   Úfdivr
   r   r   r   r   Úint_truediv_impl°   s    
,r\   c                 C   s   t | |||dƒ\}}| |¡S )Nzinteger modulo by zerorX   rV   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)rJ   r   ÚIntegerrN   Zraise_on_fp_zero_divisionÚbitwidth)r    r   r   r   r   Ú_get_power_zerodiv_returnÅ   s
    ÿr`   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(   rS   ÚinvertÚexp©Ú
is_integerÚtpÚzerodiv_returnr   r   Ú	int_powerÖ   s0    
z!int_power_impl.<locals>.int_power)rJ   r   r   r^   r   r`   Úcompile_internalr
   )r    r!   r"   r   ro   r)   r   rk   r   Úint_power_implÎ   s    
rq   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/   rb   r   c                    s    ˆrˆ   | |¡S ˆ  | |¡S d S ©N)r-   Úfmul)r'   r(   )r!   rl   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   ra   r/   r1   )re   ©r'   )rn   r   r   Úinvert_impl$  s    z&static_power_impl.<locals>.invert_implc                 S   s   d|  S )Nrc   r   rt   r   r   r   ru   1  s    )r   ÚvaluerJ   ÚnumbersÚIntegralÚNotImplementedErrorÚabsr   r   r^   r`   r   r5   rp   r   Ú	signature)r    r!   r"   r   rj   ri   rm   ÚvalÚltyr-   r)   r'   ru   r   )r!   rl   rn   r   Ústatic_power_implù   s8    

ÿr~   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS ©Nr3   ©r7   r
   r   ©r    r!   r"   r   r)   r   r   r   Úint_slt_impl:  s    r‚   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS ©Nz<=r€   r   r   r   r   Úint_sle_impl?  s    r„   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS ©Nú>r€   r   r   r   r   Úint_sgt_implD  s    r‡   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS ©Nz>=r€   r   r   r   r   Úint_sge_implI  s    r‰   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS r   ©Úicmp_unsignedr
   r   r   r   r   r   Úint_ult_implN  s    rŒ   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS rƒ   rŠ   r   r   r   r   Úint_ule_implS  s    r   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS r…   rŠ   r   r   r   r   Úint_ugt_implX  s    rŽ   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS rˆ   rŠ   r   r   r   r   Úint_uge_impl]  s    r   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS ©Nr0   rŠ   r   r   r   r   Úint_eq_implb  s    r‘   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS ©Nr4   rŠ   r   r   r   r   Úint_ne_implg  s    r“   c           	      C   sH   |\}t |jd ƒ}| d||¡}| |¡}| |||¡}t| ||j|ƒS r   )r   r5   r7   ÚnegÚselectr
   r   )	r    r!   r"   r   r@   rB   ZltzZnegatedr)   r   r   r   Úint_abs_impll  s    
r–   c                 C   s   |\}t | ||j|ƒS rr   ©r
   r   )r    r!   r"   r   r@   r   r   r   Úuint_abs_implu  s    r˜   c           	      C   sR   |j \}}|\}}|  ||||j¡}|  ||||j¡}| ||¡}t| ||j|ƒS rr   )r   r   r   Zshlr
   ©	r    r!   r"   r   ZvaltyZamttyr|   Úamtr)   r   r   r   Úint_shl_implz  s    
r›   c           	      C   sh   |j \}}|\}}|  ||||j¡}|  ||||j¡}|jjrL| ||¡}n| ||¡}t| ||j|ƒS rr   )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 rr   )r   r   r   r6   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 rr   )r   r   r   Úor_r
   r   r   r   r   Úint_or_impl˜  s    
r¢   c                 C   sR   |j \}}|\}}|  ||||j¡}|  ||||j¡}	| ||	¡}
t| ||j|
ƒS rr   )r   r   r   r;   r
   r   r   r   r   Úint_xor_impl¡  s    
r£   c                 C   s:   |j \}|\}| |¡}|  ||||j¡}t| ||j|ƒS rr   )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 rr   ©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 d  ƒ n1 sÊ0    Y  | |¡ | |	||¡ W d  ƒ n1 s0    Y  | |¡& | 	||
¡ | 
|¡ W d  ƒ n1 sF0    Y  | |¡& | 	||
¡ | 
|¡ W d  ƒ n1 sˆ0    Y  | |¡ | |
¡}t| ||j|ƒS )z
    np.sign(int)
    r/   r1   r   r0   r†   z.zeroz.postestz.posz.negz.exitN)r   r5   r‹   r7   r   rL   Úappend_basic_blockZcbranchZ
goto_blockr=   ÚbranchZposition_at_endr>   r
   r   )r    r!   r"   r   r@   ÚPOSÚNEGrB   Zcmp_zeroZ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 rr   )r   r   r   r”   r
   r¤   r   r   r   Úbool_negate_implí  s
    
r´   c                 C   s0   |j \}|\}|  ||||j¡}t| ||j|ƒS rr   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 rr   )1r   r^   r   Úoperatorr   r*   Úiaddr+   r,   Úisubr-   r.   ÚimulÚeqr‘   Úner“   Úlshiftr›   ÚilshiftÚrshiftrœ   Úirshiftr”   r¦   Úposr¨   rg   rq   ÚipowZunsigned_domainÚltrŒ   Úler   ÚgtrŽ   Úger   ÚFloatrz   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 rr   )r   ÚBooleanr^   r   r¶   r6   r    Úiandr¡   r¢   Úiorr;   r£   Úixorri   r­   rÈ   r   r   r   Ú_implement_bitwise_operators6  s    rÎ   c                 C   s   |j |Ž }t| ||j|ƒS rr   )Úfaddr
   r   r   r   r   r   Úreal_add_implF  s    
rÐ   c                 C   s   |j |Ž }t| ||j|ƒS rr   )Úfsubr
   r   r   r   r   r   Úreal_sub_implK  s    
rÒ   c                 C   s   |j |Ž }t| ||j|ƒS rr   )rs   r
   r   r   r   r   r   Úreal_mul_implP  s    
rÓ   c                 C   sX   t  ||d ¡ | j |d¡ W d   ƒ n1 s40    Y  |j|Ž }t| ||j|ƒS )Nr/   rZ   )r   rP   rN   rO   r[   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r¢d|_	t 
| d¡¡}	|j\}
}}t| |	|
|ƒ\}}|	 ||¡ |	 |¡ t ||¡}| ||||f¡}|| |¡fS )Nz.numba.python.remZlinkonce_odrÚentry)r5   ÚmoduleZmanglerr   ÚFunctionTypeZPointerTyper   Úget_or_insert_functionZis_declarationÚlinkageZ	IRBuilderr®   r   Úreal_divmod_func_bodyr=   ÚretrL   Úcallr>   )r    r!   r@   rA   ZfloattyrÖ   ÚfnameÚfntyÚfnZ	fnbuilderZfxZfyÚpmodÚdivÚmodZquotientr   r   r   Úreal_divmod\  s     
rã   c              
   C   sò  t  ||j¡}t  ||j¡}t  ||j¡}| ||¡}| | ||¡|¡}| ||¡ | ||¡ | d¡}	| d¡}
| d¡}| d||	¡}| d||	¡}| d||	¡}|j	|ddÜ\}}|r | 
d||¡}| |¡8 | | ||¡|¡ | | ||¡|¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s<0    Y  |* | ||
|	¡}| ||¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sœ0    Y  ~~| |¡}| d||	¡}| |¡š tjtjdœ}|t|jƒ }|  tjt ||¡¡}|||gƒ}| ||¡}| ||¡}t|jd	ƒ}| d
||¡}| |||¡}| ||¡ W d   ƒ n1 sn0    Y  t  ||¡H | ||¡}| ||¡ | | ||¡|¡}| ||¡ W d   ƒ n1 sÔ0    Y  | |¡| |¡fS )Nç        g       €rc   r4   r3   Tr2   )rh   Údoubleg      à?r†   )r   rL   r5   Úfremr[   rÑ   r=   Úfcmp_unorderedÚfcmp_orderedr<   r‹   r9   rÏ   r•   r>   r   Úfloat32Úfloat64ÚstrÚget_functionrf   Úfloorr   r{   r   Zifnotrs   )r    r!   ZvxZwxrà   ZpdivZ	pfloordivrâ   rá   rB   ZNZEROrC   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Ú   r  s\    .


TL
ÿ
ÿ,,rÚ   c              	   C   s6  |\}}t j||jdd}t j||jdd}|jt  ||¡ddÆ\}	}
|	P | j |d|¡sŽ| ||¡}| ||¡}| 	||¡ | 	||¡ W d   ƒ n1 s¢0    Y  |
: t
| |||ƒ\}}| 	||¡ | 	||¡ W d   ƒ n1 sð0    Y  W d   ƒ n1 s0    Y  t  || |¡| |¡f¡S )NrF   rG   rI   Fr2   ©zmodulo by zero)r   rL   r5   r<   rM   rN   rO   r[   ræ   r=   rã   rU   r>   )r    r!   r"   r   Úlocr@   rA   rF   rI   rP   rQ   rR   rS   r   r   r   Úreal_divmod_implÞ  s(    ÿ*Jÿrò   c              	   C   sô   |\}}t  ||j¡}|jt  ||¡dd¢\}}	|8 | j |d|¡s`| ||¡}
| |
|¡ W d   ƒ n1 st0    Y  |	. t	| |||ƒ\}}
| |
|¡ W d   ƒ n1 s¶0    Y  W d   ƒ n1 sÔ0    Y  t
| ||j| |¡ƒS )NFr2   rð   )r   rL   r5   r<   rM   rN   rO   ræ   r=   rã   r
   r   r>   )r    r!   r"   r   rñ   r@   rA   r)   rP   rQ   rI   Ú_r   r   r   Úreal_mod_implø  s     ÿ*H
ÿrô   c              	   C   sô   |\}}t  ||j¡}|jt  ||¡dd¢\}}	|8 | j |d|¡s`| ||¡}
| |
|¡ W d   ƒ n1 st0    Y  |	. t	| |||ƒ\}
}| |
|¡ W d   ƒ n1 s¶0    Y  W d   ƒ n1 sÔ0    Y  t
| ||j| |¡ƒS )NFr2   rZ   )r   rL   r5   r<   rM   rN   rO   r[   r=   rã   r
   r   r>   )r    r!   r"   r   rñ   r@   rA   r)   rP   rQ   rF   ró   r   r   r   Úreal_floordiv_impl  s     ÿ*H
ÿ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ì   rf   rg   Zdeclare_intrinsicr5   rÜ   r
   r   )
r    r!   r"   r   r@   rA   rÖ   Úimpr)   rß   r   r   r   Úreal_power_impl  s    r÷   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS r   ©rè   r
   r   r   r   r   r   Úreal_lt_impl*  s    rù   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS rƒ   rø   r   r   r   r   Úreal_le_impl/  s    rú   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS r…   rø   r   r   r   r   Úreal_gt_impl4  s    rû   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS rˆ   rø   r   r   r   r   Úreal_ge_impl9  s    rü   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS r   rø   r   r   r   r   Úreal_eq_impl>  s    rý   c                 C   s"   |j dg|¢R Ž }t| ||j|ƒS r’   )rç   r
   r   r   r   r   r   Úreal_ne_implC  s    rþ   c                 C   s,   |j \}t ||¡}|  tj|¡}|||ƒS rr   )r   r   r{   rì   rf   Úfabs)r    r!   r"   r   r?   Úimplr   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 rr   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 d  ƒ n1 sŠ0    Y  |¢ | |
¡v\}}| | ||¡ W d  ƒ n1 sÐ0    Y  | | ||¡ W d  ƒ n1 s0    Y  W d  ƒ n1 s"0    Y  W d  ƒ n1 sB0    Y  W d  ƒ n1 sb0    Y  | |¡}t| ||j	|ƒS )z
    np.sign(float)
    r/   r1   r   r†   r3   N)
r   r5   r   rL   rè   r<   r=   r>   r
   r   )r    r!   r"   r   r@   r°   r±   rB   r²   Zis_posZis_negZgt_zeroZnot_gt_zeroZlt_zeroZnot_lt_zeror)   r   r   r   Úreal_sign_impl\  s$    **Œ
r	  Úrealc                 C   s$   | j |||d}|j}t| |||ƒS ©N©rv   )Úmake_complexr
  r
   ©r    r!   r¥   rv   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 rr   )r
   )r    r!   r¥   rv   r   r   r   Úreal_real_impl¯  s    r  c                 C   s   t  |j¡}t| |||ƒS rr   )r   Zget_null_valuer5   r
   )r    r!   r¥   rv   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|¡}| 	||¡}| 
|¡Þ\}}|B t| ||||fƒ}| j|||d}|j|
_|j|
_W d   ƒ n1 s0    Y  |\ tjdtjdi| }t t ¡ |jgd ¡}t |||¡}| ||||f¡ W d   ƒ n1 sv0    Y  W d   ƒ n1 s–0    Y  | |¡}t| ||j|ƒS )Nr   r  rª   r0   Znumba_cpowfZ
numba_cpowé   )r   Úunderlying_floatZmake_helperrÖ   Z_getpointerÚget_constantrè   r
  r  r6   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TWOrB   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¿  s@    
(þýR
r$  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?   r@   rA   r  r'   r(   r!  Údr)   r   r   r   Úcomplex_add_implë  s    
r*  c                 C   sŠ   |\}}|j d }| j|||d}| j|||d}|  ||¡}	|j}
|j}|j}|j}| |
|¡|	_| ||¡|	_|	 ¡ }t| ||j|ƒS r%  )r   r  r
  r  rÑ   r  r
   r   r&  r   r   r   Úcomplex_sub_implû  s    
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   r  )
r   r  r
  r  rs   rÑ   rÏ   r  r
   r   )r    r!   r"   r   r'  r(  r?   r@   rA   r  r'   r(   r!  r)  ÚacZbdÚadZ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  re   rz   ÚcomplexÚNAN)r'   r(   ZarealZaimagZbrealZbimagZratioZdenomr   r   r   Úcomplex_div%  s.    
þ
þz%complex_div_impl.<locals>.complex_div©rp   r
   r   )r    r!   r"   r   r1  r)   r   r   r   Úcomplex_div_impl$  s    r3  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    r5  c                 C   s   |\}t | ||j|ƒS rr   r—   ©r    r!   r"   r   r|   r   r   r   Úcomplex_positive_implP  s    r7  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  r6   r
   r   )r    r!   r"   r   r'  r(  r¥   r@   rA   Zreals_are_eqZimags_are_eqr)   r   r   r   Úcomplex_eq_implU  s    
r8  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   r'  r(  r¥   r@   rA   Zreals_are_neZimags_are_ner)   r   r   r   Úcomplex_ne_impla  s    
r9  c                 C   s(   dd„ }|   ||||¡}t| ||j|ƒS )z)
    abs(z) := hypot(z.real, z.imag)
    c                 S   s   t  | j| j¡S rr   )rf   Úhypotr
  r  )r  r   r   r   Úcomplex_absq  s    z%complex_abs_impl.<locals>.complex_absr2  )r    r!   r"   r   r;  r)   r   r   r   Úcomplex_abs_implm  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 rr   )r   r   r   r:   r
   )r    r!   r"   r   r¥   r|   Zistruer)   r   r   r   Únumber_not_implš  s
    
r>  c                 C   s
   |\}|S rr   r   r6  r   r   r   Úbool_as_bool¡  s    r?  c                 C   s   |\}|  d|t|jdƒ¡S )Nr4   r   )r‹   r   r5   r6  r   r   r   Úint_as_bool¦  s    r@  c                 C   s   |\}|  d|t|jdƒ¡S )Nr4   rä   )rç   r   r5   r6  r   r   r   Úfloat_as_bool«  s    rA  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|   r4  r
  r  ZzeroZreal_istrueZimag_istruer   r   r   Úcomplex_as_bool°  s    rB  c                 C   s$   |   ||j|j¡}|  |||j|¡S rr   )Úget_constant_genericÚliteral_typeÚliteral_valuer   ©r    r!   ÚfromtyÚtotyr|   Zlitr   r   r   Úliteral_int_to_numberÈ  s    ýrI  c                 C   s\   |j |j kr|S |j |j k r.| ||  |¡¡S |jrF| ||  |¡¡S | ||  |¡¡S d S rr   )r_   ÚtruncÚget_value_typer   ZsextÚzext©r    r!   rG  rH  r|   r   r   r   Úinteger_to_integerÔ  s    rN  c                 C   s   |  ||  |¡¡S rr   )ZinttoptrrK  rM  r   r   r   Úinteger_to_voidptrã  s    rO  c                 C   s2   |   |¡}|j|jk r"| ||¡S | ||¡S d S rr   )rK  r_   ZfpextZfptrunc©r    r!   rG  rH  r|   r}   r   r   r   Úfloat_to_floatç  s    
rQ  c                 C   s,   |   |¡}|jr| ||¡S | ||¡S d S rr   )rK  r   ZsitofpZuitofprP  r   r   r   Úinteger_to_floatï  s    
rR  c                 C   s,   |   |¡}|jr| ||¡S | ||¡S d S rr   )rK  r   ZfptosiZfptouirP  r   r   r   Úfloat_to_integer÷  s    
rS  c                 C   s@   |   ||||j¡}|  |jd¡}|  ||¡}||_||_| ¡ S r  )r   r  r  r  r
  r  r  )r    r!   rG  rH  r|   r
  r  r4  r   r   r   Únon_complex_to_complexÿ  s    rT  c           	      C   sX   |j }|j }| j|||d}|  ||¡}|  ||j||¡|_|  ||j||¡|_| ¡ S r  )r  r  r   r
  r  r  )	r    r!   rG  rH  r|   ZsrctyZdsttyÚsrcÚdstr   r   r   Úcomplex_to_complex
  s    rW  c                 C   s   |   |||¡S rr   )Úis_truerM  r   r   r   Úany_to_boolean  s    rY  c                 C   s$   |  |t d¡¡}|  ||tj|¡S )Né    )rL  r   ZIntTyper   r   Úint32)r    r!   rG  rH  r|   Zasintr   r   r   Úboolean_to_any  s    r\  c                 C   s"   |   ||j|j¡}|  ||j|¡S rr   )rC  rD  rE  rX  rF  r   r   r   Úliteral_int_to_boolean  s    ýr]  c                 C   s4   |j }|  |||j¡}|  |||j¡}t ||f¡S rr   )r  rC  r
  r  r   Zliteral_struct)r    r!   r?   Úpyvalr   r
  r  r   r   r   Úconstant_complex,  s    r_  c                 C   s&   t |tjƒrt|ƒ}|  |¡}||ƒS rr   )rJ   ÚnpZbool_ÚboolrK  )r    r!   r?   r^  r}   r   r   r   Úconstant_integer3  s    
rb  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 rr   r   )ÚscalarÚviewtyr   r   r   r   M  s    zscalar_view.<locals>.implN)
rJ   r   rÆ   r^   ZabstractZ	DTypeSpecr_   rK   r   ZTypingError)rc  rd  r   r   r   r   Úscalar_viewD  s    ÿÿre  Úview)N)N)N)¤rf   rw   Únumpyr`  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.   rD   rE   rT   Údivmodr^   rW   rî   Ú	ifloordivrY   ÚtruedivÚitruedivr\   râ   Úimodr]   r`   rq   rg   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¹   rz   ÚComplexr  r  r  r  r  r  Úclsr$  r*  r+  r  rh   r0  r3  r5  r7  r8  r9  r<  rÊ   ÚNumberr=  r>  ra  r?  r@  rA  rB  r:   rI  rN  ZvoidptrrO  rQ  rR  rS  rT  rW  ÚAnyrY  r\  ZBooleanLiteralr]  r_  rb  re  r   r   r   r   Ú<module>   s   $ 			9

	+=							*0l







) 










		




	

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