a
    Df                     @   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ddfdgZaddhdiZbddjdkZcdldm Zddndo Zedpdq Zfdrds Zgdtdu Zhdvdw Zidxdy Zjdzd{ Zkd|d} Zld~d Zmdd 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dd Zxeejwddd Zye
dejwdd Zzdd Z{dd Z|dd Z}ej5ej%fD ]0Z~ee~de{ ee~de| e
de~e} qe
ej2ejwejwe
ej4ejwejwe
e2ejwejwdd Zdd Zdd Zdd ZedZdd Zdd Zdd Zdd Zdd Zdd Ze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
deje
dejdd Zdd Ze
eejdd Ze
eej%dd Ze
eej5dd Ze
eejwdd Zej%ej5ejwfD ]Zoe
ejeoe qLe
ejejQe eej3ej%eej3ej5eej3ejwdd Zeej%ej%dd Zeej%ejdd Zeej5ej5dd Zeej%ej5dd Zeej5ej%dd Zeej5ejweej%ejwdd Zeejwejwdd ZeejejddĄ ZeejejddƄ Zeej3ejeejejddȄ Zeejwddʄ Zeej%eej5eejdd̄ Zdd΄ Ze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   b/nfs/NAS7/SABIOD/METHODE/ermites/ermites_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 s0    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 s0    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rt| t|S |dkr|d@ r|| 9 }|dL }| | 9 } q|rd| 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                    s    fdd}|S )Nc           
         s`   |\}}| d|t|jd}|  |t|jd}| ||}||||}	t| ||j|	S Nr3   r   r7   r   r5   r   selectr
   r   
r    r!   r"   r   leftrightcmp_zerolt_zeroZge_zeror)   opr   r   implm  s    
z%int_signed_unsigned_cmp.<locals>.implr   r   r   r   r   r   int_signed_unsigned_cmpl  s    r   c                    s    fdd}|S )Nc           
         s`   |\}}| d|t|jd}|  t|jd|}| ||}||||}	t| ||j|	S r   r   r   r   r   r   r     s    z%int_unsigned_signed_cmp.<locals>.implr   r   r   r   r   int_unsigned_signed_cmp  s    r   c           	      C   sH   |\}t |jd }|d||}||}||||}t| ||j|S r   )r   r5   r7   negr   r
   r   )	r    r!   r"   r   r@   rB   ZltzZnegatedr)   r   r   r   int_abs_impl  s    
r   c                 C   s   |\}t | ||j|S rr   r
   r   )r    r!   r"   r   r@   r   r   r   uint_abs_impl  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_impl  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 s0    Y  || ||	|| W d   n1 s0    Y  ||& |	||
 |
| W d   n1 sF0    Y  ||& |	||
 |
| W d   n1 s0    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   r   Zcmp_pospresultZbb_zeroZ
bb_postestZbb_posZbb_negZbb_exitr)   r   r   r   int_sign_impl  s6    




(.**

r   c                 C   s:   |j \}|\}| ||||j}||}t| ||j|S 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_operatorsV  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rd|_	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 s0    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 s0    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     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 s0    Y  |
: t
| |||\}}|	|| |	|| W d    n1 s0    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 s0    Y  W d    n1 s0    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 s0    Y  W d    n1 s0    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_implJ  s    r  c                 C   s"   |j dg|R  }t| ||j|S r   r  r   r   r   r   real_le_implO  s    r  c                 C   s"   |j dg|R  }t| ||j|S r   r  r   r   r   r   real_gt_implT  s    r  c                 C   s"   |j dg|R  }t| ||j|S r   r  r   r   r   r   real_ge_implY  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?   r   r   r   r   real_abs_implh  s    r  c                 C   s,   ddl m} |||d }t| ||j|S Nr   mathimpl)numba.cpythonr  negate_realr
   r   )r    r!   r"   r   r  r)   r   r   r   real_negate_implo  s    r  c                 C   s0   |j \}|\}| ||||j}t| ||j|S 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 s0    Y  | ||
v\}}| ||| W d   n1 s0    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_zeror   Z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 s0    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
r0  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    
r6  c                 C   s   |\}}|j d }| j|||d}| j|||d}| ||}	|j}
|j}|j}|j}||
||	_||||	_|	 }t| ||j|S r1  )r   r  r  r  r   r  r
   r   r2  r   r   r   complex_sub_impl  s    
r7  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   r3  r4  r?   r@   rA   r  r'   r(   r-  r5  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 |st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_divE  s.    

z%complex_div_impl.<locals>.complex_divrp   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   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    rA  c                 C   s   |\}t | ||j|S rr   r   r    r!   r"   r   r|   r   r   r   complex_positive_implp  s    rC  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   r3  r4  r   r@   rA   Zreals_are_eqZimags_are_eqr)   r   r   r   complex_eq_implu  s    
rD  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   r3  r4  r   r@   rA   Zreals_are_neZimags_are_ner)   r   r   r   complex_ne_impl  s    
rE  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_abs  s    z%complex_abs_impl.<locals>.complex_absr>  )r    r!   r"   r   rG  r)   r   r   r   complex_abs_impl  s    rH  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    rI  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
    
rJ  c                 C   s
   |\}|S rr   r   rB  r   r   r   bool_as_bool  s    rK  c                 C   s   |\}| d|t|jdS )Nr4   r   )r   r   r5   rB  r   r   r   int_as_bool  s    rL  c                 C   s   |\}| d|t|jdS )Nr4   r   )r   r   r5   rB  r   r   r   float_as_bool  s    rM  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|   r@  r  r  ZzeroZreal_istrueZimag_istruer   r   r   complex_as_bool  s    rN  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    rU  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!   rS  rT  r|   r   r   r   integer_to_integer  s    rZ  c                 C   s   | || |S rr   )ZinttoptrrW  rY  r   r   r   integer_to_voidptr  s    r[  c                 C   s2   |  |}|j|jk r"|||S |||S d S rr   )rW  r_   ZfpextZfptruncr    r!   rS  rT  r|   r}   r   r   r   float_to_float  s    
r]  c                 C   s,   |  |}|jr|||S |||S d S rr   )rW  r   ZsitofpZuitofpr\  r   r   r   integer_to_float  s    
r^  c                 C   s,   |  |}|jr|||S |||S d S rr   )rW  r   ZfptosiZfptouir\  r   r   r   float_to_integer  s    
r_  c                 C   s@   |  ||||j}| |jd}| ||}||_||_| S r#  )r   r'  r(  r  r  r  r  )r    r!   rS  rT  r|   r  r  r@  r   r   r   non_complex_to_complex  s    r`  c           	      C   sX   |j }|j }| j|||d}| ||}| ||j|||_| ||j|||_| S r  )r'  r  r   r  r  r  )	r    r!   rS  rT  r|   ZsrctyZdsttysrcdstr   r   r   complex_to_complex*  s    rc  c                 C   s   |  |||S rr   )is_truerY  r   r   r   any_to_boolean5  s    re  c                 C   s$   | |td}| ||tj|S )N    )rX  r   ZIntTyper   r   int32)r    r!   rS  rT  r|   Zasintr   r   r   boolean_to_any9  s    rh  c                 C   s"   |  ||j|j}| ||j|S rr   )rO  rP  rQ  rd  rR  r   r   r   literal_int_to_boolean?  s    ri  c                 C   s4   |j }| |||j}| |||j}t||fS rr   )r'  rO  r  r  r   Zliteral_struct)r    r!   r?   pyvalr,  r  r  r   r   r   constant_complexL  s    rk  c                 C   s&   t |tjrt|}| |}||S rr   )rJ   npZbool_boolrW  )r    r!   r?   rj  r}   r   r   r   constant_integerS  s    
rn  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)ro  rp  r   r   r   r   scalar_viewd  s    rq  view)N)N)N)rf   rw   numpyrl  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   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%  clsr0  r6  r7  r)  rh   r<  r?  rA  rC  rD  rE  rH  r   NumberrI  rJ  rm  rK  rL  rM  rN  r:   rU  rZ  Zvoidptrr[  r]  r^  r_  r`  rc  Anyre  rh  ZBooleanLiteralri  rk  rn  rq  r   r   r   r   <module>   s  $ 			9

	+=							*0l







) 










		




	

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