o
    0 i                     @   s	  d dl Z 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 d dlmZmZmZmZ d dl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 Z,d d! Z-eej.ej!ej/eej0ej!ej/eej.ej1ej/eej0ej1ej/d"d# Z2d$d% Z3d&d' Z4d(d) Z5d*d+ Z6d,d- Z7d.d/ Z8d0d1 Z9d2d3 Z:d4d5 Z;d6d7 Z<d8d9 Z=d:d; Z>d<d= Z?d>d? Z@d@dA ZAdBdC ZBdDdE ZCdFdG ZDdHdI ZEdJdK ZFdLdM ZGdNdO ZHdPdQ ZIdRdS ZJdTdU ZKeejLejMejMe; eejNejMejMe< eejOejMejMe7 eejPejMejMe8 eejQejMejMe9 eejRejMejMe: eejSejMeJ eejTejMeK dVdW ZUdXdY ZVeU  eV  dZd[ ZWd\d] ZXd^d_ ZYd`da ZZdbdc Z[ddde Z\ee ej1ej1ddfdgZ]ddhdiZ^ddjdkZ_dldm Z`dndo Zadpdq Zbdrds Zcdtdu Zddvdw Zedxdy Zfdzd{ Zgd|d} Zhd~d Zidd Zjej1ZkeejlekekeW eejmekekeW eejnekekeX eejoekekeX eejpekekeY eejqekekeY eej#ekeke_ eej$ekeke_ eej&ekekeZ eej'ekekeZ eej)ekeke^ eej*ekeke^ eej.ekeke` eej0ekeke` ee.ekeke` eejLekekee eejNekekef eejOekekea eejPekekeb eejQekekec eejRekeked eerekeg eejSekeh eejTekei [keejsddd Zteejsddd Zuedejsdd Zvdd Zwdd Zxdd Zyej1ej!fD ]Zzeezdew eezdex edezey qeej.ejsejseej0ejsejsee.ejsejsdd Z{dd Z|dd Z}dd Z~edZdd Zdd Zdd Zdd Zdd Zdd ZejsZkeejlekeke| eejmekeke| eejnekeke} eejoekeke} eejpekeke~ eejqekeke~ eej&ekeke eej'ekeke eejSeke eejTeke eejLekeke eejNekeke eereke [kedejedejdd Zdd Zeeejdd Zeeej!dd Zeeej1dd Zeeejsdd Zej!ej1ejsfD ]Zkeejeke q eejejMe eej/ej!eej/ej1eej/ejsdd Zeej!ej!dd Zeej!ejdd Zeej1ej1dd Zeej!ej1dd Zeej1ej!dd Zeej1ejseej!ejsdd Zeejsejsdd ZeejejddĄ ZeejejddƄ Zeej/ejeejejddȄ Zeejsddʄ Zeej!eej1eejdd̄ Zdd΄ Zeej1dσe eej!dσe dS )    N)ir)Constant)lower_builtinlower_getattr
lower_castlower_constantimpl_ret_untracked)typingtypeserrorscgutils)overload_methodviewerc                 C   s   | j rdgS g S )z;
    Return the modifier flags for integer arithmetic.
    Znsw)signed)Zrettype r   e/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/numba/cpython/new_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'   r)   c                 C   r   r   )r   r   r   mulr   r   r   r   r   r   int_mul_impl5   r'   r+   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 sw   Y  | |||
|| ||||| W d	   n1 sw   Y  W d	   n1 sw   Y  W d	   n1 sw   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:   

rA   c                 C   s.   |j rt| ||||S ||||||fS )zD
    Integer divmod(x, y).  The caller must ensure that y != 0.
    )r   rA   ZudivZurem)r   r   r<   r=   r>   r   r   r   
int_divmodw   s   rB   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 sw   Y  W d    ||fS W d    ||fS 1 sw   Y  ||fS )NquotnameremFr/   )r   r   
isinstancer
   ZUniTupledtyper   r   alloca_oncer2   r9   is_scalar_zeroerror_modelfp_zero_divisionr:   rB   )r   r   r   r   Zzerodiv_messager   r    r!   r"   r<   r#   r$   rC   rF   if_zeroif_non_zeroqrr   r   r   _int_divmod_impl   s>   


rQ   c                 C   s0   t | |||d\}}t|||||fS )Nzinteger divmod by zero)rQ   r   
pack_arrayr;   r   r   r   r   rC   rF   r   r   r   int_divmod_impl   s   
rT   c                 C   s   t | |||d\}}||S )Nzinteger division by zerorQ   r;   rS   r   r   r   int_floordiv_impl      

rV   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   rM   rK   rL   fdivr   r   r   r   r   int_truediv_impl   s   
rZ   c                 C   s   t | |||d\}}||S )Nzinteger modulo by zerorU   rS   r   r   r   int_rem_impl   rW   r[   c                 C   s&   t |tjr| jjsd|jd > S dS )Nr.   r,   F)rG   r
   IntegerrK   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 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 )	Nr,   r   T&0 cannot be raised to a negative powerr.   F         ?)OverflowErrorZeroDivisionErrormathpowfloat)r#   r$   rP   invertexp
is_integertpzerodiv_returnr   r   	int_power   s4   z!int_power_impl.<locals>.int_power)rG   r   r
   r\   r   r^   compile_internalr   )r   r   r   r   rm   r%   r   ri   r   int_power_impl   s   
ro   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
    r,   r`   r   c                    s   r  | |S  | |S N)r*   fmul)r#   r$   )r   rj   r   r   r*     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   r_   r,   r.   )rc   r#   )rl   r   r   invert_impl$  s   z&static_power_impl.<locals>.invert_implc                 S   s   d|  S )Nra   r   rr   r   r   r   rs   1  s   )r   valuerG   numbersIntegralNotImplementedErrorabsr   r
   r\   r^   r   r2   rn   r	   	signature)r   r   r   r   rh   rg   rk   valltyr*   r%   r#   rs   r   )r   rj   rl   r   static_power_impl   s:   


r|   c                 C   "   |j dg|R  }t| ||j|S Nr0   r4   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}   Nr-   r   r   r   r   r   int_eq_implb  r   r   c                 C   r}   Nr1   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 Nr0   r   r4   r   r2   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                    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   r2   r4   negr   r   r   )	r   r   r   r   r=   r?   ZltzZnegatedr%   r   r   r   int_abs_impl  s   
r   c                 C      |\}t | ||j|S rp   r   r   )r   r   r   r   r=   r   r   r   uint_abs_impl     r   c           	      C   sR   |j \}}|\}}| ||||j}| ||||j}|||}t| ||j|S rp   )r   r   r   Zshlr   	r   r   r   r   ZvaltyZamttyrz   amtr%   r   r   r   int_shl_impl     
r   c           	      C   sh   |j \}}|\}}| ||||j}| ||||j}|jjr&|||}n|||}t| ||j|S rp   )r   r   r   r   ZashrZlshrr   r   r   r   r   int_shr_impl  s   
r   c                 C   R   |j \}}|\}}| ||||j}| ||||j}	|||	}
t| ||j|
S rp   )r   r   r   r3   r   r   r   r   r   atZbtavZbvZcavZcbcr%   r   r   r   int_and_impl  r   r   c                 C   r   rp   )r   r   r   or_r   r   r   r   r   int_or_impl  r   r   c                 C   r   rp   )r   r   r   r8   r   r   r   r   r   int_xor_impl  r   r   c                 C   s:   |j \}|\}||}| ||||j}t| ||j|S rp   )r   r   r   r   r   r   r   r   r   typrz   r%   r   r   r   int_negate_impl  s
   
r   c                 C   0   |j \}|\}| ||||j}t| ||j|S rp   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   r8   r   r2   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 sw   Y  || |	||
 |
| W d   n1 sw   Y  || ||
}t| ||j|S )z
    np.sign(int)
    r,   r.   r   r-   r   z.zeroz.postestz.posz.negz.exitN)r   r2   r   r4   r   rI   append_basic_blockZcbranchZ
goto_blockr:   branchZposition_at_endr;   r   r   )r   r   r   r   r=   POSNEGr?   r   Zcmp_pospresultZbb_zeroZ
bb_postestZbb_posZbb_negZbb_exitr%   r   r   r   int_sign_impl  s>   






r   c                 C   s:   |j \}|\}| ||||j}||}t| ||j|S rp   )r   r   r   r   r   r   r   r   r   bool_negate_impl  
   
r   c                 C   r   rp   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) qt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,-t j.t j/D ]K} ttj| | t+ ttj!| | t0 ttj#| | t1 ttj%| | t2 ttjt j'| t ttjt j'| t ttt j'| t tt(| t3 qd S rp   )4r
   r\   r   operatorr   r&   iaddr(   r)   isubr*   r+   imuleqr   ner   lshiftr   ilshiftrshiftr   irshiftr   r   posr   re   ro   ipowZnp_unsigned_domainltr   ler   gtr   ger   Floatrx   r   IntegerLiteralr   	itertoolschainZpy_signed_domainZnp_signed_domainr   r   r   r   r<   r   r   r   _implement_integer_operators&  sV   
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 rp   )r
   Booleanr\   r   r   r3   r   iandr   r   iorr8   r   ixorrg   r   r   r   r   r   _implement_bitwise_operatorsW  s   r   c                 C      |j | }t| ||j|S rp   )faddr   r   r   r   r   r   real_add_implg     
r   c                 C   r   rp   )fsubr   r   r   r   r   r   real_sub_impll  r   r   c                 C   r   rp   )rq   r   r   r   r   r   r   real_mul_implq  r   r   c                 C   sX   t ||d  | j|d W d    n1 sw   Y  |j| }t| ||j|S )Nr,   rX   )r   rM   rK   rL   rY   r   r   r   r   r   r   real_div_implv  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.remZlinkonce_odrentry)r2   moduleZmanglerr   FunctionTypeZPointerTyper   get_or_insert_functionZis_declarationlinkageZ	IRBuilderr   r   real_divmod_func_bodyr:   retrI   callr;   )r   r   r=   r>   Zfloattyr   fnamefntyfnZ	fnbuilderZfx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k\}}|8 |
d||}|| ||||| ||||| W d    n1 sw   Y  W d    n1 sw   Y  | |||
|	}||| W d    n1 sw   Y  W d    n1 sw   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       ra   r1   r0   Tr/   )rf   doubleg      ?r   )r   rI   r2   fremrY   r   r:   fcmp_unorderedfcmp_orderedr9   r   r6   r   r   r;   r
   Zfloat32Zfloat64strget_functionrd   floorr	   ry   r   Zifnotrq   )r   r   ZvxZwxr   ZpdivZ	pfloordivr   r   r?   ZNZEROr@   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     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 sw   Y  t |||||fS )NrC   rD   rF   Fr/   zmodulo by zero)r   rI   r2   r9   rJ   rK   rL   rY   r   r:   r   rR   r;   )r   r   r   r   locr=   r>   rC   rF   rM   rN   rO   rP   r   r   r   real_divmod_impl  s2   	r
  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 )NFr/   r  )r   rI   r2   r9   rJ   rK   rL   r   r:   r   r   r   r;   )r   r   r   r   r	  r=   r>   r%   rM   rN   rF   _r   r   r   real_mod_impl  *   
r  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 )NFr/   rX   )r   rI   r2   r9   rJ   rK   rL   rY   r:   r   r   r   r;   )r   r   r   r   r	  r=   r>   r%   rM   rN   rC   r  r   r   r   real_floordiv_impl,  r  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  rd   re   Zdeclare_intrinsicr2   r   r   r   )
r   r   r   r   r=   r>   r   impr%   r   r   r   r   real_power_impl?  s   r  c                 C   r}   r~   r  r   r   r   r   r   r   real_lt_implK  r   r  c                 C   r}   r   r  r   r   r   r   real_le_implP  r   r  c                 C   r}   r   r  r   r   r   r   real_gt_implU  r   r  c                 C   r}   r   r  r   r   r   r   real_ge_implZ  r   r  c                 C   r}   r   r  r   r   r   r   real_eq_impl_  r   r  c                 C   r}   r   )r  r   r   r   r   r   r   real_ne_impld  r   r  c                 C   s,   |j \}t||}| tj|}|||S rp   )r   r	   ry   r  rd   fabs)r   r   r   r   r<   r   r   r   r   real_abs_impli  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_implp  s   r  c                 C   r   rp   r   r   r   r   r   real_positive_implv  r   r   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 sw   Y  W d   n1 sw   Y  W d   n1 sw   Y  W d   n1 sw   Y  ||}t| ||j	|S )z
    np.sign(float)
    r,   r.   r   r   r0   N)
r   r2   r   rI   r  r9   r:   r;   r   r   )r   r   r   r   r=   r   r   r?   r   Zis_posZis_negZgt_zeroZnot_gt_zeror   Znot_lt_zeror%   r   r   r   real_sign_impl}  s6   
r!  realc                 C   $   | j |||d}|j}t| |||S Nrt   )make_complexr"  r   r   r   r   rt   Zcplxr%   r   r   r   complex_real_impl     r(  imagc                 C   r#  r$  )r&  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 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 rp   )r   )r   r   r   rt   r   r   r   real_real_impl  s   r/  c                 C   s   t |j}t| |||S rp   )r   Zget_null_valuer2   r   )r   r   r   rt   r%   r   r   r   real_imag_impl  s   r0  c                 C   s   t | ||j|d S Nr   r   r   r   r   r   r   r   r   real_conjugate_impl  s   r3  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 sw   Y  W d    n1 sw   Y  ||}t| ||j|S )Nr   r%  r   r-   Znumba_cpowfZ
numba_cpow   )r   underlying_floatZmake_helperr   Z_getpointerget_constantr  r"  r*  r3   r9   complex_mul_implr
   Z	complex64Z
complex128r   r   ZVoidTyper2   r   r   r   r;   r   r   )r   r   r   r   cacbr<   ftyr#   r$   cr   paZpbZpcZTWOr?   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  sH   


r>  c                 C      |\}}|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=   r>   r-  r#   r$   r;  dr%   r   r   r   complex_add_impl     
rE  c                 C   r?  r@  )r   r&  r"  r*  r   r,  r   r   rA  r   r   r   complex_sub_impl  rF  rG  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*  rq   r   r   r,  r   r   )r   r   r   r   rB  rC  r<   r=   r>   r-  r#   r$   r;  rD  acZbdadbcr%   r   r   r   r7  ,  s"   
r7  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)r"  r*  rc   rx   complexNAN)r#   r$   ZarealZaimagZbrealZbimagratiodenomr   r   r   complex_divF  s.   

z%complex_div_impl.<locals>.complex_divrn   r   r   )r   r   r   r   rQ  r%   r   r   r   complex_div_implE  s   rS  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   rz   cmplxr%   r   r   r   complex_negate_imple  s   rU  c                 C   r   rp   r   r   r   r   r   rz   r   r   r   complex_positive_implq  r   rW  c                 C   r   |\}}|j d }| j|||d}| j|||d}|d|j|j}	|d|j|j}
||	|
}t| ||j|S )Nr   r%  r-   )r   r&  r  r"  r*  r3   r   r   )r   r   r   r   rB  rC  r   r=   r>   Zreals_are_eqZimags_are_eqr%   r   r   r   complex_eq_implv     
rY  c                 C   rX  )Nr   r%  r1   )r   r&  r  r"  r*  r   r   r   )r   r   r   r   rB  rC  r   r=   r>   Zreals_are_neZimags_are_ner%   r   r   r   complex_ne_impl  rZ  r[  c                 C   rL  )z)
    abs(z) := hypot(z.real, z.imag)
    c                 S   s   t | j| jS rp   )rd   hypotr"  r*  )r-  r   r   r   complex_abs  s   z%complex_abs_impl.<locals>.complex_absrR  )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   r2  r   r   r   number_item_impl  s   r_  c                 C   s:   |j \}|\}| ||||j}||}t| ||j|S rp   )r   r   r   r7   r   )r   r   r   r   r   rz   Zistruer%   r   r   r   number_not_impl  r   r`  c                 C   s
   |\}|S rp   r   rV  r   r   r   bool_as_bool  s   ra  c                 C      |\}| d|t|jdS )Nr1   r   )r   r   r2   rV  r   r   r   int_as_bool     rc  c                 C   rb  )Nr1   r   )r  r   r2   rV  r   r   r   float_as_bool  rd  re  c                 C   s^   |j \}|\}| |||}|j|j}}t|jd}	|d||	}
|d||	}||
|S )Nr   r1   )r   r&  r"  r*  r   r2   r  r   )r   r   r   r   r   rz   rT  r"  r*  zeroZreal_istrueZimag_istruer   r   r   complex_as_bool  s   rg  c                 C   s$   |  ||j|j}| |||j|S rp   )get_constant_genericliteral_typeliteral_valuer   r   r   fromtytotyrz   Zlitr   r   r   literal_int_to_number  s   rn  c                 C   sX   |j |j kr|S |j |j k r||| |S |jr#||| |S ||| |S rp   )r]   truncget_value_typer   Zsextzextr   r   rl  rm  rz   r   r   r   integer_to_integer  s   rs  c                 C   s   | || |S rp   )Zinttoptrrp  rr  r   r   r   integer_to_voidptr  s   rt  c                 C   s.   |  |}|j|jk r|||S |||S rp   )rp  r]   ZfpextZfptruncr   r   rl  rm  rz   r{   r   r   r   float_to_float	  s   
rv  c                 C   s(   |  |}|jr|||S |||S rp   )rp  r   ZsitofpZuitofpru  r   r   r   integer_to_float     
rw  c                 C   s(   |  |}|jr|||S |||S rp   )rp  r   ZfptosiZfptouiru  r   r   r   float_to_integer  rx  ry  c                 C   s@   |  ||||j}| |jd}| ||}||_||_| S r1  )r   r5  r6  r&  r"  r*  r,  )r   r   rl  rm  rz   r"  r*  rT  r   r   r   non_complex_to_complex!  s   rz  c           	      C   sX   |j }|j }| j|||d}| ||}| ||j|||_| ||j|||_| S r$  )r5  r&  r   r"  r*  r,  )	r   r   rl  rm  rz   ZsrctyZdsttysrcdstr   r   r   complex_to_complex,  s   r}  c                 C   s   |  |||S rp   )is_truerr  r   r   r   any_to_boolean7  s   r  c                 C   s$   | |td}| ||tj|S )N    )rq  r   ZIntTyper   r
   Zint32)r   r   rl  rm  rz   Zasintr   r   r   boolean_to_any;  s   r  c                 C   s"   |  ||j|j}| ||j|S rp   )rh  ri  rj  r~  rk  r   r   r   literal_int_to_booleanA  s   r  c                 C   s4   |j }| |||j}| |||j}t||fS rp   )r5  rh  r"  r*  r   Zliteral_struct)r   r   r<   pyvalr:  r"  r*  r   r   r   constant_complexN  s   r  c                 C   s&   t |tjr
t|}| |}||S rp   )rG   npZbool_boolrp  )r   r   r<   r  r{   r   r   r   constant_integerU  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 rp   r   )scalarviewtyr   r   r   r   o  s   
zscalar_view.<locals>.implN)
rG   r
   r   r\   ZabstractZ	DTypeSpecr]   rH   r   ZTypingError)r  r  r   r   r   r   scalar_viewf  s   r  viewrp   )rd   ru   r   numpyr  r   Zllvmliter   Zllvmlite.irr   Znumba.core.imputilsr   r   r   r   r   Z
numba.corer	   r
   r   r   Znumba.core.extendingr   Znumba.cpython.unsafe.numbersr   r   r&   r)   r+   rA   rB   rQ   divmodr\   rT   r  	ifloordivrV   truedivitruedivrZ   r   imodr[   r^   ro   re   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   Zpy_boolr   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   rx   Complexr(  r+  r.  r/  r0  r3  clsr>  rE  rG  r7  rf   rN  rS  rU  rW  rY  r[  r^  r   Numberr_  r`  r  ra  rc  re  rg  r7   rn  rs  Zvoidptrrt  rv  rw  ry  rz  r}  Anyr  r  ZBooleanLiteralr  r  r  r  r   r   r   r   <module>   s   			9

	+=							*1l







) 



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

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