From 7593c18e76133f62e4d1b6bf7531fd756802a3ca Mon Sep 17 00:00:00 2001 From: Piseed <103853121+Piseed@users.noreply.github.com> Date: Mon, 27 Apr 2026 00:07:55 +0300 Subject: [PATCH 1/5] Removed numpy.int as deprecated reference --- idr/idr.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/idr/idr.py b/idr/idr.py index e94d61c..8a8d033 100644 --- a/idr/idr.py +++ b/idr/idr.py @@ -295,8 +295,8 @@ def build_rank_vectors(merged_peaks): rank1 = numpy.lexsort((numpy.random.random(len(s1)), s1)).argsort() rank2 = numpy.lexsort((numpy.random.random(len(s2)), s2)).argsort() - return ( numpy.array(rank1, dtype=numpy.int), - numpy.array(rank2, dtype=numpy.int) ) + return ( numpy.array(rank1, dtype=int), + numpy.array(rank2, dtype=int) ) def build_idr_output_line_with_bed6( m_pk, IDR, localIDR, output_file_type, signal_type, From 00202fa454c57a8d5f44eef9b2fc602a3e7b6392 Mon Sep 17 00:00:00 2001 From: Piseed <103853121+Piseed@users.noreply.github.com> Date: Fri, 8 May 2026 13:32:25 +0300 Subject: [PATCH 2/5] Delete idr/inv_cdf.pyx --- idr/inv_cdf.pyx | 107 ------------------------------------------------ 1 file changed, 107 deletions(-) delete mode 100644 idr/inv_cdf.pyx diff --git a/idr/inv_cdf.pyx b/idr/inv_cdf.pyx deleted file mode 100644 index a356179..0000000 --- a/idr/inv_cdf.pyx +++ /dev/null @@ -1,107 +0,0 @@ -cimport cython -cimport numpy as np -from libc.math cimport exp, sqrt, pow, log, erf, fabs -from libc.stdlib cimport malloc, free - -cdef inline double d_max(double a, double b): return a if a >= b else b -cdef inline double d_min(double a, double b): return a if a <= b else b - -@cython.cdivision(True) -cdef double c_cdf(double x, double mu, double sigma, double lamda): - norm_x = (x-mu)/sigma - return 0.5*lamda*erf(norm_x/sqrt(2)) + 0.5*(1-lamda)*erf(x/sqrt(2)) + 0.5 - -@cython.cdivision(True) -cdef double c_cdf_d1(double x, double mu, double sigma, double lamda): - cdef double pi = 3.14159265358979323846264338327950288419716939937510582 - cdef double pre = 1./sqrt(2*pi) - - cdef double noise = (1-lamda)*exp(-0.5*(x**2)) - - cdef double norm_x = (x - mu)/sigma - cdef double signal = lamda*exp(-0.5*(norm_x**2)) - return pre*(signal + noise) - -@cython.cdivision(True) -def cdf_d1(double x, double mu, double sigma, double lamda): - return c_cdf_d1(x, mu, sigma, lamda) - -@cython.cdivision(True) -def cdf(double x, double mu, double sigma, double lamda): - return c_cdf(x, mu, sigma, lamda) - -@cython.cdivision(True) -cdef double c_cdf_i(double r, double mu, double sigma, double lamda, - double lb, double ub, double EPS): - for i in range(1000): - mid = lb + (ub - lb)/2.; - guess = c_cdf(mid, mu, sigma, lamda) - if fabs(guess - r) < EPS: - return mid - elif guess < r: - lb = mid - else: - ub = mid - - return mid - -@cython.cdivision(True) -def cdf_i(double r, double mu, double sigma, double lamda, - double lb, double ub, double EPS): - lb = d_min(0, mu) - 10/d_min(1, sigma) - ub = d_max(0, mu) + 10/d_min(1, sigma) - - while c_cdf(lb, mu, sigma, lamda) > r: - lb -= 10 - - while c_cdf(ub, mu, sigma, lamda) < r: - ub += 10 - - cdef double res = c_cdf_i(r, mu, sigma, lamda, lb, ub, EPS) - if c_cdf(res, mu, sigma, lamda) - r < EPS: - return res - - assert False - -@cython.boundscheck(False) -@cython.wraparound(False) -@cython.cdivision(True) -def c_compute_pseudo_values( - np.ndarray[np.int_t, ndim=1] rs, - np.ndarray[np.double_t, ndim=1] zs, - double mu, double sigma, double lamda, - double EPS): - cdef int N = len(rs) - cdef double pseudo_N = N+1 - cdef double* ordered_zs = malloc(N*sizeof(double)) - - cdef double smallest_r = 1./pseudo_N - lb = d_min(0, mu) - while c_cdf(lb, mu, sigma, lamda) > smallest_r: - lb -= 1 - - ub = d_max(0, mu) - while c_cdf(ub, mu, sigma, lamda) < 1-smallest_r: - ub += 1 - - lb = c_cdf_i(smallest_r, mu, sigma, lamda, lb, ub, EPS) - ordered_zs[0] = lb - - cdef size_t i = 0, j= 0 - cdef double r = 0 - cdef double res = 10, prev_res = 10 - for i in range(1, N): - r = (i+1)/pseudo_N - if c_cdf(ub, mu, sigma, lamda) < r: - ub += 10 - res = c_cdf_i(r, mu, sigma, lamda, lb, ub, EPS) - - ordered_zs[i] = res - lb = res - ub = lb + 2*(res - ordered_zs[i-1]) - - for i in range(N): - zs[i] = ordered_zs[rs[i]] - free( ordered_zs ) - - return zs From 752a2addd1043f7d7326409251ebf0b6fef98a2f Mon Sep 17 00:00:00 2001 From: Piseed <103853121+Piseed@users.noreply.github.com> Date: Fri, 8 May 2026 13:32:56 +0300 Subject: [PATCH 3/5] Add files via upload --- idr/inv_cdf.pyx | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 idr/inv_cdf.pyx diff --git a/idr/inv_cdf.pyx b/idr/inv_cdf.pyx new file mode 100644 index 0000000..646172b --- /dev/null +++ b/idr/inv_cdf.pyx @@ -0,0 +1,108 @@ +cimport cython +cimport numpy as np +import numpy as np +from libc.math cimport exp, sqrt, pow, log, erf, fabs +from libc.stdlib cimport malloc, free + +cdef inline double d_max(double a, double b): return a if a >= b else b +cdef inline double d_min(double a, double b): return a if a <= b else b + +@cython.cdivision(True) +cdef double c_cdf(double x, double mu, double sigma, double lamda): + norm_x = (x-mu)/sigma + return 0.5*lamda*erf(norm_x/sqrt(2)) + 0.5*(1-lamda)*erf(x/sqrt(2)) + 0.5 + +@cython.cdivision(True) +cdef double c_cdf_d1(double x, double mu, double sigma, double lamda): + cdef double pi = 3.14159265358979323846264338327950288419716939937510582 + cdef double pre = 1./sqrt(2*pi) + + cdef double noise = (1-lamda)*exp(-0.5*(x**2)) + + cdef double norm_x = (x - mu)/sigma + cdef double signal = lamda*exp(-0.5*(norm_x**2)) + return pre*(signal + noise) + +@cython.cdivision(True) +def cdf_d1(double x, double mu, double sigma, double lamda): + return c_cdf_d1(x, mu, sigma, lamda) + +@cython.cdivision(True) +def cdf(double x, double mu, double sigma, double lamda): + return c_cdf(x, mu, sigma, lamda) + +@cython.cdivision(True) +cdef double c_cdf_i(double r, double mu, double sigma, double lamda, + double lb, double ub, double EPS): + for i in range(1000): + mid = lb + (ub - lb)/2.; + guess = c_cdf(mid, mu, sigma, lamda) + if fabs(guess - r) < EPS: + return mid + elif guess < r: + lb = mid + else: + ub = mid + + return mid + +@cython.cdivision(True) +def cdf_i(double r, double mu, double sigma, double lamda, + double lb, double ub, double EPS): + lb = d_min(0, mu) - 10/d_min(1, sigma) + ub = d_max(0, mu) + 10/d_min(1, sigma) + + while c_cdf(lb, mu, sigma, lamda) > r: + lb -= 10 + + while c_cdf(ub, mu, sigma, lamda) < r: + ub += 10 + + cdef double res = c_cdf_i(r, mu, sigma, lamda, lb, ub, EPS) + if c_cdf(res, mu, sigma, lamda) - r < EPS: + return res + + assert False + +@cython.boundscheck(False) +@cython.wraparound(False) +@cython.cdivision(True) +def c_compute_pseudo_values( + long[:] rs, + double[:] zs, + double mu, double sigma, double lamda, + double EPS): + cdef int N = rs.shape[0] + cdef double pseudo_N = N+1 + cdef double* ordered_zs = malloc(N*sizeof(double)) + + cdef double smallest_r = 1./pseudo_N + cdef double lb = d_min(0, mu) + while c_cdf(lb, mu, sigma, lamda) > smallest_r: + lb -= 1 + + cdef double ub = d_max(0, mu) + while c_cdf(ub, mu, sigma, lamda) < 1-smallest_r: + ub += 1 + + lb = c_cdf_i(smallest_r, mu, sigma, lamda, lb, ub, EPS) + ordered_zs[0] = lb + + cdef size_t i = 0, j= 0 + cdef double r = 0 + cdef double res = 10, prev_res = 10 + for i in range(1, N): + r = (i+1)/pseudo_N + if c_cdf(ub, mu, sigma, lamda) < r: + ub += 10 + res = c_cdf_i(r, mu, sigma, lamda, lb, ub, EPS) + + ordered_zs[i] = res + lb = res + ub = lb + 2*(res - ordered_zs[i-1]) + + for i in range(N): + zs[i] = ordered_zs[rs[i]] + free( ordered_zs ) + + return np.asarray(zs) From e058a68000f1195234922dfbb71b55c571701121 Mon Sep 17 00:00:00 2001 From: Piseed <103853121+Piseed@users.noreply.github.com> Date: Fri, 8 May 2026 13:43:51 +0300 Subject: [PATCH 4/5] Update inv_cdf.pyx --- idr/inv_cdf.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/idr/inv_cdf.pyx b/idr/inv_cdf.pyx index 646172b..e155b43 100644 --- a/idr/inv_cdf.pyx +++ b/idr/inv_cdf.pyx @@ -1,5 +1,5 @@ cimport cython -cimport numpy as np +cimport numpy as cnp import numpy as np from libc.math cimport exp, sqrt, pow, log, erf, fabs from libc.stdlib cimport malloc, free From 59d3f15b5457bc2c00a72800db45826cac7cf122 Mon Sep 17 00:00:00 2001 From: Piseed <103853121+Piseed@users.noreply.github.com> Date: Fri, 8 May 2026 13:46:14 +0300 Subject: [PATCH 5/5] Update inv_cdf.pyx --- idr/inv_cdf.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/idr/inv_cdf.pyx b/idr/inv_cdf.pyx index e155b43..646172b 100644 --- a/idr/inv_cdf.pyx +++ b/idr/inv_cdf.pyx @@ -1,5 +1,5 @@ cimport cython -cimport numpy as cnp +cimport numpy as np import numpy as np from libc.math cimport exp, sqrt, pow, log, erf, fabs from libc.stdlib cimport malloc, free