Disable bounds checking and wraparound by default
This commit is contained in:
parent
4221c00701
commit
0dc2c0a7a0
|
@ -1,5 +1,7 @@
|
||||||
# cython: infer_types=True
|
# cython: infer_types=True
|
||||||
# cython: profile=False
|
# cython: profile=False
|
||||||
|
# cython: boundscheck=False
|
||||||
|
# cython: wraparound=False
|
||||||
|
|
||||||
cimport cython
|
cimport cython
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
@ -90,8 +92,6 @@ cdef inline unsigned char shift_pixel_window(
|
||||||
#
|
#
|
||||||
# Returns: index from 0 .. 2**lookahead into options_nbit representing best available choice for position (x,y)
|
# Returns: index from 0 .. 2**lookahead into options_nbit representing best available choice for position (x,y)
|
||||||
#
|
#
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef int dither_lookahead(Dither* dither, float[:, :, ::1] palette_cam16, float[:, :, ::1] palette_rgb,
|
cdef int dither_lookahead(Dither* dither, float[:, :, ::1] palette_cam16, float[:, :, ::1] palette_rgb,
|
||||||
float[:, :, ::1] image_rgb, int x, int y, int lookahead, unsigned char last_pixels,
|
float[:, :, ::1] image_rgb, int x, int y, int lookahead, unsigned char last_pixels,
|
||||||
int x_res, float[:,::1] rgb_to_cam16ucs, unsigned char palette_depth) nogil:
|
int x_res, float[:,::1] rgb_to_cam16ucs, unsigned char palette_depth) nogil:
|
||||||
|
@ -157,21 +157,15 @@ cdef int dither_lookahead(Dither* dither, float[:, :, ::1] palette_cam16, float[
|
||||||
return best
|
return best
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef inline float[::1] convert_rgb_to_cam16ucs(float[:, ::1] rgb_to_cam16ucs, float r, float g, float b) nogil:
|
cdef inline float[::1] convert_rgb_to_cam16ucs(float[:, ::1] rgb_to_cam16ucs, float r, float g, float b) nogil:
|
||||||
cdef unsigned int rgb_24bit = (<unsigned int>(r*255) << 16) + (<unsigned int>(g*255) << 8) + <unsigned int>(b*255)
|
cdef unsigned int rgb_24bit = (<unsigned int>(r*255) << 16) + (<unsigned int>(g*255) << 8) + <unsigned int>(b*255)
|
||||||
return rgb_to_cam16ucs[rgb_24bit]
|
return rgb_to_cam16ucs[rgb_24bit]
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef inline float fabs(float value) nogil:
|
cdef inline float fabs(float value) nogil:
|
||||||
return -value if value < 0 else value
|
return -value if value < 0 else value
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef inline double colour_distance_squared(float[::1] colour1, float[::1] colour2) nogil:
|
cdef inline double colour_distance_squared(float[::1] colour1, float[::1] colour2) nogil:
|
||||||
return (colour1[0] - colour2[0]) ** 2 + (colour1[1] - colour2[1]) ** 2 + (colour1[2] - colour2[2]) ** 2
|
return (colour1[0] - colour2[0]) ** 2 + (colour1[1] - colour2[1]) ** 2 + (colour1[2] - colour2[2]) ** 2
|
||||||
|
|
||||||
|
@ -210,8 +204,6 @@ cdef void apply_one_line(Dither* dither, int xl, int xr, int x, float[] image, i
|
||||||
# image: RGB pixel data, to be mutated
|
# image: RGB pixel data, to be mutated
|
||||||
# quant_error: RGB quantization error to be diffused
|
# quant_error: RGB quantization error to be diffused
|
||||||
#
|
#
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef void apply(Dither* dither, int x_res, int y_res, int x, int y, float[:,:,::1] image, float[] quant_error) nogil:
|
cdef void apply(Dither* dither, int x_res, int y_res, int x, int y, float[:,:,::1] image, float[] quant_error) nogil:
|
||||||
|
|
||||||
cdef int i, j, k
|
cdef int i, j, k
|
||||||
|
@ -229,8 +221,6 @@ cdef void apply(Dither* dither, int x_res, int y_res, int x, int y, float[:,:,::
|
||||||
image[i,j,k] = clip(image[i,j,k] + error_fraction * quant_error[k], 0, 1)
|
image[i,j,k] = clip(image[i,j,k] + error_fraction * quant_error[k], 0, 1)
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef image_nbit_to_bitmap(
|
cdef image_nbit_to_bitmap(
|
||||||
(unsigned char)[:, ::1] image_nbit, unsigned int x_res, unsigned int y_res, unsigned char palette_depth):
|
(unsigned char)[:, ::1] image_nbit, unsigned int x_res, unsigned int y_res, unsigned char palette_depth):
|
||||||
cdef unsigned int x, y
|
cdef unsigned int x, y
|
||||||
|
@ -253,8 +243,6 @@ cdef image_nbit_to_bitmap(
|
||||||
#
|
#
|
||||||
# Returns: tuple of n-bit output image array and RGB output image array
|
# Returns: tuple of n-bit output image array and RGB output image array
|
||||||
#
|
#
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
def dither_image(
|
def dither_image(
|
||||||
screen, float[:, :, ::1] image_rgb, dither, int lookahead, unsigned char verbose, float[:,::1] rgb_to_cam16ucs):
|
screen, float[:, :, ::1] image_rgb, dither, int lookahead, unsigned char verbose, float[:,::1] rgb_to_cam16ucs):
|
||||||
cdef int y, x
|
cdef int y, x
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# cython: infer_types=True
|
# cython: infer_types=True
|
||||||
# cython: profile=False
|
# cython: profile=False
|
||||||
|
# cython: boundscheck=False
|
||||||
|
# cython: wraparound=False
|
||||||
|
|
||||||
cimport cython
|
cimport cython
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
@ -9,21 +11,15 @@ cdef float clip(float a, float min_value, float max_value) nogil:
|
||||||
return min(max(a, min_value), max_value)
|
return min(max(a, min_value), max_value)
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef inline float[::1] convert_rgb_to_cam16ucs(float[:, ::1] rgb_to_cam16ucs, float r, float g, float b) nogil:
|
cdef inline float[::1] convert_rgb_to_cam16ucs(float[:, ::1] rgb_to_cam16ucs, float r, float g, float b) nogil:
|
||||||
cdef unsigned int rgb_24bit = (<unsigned int>(r*255) << 16) + (<unsigned int>(g*255) << 8) + <unsigned int>(b*255)
|
cdef unsigned int rgb_24bit = (<unsigned int>(r*255) << 16) + (<unsigned int>(g*255) << 8) + <unsigned int>(b*255)
|
||||||
return rgb_to_cam16ucs[rgb_24bit]
|
return rgb_to_cam16ucs[rgb_24bit]
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef inline double colour_distance_squared(float[::1] colour1, float[::1] colour2) nogil:
|
cdef inline double colour_distance_squared(float[::1] colour1, float[::1] colour2) nogil:
|
||||||
return (colour1[0] - colour2[0]) ** 2 + (colour1[1] - colour2[1]) ** 2 + (colour1[2] - colour2[2]) ** 2
|
return (colour1[0] - colour2[0]) ** 2 + (colour1[1] - colour2[1]) ** 2 + (colour1[2] - colour2[2]) ** 2
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
def dither_shr_perfect(
|
def dither_shr_perfect(
|
||||||
float[:, :, ::1] input_rgb, float[:, ::1] full_palette_cam, float[:, ::1] full_palette_rgb,
|
float[:, :, ::1] input_rgb, float[:, ::1] full_palette_cam, float[:, ::1] full_palette_rgb,
|
||||||
float[:,::1] rgb_to_cam16ucs):
|
float[:,::1] rgb_to_cam16ucs):
|
||||||
|
@ -134,8 +130,6 @@ def dither_shr_perfect(
|
||||||
return total_image_error, working_image
|
return total_image_error, working_image
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
def dither_shr(
|
def dither_shr(
|
||||||
float[:, :, ::1] input_rgb, float[:, :, ::1] palettes_cam, float[:, :, ::1] palettes_rgb,
|
float[:, :, ::1] input_rgb, float[:, :, ::1] palettes_cam, float[:, :, ::1] palettes_rgb,
|
||||||
float[:,::1] rgb_to_cam16ucs):
|
float[:,::1] rgb_to_cam16ucs):
|
||||||
|
@ -264,8 +258,6 @@ cdef struct PaletteSelection:
|
||||||
double total_error
|
double total_error
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef PaletteSelection best_palette_for_line(float [:, ::1] line_cam, float[:, :, ::1] palettes_cam, int last_palette_idx) nogil:
|
cdef PaletteSelection best_palette_for_line(float [:, ::1] line_cam, float[:, :, ::1] palettes_cam, int last_palette_idx) nogil:
|
||||||
cdef int palette_idx, best_palette_idx, palette_entry_idx, pixel_idx
|
cdef int palette_idx, best_palette_idx, palette_entry_idx, pixel_idx
|
||||||
cdef double best_total_dist, total_dist, best_pixel_dist, pixel_dist
|
cdef double best_total_dist, total_dist, best_pixel_dist, pixel_dist
|
||||||
|
@ -296,8 +288,6 @@ cdef PaletteSelection best_palette_for_line(float [:, ::1] line_cam, float[:, :,
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef float[::1] _convert_rgb12_iigs_to_cam(float [:, ::1] rgb12_iigs_to_cam16ucs, (unsigned char)[::1] point_rgb12) nogil:
|
cdef float[::1] _convert_rgb12_iigs_to_cam(float [:, ::1] rgb12_iigs_to_cam16ucs, (unsigned char)[::1] point_rgb12) nogil:
|
||||||
cdef int rgb12 = (point_rgb12[0] << 8) | (point_rgb12[1] << 4) | point_rgb12[2]
|
cdef int rgb12 = (point_rgb12[0] << 8) | (point_rgb12[1] << 4) | point_rgb12[2]
|
||||||
return rgb12_iigs_to_cam16ucs[rgb12]
|
return rgb12_iigs_to_cam16ucs[rgb12]
|
||||||
|
@ -308,8 +298,6 @@ def convert_rgb12_iigs_to_cam(float [:, ::1] rgb12_iigs_to_cam16ucs, (unsigned c
|
||||||
|
|
||||||
import colour
|
import colour
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
@cython.cdivision(True)
|
@cython.cdivision(True)
|
||||||
cdef float[:, ::1] linear_to_srgb_array(float[:, ::1] a, float gamma=2.4):
|
cdef float[:, ::1] linear_to_srgb_array(float[:, ::1] a, float gamma=2.4):
|
||||||
cdef int i, j
|
cdef int i, j
|
||||||
|
@ -322,8 +310,6 @@ cdef float[:, ::1] linear_to_srgb_array(float[:, ::1] a, float gamma=2.4):
|
||||||
res[i, j] = 1.055 * a[i, j] ** (1.0 / gamma) - 0.055
|
res[i, j] = 1.055 * a[i, j] ** (1.0 / gamma) - 0.055
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
cdef (unsigned char)[:, ::1] _convert_cam16ucs_to_rgb12_iigs(float[:, ::1] point_cam):
|
cdef (unsigned char)[:, ::1] _convert_cam16ucs_to_rgb12_iigs(float[:, ::1] point_cam):
|
||||||
cdef float[:, ::1] rgb
|
cdef float[:, ::1] rgb
|
||||||
cdef (float)[:, ::1] rgb12_iigs
|
cdef (float)[:, ::1] rgb12_iigs
|
||||||
|
@ -348,8 +334,6 @@ def convert_cam16ucs_to_rgb12_iigs(float[:, ::1] point_cam):
|
||||||
return _convert_cam16ucs_to_rgb12_iigs(point_cam)
|
return _convert_cam16ucs_to_rgb12_iigs(point_cam)
|
||||||
|
|
||||||
|
|
||||||
@cython.boundscheck(False)
|
|
||||||
@cython.wraparound(False)
|
|
||||||
@cython.cdivision(True)
|
@cython.cdivision(True)
|
||||||
def k_means_with_fixed_centroids(
|
def k_means_with_fixed_centroids(
|
||||||
int n_clusters, int n_fixed, float[:, ::1] samples, (unsigned char)[:, ::1] initial_centroids, int max_iterations,
|
int n_clusters, int n_fixed, float[:, ::1] samples, (unsigned char)[:, ::1] initial_centroids, int max_iterations,
|
||||||
|
|
Loading…
Reference in New Issue