mirror of
https://bitbucket.org/cosmicvoids/vide_public.git
synced 2025-07-04 15:21:11 +00:00
Update cosmotool 2nd part
This commit is contained in:
parent
64e05fc180
commit
003bc39d4a
70 changed files with 8708 additions and 0 deletions
43
external/cosmotool/python/_fast_interp.pyx
vendored
Normal file
43
external/cosmotool/python/_fast_interp.pyx
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
from cpython cimport bool
|
||||
from cython cimport view
|
||||
from cython.parallel import prange, parallel
|
||||
from libc.math cimport sin, cos, abs, floor, round, sqrt
|
||||
import numpy as np
|
||||
cimport numpy as npx
|
||||
cimport cython
|
||||
|
||||
__all__=["fast_interp"]
|
||||
|
||||
|
||||
@cython.boundscheck(False)
|
||||
@cython.cdivision(True)
|
||||
def fast_interp(xmin0, dx0, A0, y0, out0, beyond_val=np.nan):
|
||||
cdef double rq, q
|
||||
cdef int iq
|
||||
cdef long i, Asize, ysize
|
||||
cdef npx.float64_t xmin, dx
|
||||
cdef npx.float64_t[:] out
|
||||
cdef npx.float64_t[:] A, y
|
||||
cdef npx.float64_t beyond
|
||||
|
||||
beyond=beyond_val
|
||||
xmin = xmin0
|
||||
dx = dx0
|
||||
A = A0
|
||||
y = y0
|
||||
ysize = y.size
|
||||
out = out0
|
||||
Asize = A.size
|
||||
|
||||
if out.size != ysize:
|
||||
raise ValueError("out and y must have the same size")
|
||||
|
||||
with nogil:
|
||||
for i in prange(ysize):
|
||||
q = (y[i] - xmin) / dx
|
||||
iq = int(floor(q))
|
||||
rq = (q-iq)
|
||||
if iq+1 >= Asize or iq < 0:
|
||||
out[i] = beyond
|
||||
else:
|
||||
out[i] = rq * A[iq+1] + (1-rq)*A[iq]
|
Loading…
Add table
Add a link
Reference in a new issue