
    J/Ph?                        d Z 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
mZ ddl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	lmZ  e
d
          Zej        Z ej         ej        d                    Zej        Zej         Z! ej         ej        d                    Z"e"j        Z#e"j         Z$dZ%dZ&dZ'dZ(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4dgdZ5 e4ej6        d            e4ej7        d           Z8 e4ej9        d!          Z: e4ej;        d"          Z< e4ej=        d#          Z> e4ej?        d$          Z@ e4ejA        d%          ZB e5ejC        d&d'          ZD e5ejE        d(d)          ZF e5ejG        d*d+          ZH e5ejI        d,d-          ZJ e5ejK        d.d/          ZL e5ejM        d0d1          ZN e5ejO        d2d3          ZP e5ejQ        d4d5          ZR e5ejS        d6d7          ZT e5ejU        d8d9          ZV e5ejW        d:d;          ZX e5ejY        d<d=          ZZ e5ej[        d>d?          Z\ e5ej]        d@dA          Z^ e5ej=        dBdC          Z> e5ej_        dDdEdF          Z` e5eja        dGdHdF          Zb e5ejc        dIdJ          Zd e5eje        dKdL          Zf e5ejg        dMdNdF          Zh e5eji        dOdP          Zj eejk        ejl                  dQ             Zm eejk        ejn                  dR             Zo eejp        ejl                  dS             Zq eejp        ejn                  dT             Zr eejs        ejl                  dU             Zt eejs        ejn                  dV             Zu eejv        ejl        ejl                  dW             Zw eejx        ejl                  dX             Zy eejz        ejl        ej{                  dY             Z| eej}        ej~        ej~                  dZ             Z eej}        ej        ej                  d[             Z eej}        ejl        ejl                  d\             Z eej        ej~        ej~                  d]             Z eej        ej        ej                  d^             Z eej        ejl        ejl                  d_             Z eej        ejl                  d`             Z e3ej        e            eej        ejl                  da             Z e3ej        e            eej        ejl        ejl                   eej        ejl        ejn                  db                         Z eej        ejl        ejl                  dc             Zdd Z ee          de             Zdf Z  eej        ejn        ejn                  e           dS )hzA
Provide math calls that uses intrinsics or libc math functions.
    N)Constant)Registryimpl_ret_untracked)typeof)typesutilsconfigcgutils)overload)	signature)trailing_zerosmathimplfloat32float64il        l    l            c                 0    |                      d||          S )z<
    Return a condition testing whether *val* is a NaN.
    uno)fcmp_unorderedbuildervals     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cpython/new_mathimpl.pyis_nanr   (   s     !!%c222    c                    t          |j        t          d                    }t          |j        t          d                    }|                     d||          }|                     d||          }|                     ||          S )zB
    Return a condition testing whether *val* is an infinite.
    z+infz-infz==)r   typefloatfcmp_orderedor_)r   r   pos_infneg_infisposinfisneginfs         r   is_infr#   .   st     sxv//Gsxv//G##D#w77H##D#w77H;;x***r   c                 \    |                      ||          }|                     d||          S )z?
    Return a condition testing whether *val* is a finite.
    ord)fsubr   )r   r   val_minus_vals      r   	is_finiter(   8   s/    
 LLc**M}mDDDr   c                     |j         t          j                                        k    sJ |                     |t          j                            d                    S )z1
    Bitcast a double into a 64-bit integer.
    @   )r   llvmliteir
DoubleTypebitcastIntTyper   s     r   f64_as_int64r0   @   sI     8x{--//////??3 3 3B 7 7888r   c                     |j         t          j                            d          k    sJ |                     |t          j                                                  S )z1
    Bitcast a 64-bit integer into a double.
    r*   )r   r+   r,   r/   r.   r-   r   s     r   int64_as_f64r2   G   sI     8x{**2......??3 6 6 8 8999r   c                     |j         t          j                                        k    sJ |                     |t          j                            d                    S )z0
    Bitcast a float into a 32-bit integer.
        )r   r+   r,   	FloatTyper.   r/   r   s     r   f32_as_int32r6   N   sI     8x{,,......??3 3 3B 7 7888r   c                     |j         t          j                            d          k    sJ |                     |t          j                                                  S )z0
    Bitcast a 32-bit integer into a float.
    r4   )r   r+   r,   r/   r.   r5   r   s     r   int32_as_f32r8   U   sI     8x{**2......??3 5 5 7 7888r   c                 T    |                      t          |j        d          |          S )zB
    Negate real number *val*, with proper handling of zeros.
    g       )r&   r   r   r   s     r   negate_realr:   \   s$    
 <<400#666r   c                 |    | j         }|                    |d |D                       }|                     ||          S )z9
    Call a LLVM intrinsic floating-point operation.
    c                     g | ]	}|j         
S  )r   ).0as     r   
<listcomp>z%call_fp_intrinsic.<locals>.<listcomp>h   s    '='='=1'='='=r   )moduledeclare_intrinsiccall)r   nameargsmodintrs        r   call_fp_intrinsicrH   c   sC     .C  '='='='='=>>D<<d###r   c                       fd}|S )z
    Return an implementation factory to convert the single integral input
    argument to a float64, then defer to the *wrapped_impl*.
    c                    |\  }|j         d         }|                     |||t          j                  }t	          t          j        t          j                  } 	| |||f          }|                     ||t          j        |j                  S )Nr   )rE   castr   r   r   return_type)
contextr   sigrE   r   
input_typefpval	inner_sigreswrapped_impls
            r   implementerz2_unary_int_input_wrapper_impl.<locals>.implementerq   st    Xa[
Wc:u}EEemU];;	l7GYAA||GS%-IIIr   r=   )rS   rT   s   ` r   _unary_int_input_wrapper_implrU   l   s)    
J J J J J r   c                 j    t          |          } t          | t          j                  |           d S N)rU   lowerr   Integer)fn
float_implimpls      r   unary_math_int_implr]   {   s1    (44DE"emT"""""r   c                 r    t          | t          j                  fd            }t          | |           |S )zO
    Implement the math function *fn* using the LLVM intrinsic *intrcode*.
    c                 T    t          ||          }t          | ||j        |          S rW   )rH   r   rL   )rM   r   rN   rE   rR   intrcodes        r   r[   z#unary_math_intr.<locals>.float_impl   s*    488!'7COSIIIr   )rX   r   Floatr]   )rZ   r`   r[   s    ` r   unary_math_intrrb      sR     2u{J J J J J J'''r   Fc                     |rt           j        nd}fd} t          | t           j                  |           t	          | |           |S )a!  
    Register implementations of Python function *fn* using the
    external function named *f32extern* and *f64extern* (for float32
    and float64 inputs, respectively).
    If *int_restype* is true, then the function's return value should be
    integral, otherwise floating-point.
    Nc                    |\  }|j         }|j        d         }|                     |          }t          j        t          j        i|         }t          j                            ||g          }	t          j
        |j         |	|          }
|                    |
|f          }|                     ||||j                  }t          | ||j        |          S )z9
        Implement *fn* for a types.Float input.
        r   rD   )rA   rE   get_value_typer   r   r   r+   r,   FunctionTyper
   insert_pure_functionrC   rK   rL   r   )rM   r   rN   rE   r   rF   rO   lty	func_namefntyrZ   rR   	f32extern	f64externs               r   r[   z%unary_math_extern.<locals>.float_impl   s     nXa[
$$Z00M9M9 	 {''cU33)'.$YOOOll2v&&ll7CS_EE!'7COSIIIr   )r   py_intrX   ra   r]   )rZ   rl   rm   int_restype	f_restyper[   s    ``   r   unary_math_externrq      sp     !,5IJ J J J J J$ E"ek:&&& J'''r   z	llvm.fabszllvm.expzllvm.logz
llvm.log10z	llvm.log2zllvm.sinzllvm.coslog1pflog1pexpm1fexpm1erfferferfcferfctanftanasinfasinacosfacosatanfatanasinhfasinhacoshfacoshatanhfatanhsinhfsinhcoshfcoshtanhftanhlog2flog2ceilfceilTfloorffloornumba_gammafnumba_gammasqrtfsqrttruncftrunclgammaflgammac                 X    |\  }t          ||          }t          | ||j        |          S rW   )r   r   rL   rM   r   rN   rE   r   rR   s         r   isnan_float_implr      .    ES
#

CgwEEEr   c                 H    t           j        }t          | ||j        |          S rW   r
   	false_bitr   rL   rM   r   rN   rE   rR   s        r   isnan_int_implr           

CgwEEEr   c                 X    |\  }t          ||          }t          | ||j        |          S rW   )r#   r   rL   r   s         r   isinf_float_implr      r   r   c                 H    t           j        }t          | ||j        |          S rW   r   r   s        r   isinf_int_implr      r   r   c                 X    |\  }t          ||          }t          | ||j        |          S rW   )r(   r   rL   r   s         r   isfinite_float_implr      s.    ES
GS
!
!CgwEEEr   c                 H    t           j        }t          | ||j        |          S rW   )r
   true_bitr   rL   r   s        r   isfinite_int_implr      s     

CgwEEEr   c                     |d         j         }|j        }t          j        |t          j                            |||f          d|j        z            }|                    ||          }t          | ||j
        |          S )Nr   zllvm.copysign.%s)r   rA   r
   get_or_insert_functionr+   r,   rg   intrinsic_namerC   r   rL   )rM   r   rN   rE   ri   rF   rZ   rR   s           r   copysign_float_implr      sw    
q',C
.C		'X[-E-EcCQT:-V-V(:S=O(O
Q 
QB
,,r4
 
 CgwEEEr   c                 N   |\  }|                      |j        d                   }|                      |j        d                   }t          j        ||d          }t
          j                            ||t
          j                            |          f          }dddt          |                   }	t          j
        |j        ||	          }
|                    |
||f          }t          j        |||                    |          f          }t          | ||j        |          S )Nr      expre   numba_frexpfnumba_frexpr   double)get_data_typerE   rL   r
   alloca_oncer+   r,   rg   PointerTypestrr   rA   rC   make_anonymous_structloadr   )rM   r   rN   rE   r   flttyinttyexpptrrk   fnamerZ   rR   s               r   
frexp_implr     s	   DC!!#(1+..E!!#/!"455E %e<<<F;##EE8;3J3J53Q3Q+RSSD
 
 e**E 
	'e	D	DB
,,rC=
)
)C

'#w||F7K7K1L
M
MCgwEEEr   c                 P   |\  }}t          | j        |j                  \  }}t          j                            |||f          }dddt          |                   }	t          j        |j	        ||	          }
|
                    |
||f          }t          | ||j        |          S )Nnumba_ldexpfnumba_ldexpr   re   )mapr   rE   r+   r,   rg   r   r
   rh   rA   rC   r   rL   )rM   r   rN   rE   r   r   r   r   rk   r   rZ   rR   s               r   
ldexp_implr     s    HCw,ch77LE5;##EE5>::D
 
 e**E 
	%gnd	G	G	GB
,,rC:
&
&CgwEEEr   c                 Z   |\  }}|                     |t          j                                                  }|                     |t          j                                                  }t	          t
          j        t
          j        t
          j                  }t          | ||||f          S rW   )sitofpr+   r,   r-   r   r   r   atan2_float_implrM   r   rN   rE   yxfsigs          r   atan2_s64_implr   &  |    FQq(+002233Aq(+002233AU]EM5=AADGWdQF;;;r   c                 Z   |\  }}|                     |t          j                                                  }|                     |t          j                                                  }t	          t
          j        t
          j        t
          j                  }t          | ||||f          S rW   )uitofpr+   r,   r-   r   r   r   r   r   s          r   atan2_u64_implr   .  r   r   c                    t          |          dk    sJ |j        }|j        d         }|                     |          }t          j        dt          j        di|         }t          j        	                    |||f          }t          j        |j        ||          }	|                    |	|          }
t          | ||j        |
          S )N   r   atan2fatan2re   )lenrA   rE   rf   r   r   r   r+   r,   rg   r
   rh   rC   r   rL   )rM   r   rN   rE   rF   tyri   rj   rk   rZ   rR   s              r   r   r   6  s    t99>>>>
.C	!B

 
 
$
$Cxw
 I ;##C#s44D		%gnd	K	K	KB
,,r4
 
 CgwEEEr   c                    |\  }}|                     |t          j                                                  }|                     |t          j                                                  }t	          t
          j        t
          j        t
          j                  }t          | ||||f          }t          | ||j	        |          S rW   
r   r+   r,   r-   r   r   r   hypot_float_implr   rL   rM   r   rN   rE   r   r   r   rR   s           r   hypot_s64_implr   I      FQq(+002233Aq(+002233AU]EM5=AAD
7GTAq6
:
:CgwEEEr   c                    |\  }}|                     |t          j                                                  }|                     |t          j                                                  }t	          t
          j        t
          j        t
          j                  }t          | ||||f          }t          | ||j	        |          S rW   r   r   s           r   hypot_u64_implr   S  r   r   c                    |j         \  }}||cxk    r|j        k    sn J |\  }}t          j        t          j        dk    rdndt          j        t          j        dk    rdndi|         }t          j        ||          t          j        dk    r/t          j	        dk    r |t          d                    fd}	nfd	}	|                     ||	||          }
t          | ||j        |
          S )
Nwin32_hypotfhypotf_hypothypotr4   infc                 p    t          j        |           st          j        |          rS  | |          S rW   )mathisinf)r   r   r   
plat_hypots     r   
hypot_implz$hypot_float_impl.<locals>.hypot_impln  s9    z!}} 
1 
:a###r   c                      | |          S rW   r=   )r   r   r   s     r   r   z$hypot_float_impl.<locals>.hypot_impls  s    :a###r   )rE   rL   r   r   sysplatformr   ExternalFunctionr	   MACHINE_BITSr   compile_internalr   )rM   r   rN   rE   xtyytyr   r   r   r   rR   r   r   s              @@r   r   r   ]  s0   xHC#((((((((((DAq
 	CLG$;$;yy3<7#:#:xx 
E 's33J
|w6#6"#<#<c%,,	$ 	$ 	$ 	$ 	$ 	$ 	$
	$ 	$ 	$ 	$ 	$ 
"
"7JT
B
BCgwEEEr   c                     |\  }|                      |j        t          j        dz            }|                    ||          }t          | ||j        |          S N   get_constantrL   r   pifmulr   rM   r   rN   rE   r   coefrR   s          r   radians_float_implr  |  sO    
CQ3??D
,,q$

CgwEEEr   c                     |\  }|                      |j        dt          j        z            }|                    ||          }t          | ||j        |          S r   r   r   s          r   degrees_float_implr    sO    
CQtw??D
,,q$

CgwEEEr   c                 Z    |                      t          j        |          } |||          S rW   )get_functionoperatorpow)rM   r   rN   rE   r\   s        r   pow_implr    s-     c22D4r   c                    t          |          dk    sJ |j        d         }|                     |          }t          j        dt          j        di|         }t          j                            |||f          }t          j
        |j        ||          }|                    ||          }	t          | ||j        |	          S )Nr   r   
nextafterf	nextafterre   )r   rE   rf   r   r   r   r+   r,   rg   r
   rh   rA   rC   r   rL   )
rM   r   rN   rE   r   ri   rj   rk   rZ   rR   s
             r   nextafter_implr    s    t99>>>>	!B

 
 
$
$C|{
 I ;##C#s44D		%gnd	K	K	KB
,,r4
 
 CgwEEEr   c                     dS )z8Convert integer to unsigned integer of equivalent width.Nr=   Ts    r   	_unsignedr    s    Dr   c                     | t           j        v rd S | t           j        v r2t          t           d                    | j                            fdS d S )Nc                     | S rW   r=   r  s    r   <lambda>z _unsigned_impl.<locals>.<lambda>  s     r   zuint{}c                      |           S rW   r=   r  newTs    r   r  z _unsigned_impl.<locals>.<lambda>  s    a r   )r   unsigned_domainsigned_domaingetattrformatbitwidthr  s    @r   _unsigned_implr    s[    E!!!{	
e!	!	!uhooaj99::      
"	!r   c                     |j         \  }}||cxk    r|j        k    sn J |\  }}d }|                     ||||          }	t          | ||j        |	          S )Nc                 F   t          |           }| dk    rt          |          S |dk    rt          |           S t          |           }t          |          }t          ||          }t	          t          t          j        | |                              }t	          t          t          j        ||                              }||k    r7||k    r||}}||z  }t          j        |t          |                    }||k    7t          j         ||          |          }|S )zO
        Stein's algorithm, heavily cribbed from Julia implementation.
        r   )r   absr   minr  npright_shift
left_shift)	r?   br  zazbkuvrs	            r   gcdzgcd_impl.<locals>.gcd  s    GG66#a&&=66#a&&=AABKKc".B//0011c".B//00111ff1uu!1FAq."3"344A	 1ff
 M!!A$$""r   )rE   rL   r   r   )
rM   r   rN   rE   r   r   r   r   r+  rR   s
             r   gcd_implr,    s}    xHC#((((((((((DAq  * 
"
"7Cd
;
;CgwEEEr   )F)__doc__r   r  r   numpyr!  llvmlite.irr+   r   numba.core.imputilsr   r   numbar   
numba.corer   r   r	   r
   numba.core.extendingr   numba.core.typingr   numba.cpython.unsafe.numbersr   registryrX   finfodtype_NP_FLT_FINFOmaxFLT_MAXtinyFLT_MIN_NP_DBL_FINFODBL_MAXDBL_MINFLOAT_ABS_MASKFLOAT_SIGN_MASKDOUBLE_ABS_MASKDOUBLE_SIGN_MASKr   r#   r(   r0   r2   r6   r8   r:   rH   rU   r]   rb   rq   fabsr   exp_implloglog_impllog10
log10_implr   	log2_implsinsin_implcoscos_implrs   
log1p_implru   
expm1_implrw   erf_implry   	erfc_implr{   tan_implr}   	asin_implr   	acos_implr   	atan_implr   
asinh_implr   
acosh_implr   
atanh_implr   	sinh_implr   	cosh_implr   	tanh_implr   	ceil_implr   
floor_implgamma
gamma_implr   	sqrt_implr   
trunc_implr   lgamma_implisnanra   r   rY   r   r   r   r   isfiniter   r   copysignr   frexpr   ldexpnp_intcr   r   np_int64r   	np_uint64r   r   r   r   r   r   radiansr  degreesr  r  r  r  r  r  r  r,  r+  r=   r   r   <module>ro     s      



                     < < < < < < < <       4 4 4 4 4 4 4 4 4 4 4 4 ) ) ) ) ) ) ' ' ' ' ' ' 7 7 7 7 7 7 8J ),,--



),,--



$% 3 3 3+ + +E E E9 9 9: : :9 9 99 9 97 7 7$ $ $  # # #
 
 
! ! ! !H 	; ' ' '?48Z00?48Z00_TZ66
ODI{33	?48Z00?48Z00tz8W==
tz8W==
TXvu55di&99	TXvu55di&99	di&99	di&99	tz8W==
tz8W==
tz8W==
di&99	di&99	di&99	di&99	di&$??	tz8WdCC
tz>=II
di&99	tz8WdCC
YAA tz5;F F  F
 tz5=!!F F "!F
 tz5;F F  F
 tz5=!!F F "!F
 t}ek""F F #"F t}em$$F F %$F
 t}ek5;//F F 0/F tz5;F F  F  tz5;..
F 
F /.
F  tz5>5>22< < 32< tz5?EO44< < 54< tz5;,,F F -,F$ tz5>5>22F F 32F tz5?EO44F F 54F tz5;,,F F -,F< t|U[!!F F "!F  DL"4 5 5 5 t|U[!!F F "!F  DL"4 5 5 5 txek**txem,,  -, +* t~u{EK00F F 10F	 	 	 
)! ! !F F F< .dhu} - -h 7 7 7 7 7r   