Generated by Cython 0.29.32
Yellow lines hint at Python interaction.
Click on a line that starts with a "+
" to see the C code that Cython generated for it.
Raw output: misc.cpp
+0001: # cython: binding=False, boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, profile=False
__pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_5) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
0002: # cython: optimize.use_switch=True
0003: # encoding: utf-8
0004:
0005: """
0006: GNU GENERAL PUBLIC LICENSE
0007: Version 3, 29 June 2007
0008:
0009: Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
0010: Everyone is permitted to copy and distribute verbatim copies
0011: of this license document, but changing it is not allowed.
0012:
0013: Copyright Yoann Berenguer
0014: """
0015:
+0016: try:
{ /*try:*/ { /* … */ } }
0017: cimport cython
0018: from cython.parallel cimport prange
0019:
0020: except ImportError:
0021: raise ImportError("\n<cython> library is missing on your system."
0022: "\nTry: \n C:\\pip install cython on a window command prompt.")
0023:
0024:
+0025: try:
{ /*try:*/ { /* … */ } }
0026: cimport cython
0027: from cython.parallel cimport prange
0028: from cpython cimport PyObject_CallFunctionObjArgs, PyObject, \
0029: PyList_SetSlice, PyObject_HasAttr, PyObject_IsInstance, \
0030: PyObject_CallMethod, PyObject_CallObject
0031:
0032:
0033: except ImportError:
0034: raise ImportError("\n<cython> library is missing on your system."
0035: "\nTry: \n C:\\pip install cython on a window command prompt.")
0036:
0037:
0038:
+0039: try:
{ /*try:*/ { /* … */ } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L19_try_end; __pyx_L14_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; /* … */ __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L19_try_end:; }
+0040: import pygame
__pyx_t_4 = __Pyx_Import(__pyx_n_s_pygame, 0, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 40, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_pygame, __pyx_t_4) < 0) __PYX_ERR(0, 40, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0041: from pygame import Rect
__pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 41, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_Rect); __Pyx_GIVEREF(__pyx_n_s_Rect); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_Rect); __pyx_t_5 = __Pyx_Import(__pyx_n_s_pygame, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 41, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_Rect); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 41, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_Rect, __pyx_t_4) < 0) __PYX_ERR(0, 41, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0042: from pygame.math import Vector2
__pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 42, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_n_s_Vector2); __Pyx_GIVEREF(__pyx_n_s_Vector2); PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_Vector2); __pyx_t_4 = __Pyx_Import(__pyx_n_s_pygame_math, __pyx_t_5, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_Vector2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 42, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_Vector2, __pyx_t_5) < 0) __PYX_ERR(0, 42, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0043: from pygame import Rect, BLEND_RGB_ADD, HWACCEL
__pyx_t_4 = PyList_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_Rect); __Pyx_GIVEREF(__pyx_n_s_Rect); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_Rect); __Pyx_INCREF(__pyx_n_s_BLEND_RGB_ADD); __Pyx_GIVEREF(__pyx_n_s_BLEND_RGB_ADD); PyList_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_BLEND_RGB_ADD); __Pyx_INCREF(__pyx_n_s_HWACCEL); __Pyx_GIVEREF(__pyx_n_s_HWACCEL); PyList_SET_ITEM(__pyx_t_4, 2, __pyx_n_s_HWACCEL); __pyx_t_5 = __Pyx_Import(__pyx_n_s_pygame, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 43, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_Rect); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_Rect, __pyx_t_4) < 0) __PYX_ERR(0, 43, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_BLEND_RGB_ADD, __pyx_t_4) < 0) __PYX_ERR(0, 43, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_HWACCEL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_HWACCEL, __pyx_t_4) < 0) __PYX_ERR(0, 43, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0044: from pygame import Surface, SRCALPHA, mask, RLEACCEL
__pyx_t_5 = PyList_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_n_s_Surface); __Pyx_GIVEREF(__pyx_n_s_Surface); PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_Surface); __Pyx_INCREF(__pyx_n_s_SRCALPHA); __Pyx_GIVEREF(__pyx_n_s_SRCALPHA); PyList_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_SRCALPHA); __Pyx_INCREF(__pyx_n_s_mask); __Pyx_GIVEREF(__pyx_n_s_mask); PyList_SET_ITEM(__pyx_t_5, 2, __pyx_n_s_mask); __Pyx_INCREF(__pyx_n_s_RLEACCEL); __Pyx_GIVEREF(__pyx_n_s_RLEACCEL); PyList_SET_ITEM(__pyx_t_5, 3, __pyx_n_s_RLEACCEL); __pyx_t_4 = __Pyx_Import(__pyx_n_s_pygame, __pyx_t_5, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_Surface); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_Surface, __pyx_t_5) < 0) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_SRCALPHA, __pyx_t_5) < 0) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_mask); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_mask, __pyx_t_5) < 0) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_RLEACCEL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_RLEACCEL, __pyx_t_5) < 0) __PYX_ERR(0, 44, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0045: from pygame.transform import rotate, scale, smoothscale
__pyx_t_4 = PyList_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_rotate); __Pyx_GIVEREF(__pyx_n_s_rotate); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_rotate); __Pyx_INCREF(__pyx_n_s_scale); __Pyx_GIVEREF(__pyx_n_s_scale); PyList_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_scale); __Pyx_INCREF(__pyx_n_s_smoothscale); __Pyx_GIVEREF(__pyx_n_s_smoothscale); PyList_SET_ITEM(__pyx_t_4, 2, __pyx_n_s_smoothscale); __pyx_t_5 = __Pyx_Import(__pyx_n_s_pygame_transform, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 45, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_rotate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotate, __pyx_t_4) < 0) __PYX_ERR(0, 45, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_scale, __pyx_t_4) < 0) __PYX_ERR(0, 45, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_smoothscale, __pyx_t_4) < 0) __PYX_ERR(0, 45, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0046: from pygame.surfarray import array3d, pixels3d, array_alpha, pixels_alpha, \
__pyx_t_5 = PyList_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_n_s_array3d); __Pyx_GIVEREF(__pyx_n_s_array3d); PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_array3d); __Pyx_INCREF(__pyx_n_s_pixels3d); __Pyx_GIVEREF(__pyx_n_s_pixels3d); PyList_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_pixels3d); __Pyx_INCREF(__pyx_n_s_array_alpha); __Pyx_GIVEREF(__pyx_n_s_array_alpha); PyList_SET_ITEM(__pyx_t_5, 2, __pyx_n_s_array_alpha); __Pyx_INCREF(__pyx_n_s_pixels_alpha); __Pyx_GIVEREF(__pyx_n_s_pixels_alpha); PyList_SET_ITEM(__pyx_t_5, 3, __pyx_n_s_pixels_alpha); __Pyx_INCREF(__pyx_n_s_make_surface); __Pyx_GIVEREF(__pyx_n_s_make_surface); PyList_SET_ITEM(__pyx_t_5, 4, __pyx_n_s_make_surface); __pyx_t_4 = __Pyx_Import(__pyx_n_s_pygame_surfarray, __pyx_t_5, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_array3d); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_array3d, __pyx_t_5) < 0) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_pixels3d, __pyx_t_5) < 0) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_array_alpha); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_array_alpha, __pyx_t_5) < 0) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_pixels_alpha); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_pixels_alpha, __pyx_t_5) < 0) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_surface, __pyx_t_5) < 0) __PYX_ERR(0, 47, __pyx_L14_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
0047: make_surface
+0048: from pygame.image import frombuffer
__pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 48, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_frombuffer); __Pyx_GIVEREF(__pyx_n_s_frombuffer); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_frombuffer); __pyx_t_5 = __Pyx_Import(__pyx_n_s_pygame_image, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 48, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 48, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_frombuffer, __pyx_t_4) < 0) __PYX_ERR(0, 48, __pyx_L14_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
0049:
+0050: except ImportError:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError); if (__pyx_t_6) { __Pyx_AddTraceback("PygameShader.misc", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 50, __pyx_L16_except_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_7);
+0051: raise ImportError("\n<Pygame> library is missing on your system."
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 51, __pyx_L16_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 51, __pyx_L16_except_error) } goto __pyx_L16_except_error; __pyx_L16_except_error:; /* … */ __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_Pygame_library_is_missing_on_yo); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32);
0052: "\nTry: \n C:\\pip install pygame on a window command prompt.")
0053:
0054:
0055: # NUMPY IS REQUIRED
+0056: try:
{ /*try:*/ { /* … */ } __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L27_try_end; __pyx_L22_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; /* … */ __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_1); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); goto __pyx_L1_error; __pyx_L27_try_end:; }
+0057: import numpy
__pyx_t_7 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 57, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_numpy, __pyx_t_7) < 0) __PYX_ERR(0, 57, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0058: from numpy import ndarray, zeros, empty, uint8, int32, float64, \
__pyx_t_7 = PyList_New(19); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_ndarray); __Pyx_GIVEREF(__pyx_n_s_ndarray); PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_ndarray); __Pyx_INCREF(__pyx_n_s_zeros); __Pyx_GIVEREF(__pyx_n_s_zeros); PyList_SET_ITEM(__pyx_t_7, 1, __pyx_n_s_zeros); __Pyx_INCREF(__pyx_n_s_empty); __Pyx_GIVEREF(__pyx_n_s_empty); PyList_SET_ITEM(__pyx_t_7, 2, __pyx_n_s_empty); __Pyx_INCREF(__pyx_n_s_uint8); __Pyx_GIVEREF(__pyx_n_s_uint8); PyList_SET_ITEM(__pyx_t_7, 3, __pyx_n_s_uint8); __Pyx_INCREF(__pyx_n_s_int32); __Pyx_GIVEREF(__pyx_n_s_int32); PyList_SET_ITEM(__pyx_t_7, 4, __pyx_n_s_int32); __Pyx_INCREF(__pyx_n_s_float64); __Pyx_GIVEREF(__pyx_n_s_float64); PyList_SET_ITEM(__pyx_t_7, 5, __pyx_n_s_float64); __Pyx_INCREF(__pyx_n_s_float32); __Pyx_GIVEREF(__pyx_n_s_float32); PyList_SET_ITEM(__pyx_t_7, 6, __pyx_n_s_float32); __Pyx_INCREF(__pyx_n_s_dstack); __Pyx_GIVEREF(__pyx_n_s_dstack); PyList_SET_ITEM(__pyx_t_7, 7, __pyx_n_s_dstack); __Pyx_INCREF(__pyx_n_s_full); __Pyx_GIVEREF(__pyx_n_s_full); PyList_SET_ITEM(__pyx_t_7, 8, __pyx_n_s_full); __Pyx_INCREF(__pyx_n_s_ones); __Pyx_GIVEREF(__pyx_n_s_ones); PyList_SET_ITEM(__pyx_t_7, 9, __pyx_n_s_ones); __Pyx_INCREF(__pyx_n_s_asarray); __Pyx_GIVEREF(__pyx_n_s_asarray); PyList_SET_ITEM(__pyx_t_7, 10, __pyx_n_s_asarray); __Pyx_INCREF(__pyx_n_s_ascontiguousarray); __Pyx_GIVEREF(__pyx_n_s_ascontiguousarray); PyList_SET_ITEM(__pyx_t_7, 11, __pyx_n_s_ascontiguousarray); __Pyx_INCREF(__pyx_n_s_full_like); __Pyx_GIVEREF(__pyx_n_s_full_like); PyList_SET_ITEM(__pyx_t_7, 12, __pyx_n_s_full_like); __Pyx_INCREF(__pyx_n_s_add); __Pyx_GIVEREF(__pyx_n_s_add); PyList_SET_ITEM(__pyx_t_7, 13, __pyx_n_s_add); __Pyx_INCREF(__pyx_n_s_putmask); __Pyx_GIVEREF(__pyx_n_s_putmask); PyList_SET_ITEM(__pyx_t_7, 14, __pyx_n_s_putmask); __Pyx_INCREF(__pyx_n_s_int16); __Pyx_GIVEREF(__pyx_n_s_int16); PyList_SET_ITEM(__pyx_t_7, 15, __pyx_n_s_int16); __Pyx_INCREF(__pyx_n_s_arange); __Pyx_GIVEREF(__pyx_n_s_arange); PyList_SET_ITEM(__pyx_t_7, 16, __pyx_n_s_arange); __Pyx_INCREF(__pyx_n_s_repeat); __Pyx_GIVEREF(__pyx_n_s_repeat); PyList_SET_ITEM(__pyx_t_7, 17, __pyx_n_s_repeat); __Pyx_INCREF(__pyx_n_s_newaxis); __Pyx_GIVEREF(__pyx_n_s_newaxis); PyList_SET_ITEM(__pyx_t_7, 18, __pyx_n_s_newaxis); __pyx_t_4 = __Pyx_Import(__pyx_n_s_numpy, __pyx_t_7, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ndarray, __pyx_t_7) < 0) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_zeros, __pyx_t_7) < 0) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_empty, __pyx_t_7) < 0) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_uint8, __pyx_t_7) < 0) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_int32, __pyx_t_7) < 0) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_float64, __pyx_t_7) < 0) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_float32, __pyx_t_7) < 0) __PYX_ERR(0, 59, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_dstack); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_dstack, __pyx_t_7) < 0) __PYX_ERR(0, 59, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_full); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_full, __pyx_t_7) < 0) __PYX_ERR(0, 59, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_ones); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ones, __pyx_t_7) < 0) __PYX_ERR(0, 59, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_asarray, __pyx_t_7) < 0) __PYX_ERR(0, 59, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_ascontiguousarray, __pyx_t_7) < 0) __PYX_ERR(0, 59, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_full_like); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_full_like, __pyx_t_7) < 0) __PYX_ERR(0, 59, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_add); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_add, __pyx_t_7) < 0) __PYX_ERR(0, 60, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_putmask); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_putmask, __pyx_t_7) < 0) __PYX_ERR(0, 60, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_int16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_int16, __pyx_t_7) < 0) __PYX_ERR(0, 60, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_arange); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_arange, __pyx_t_7) < 0) __PYX_ERR(0, 60, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_repeat); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_repeat, __pyx_t_7) < 0) __PYX_ERR(0, 60, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_newaxis); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_newaxis, __pyx_t_7) < 0) __PYX_ERR(0, 60, __pyx_L22_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
0059: float32, dstack, full, ones, asarray, ascontiguousarray, full_like,\
0060: add, putmask, int16, arange, repeat, newaxis
+0061: except ImportError:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError); if (__pyx_t_6) { __Pyx_AddTraceback("PygameShader.misc", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_5) < 0) __PYX_ERR(0, 61, __pyx_L24_except_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_7); __Pyx_GOTREF(__pyx_t_5);
+0062: raise ImportError("\n<numpy> library is missing on your system."
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 62, __pyx_L24_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 62, __pyx_L24_except_error) } goto __pyx_L24_except_error; __pyx_L24_except_error:; /* … */ __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_numpy_library_is_missing_on_you); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__33); __Pyx_GIVEREF(__pyx_tuple__33);
0063: "\nTry: \n C:\\pip install numpy on a window command prompt.")
0064:
0065: from shader cimport hsv, rgb, minf, struct_rgb_to_hsv
0066: from libc.math cimport round as round_c
0067: from libc.math cimport floor as floor_c, sqrt
0068: from libc.math cimport fabs as abs_c
0069: from libc.stdlib cimport malloc, free
0070: from libc.stdio cimport printf
0071:
0072:
+0073: import numpy
__pyx_t_5 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 73, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_numpy, __pyx_t_5) < 0) __PYX_ERR(0, 73, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
0074: cimport numpy as np
0075:
0076: DEF SCHEDULE = 'static'
0077:
0078: DEF OPENMP = True
0079: # num_threads – The num_threads argument indicates how many threads the team should consist of.
0080: # If not given, OpenMP will decide how many threads to use.
0081: # Typically this is the number of cores available on the machine. However,
0082: # this may be controlled through the omp_set_num_threads() function,
0083: # or through the OMP_NUM_THREADS environment variable.
0084: DEF THREAD_NUMBER = 1
0085: if OPENMP is True:
0086: DEF THREAD_NUMBER = 8
0087:
0088:
0089: @cython.boundscheck(False)
0090: @cython.wraparound(False)
0091: @cython.nonecheck(False)
0092: @cython.cdivision(True)
0093: @cython.profile(False)
+0094: cpdef swap_channels24_c(surface_, model):
static PyObject *__pyx_pw_12PygameShader_4misc_1swap_channels24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_swap_channels24_c(PyObject *__pyx_v_surface_, PyObject *__pyx_v_model, CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_v_rr = NULL; PyObject *__pyx_v_gg = NULL; PyObject *__pyx_v_bb = NULL; PyObject *__pyx_v_order = NULL; Py_ssize_t __pyx_v_width; Py_ssize_t __pyx_v_height; PyObject *__pyx_v_rgb_ = NULL; __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_i; int __pyx_v_j; short __pyx_v_ri; short __pyx_v_gi; short __pyx_v_bi; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("swap_channels24_c", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_17); __Pyx_XDECREF(__pyx_t_18); __Pyx_XDECREF(__pyx_t_19); __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_21, 1); __Pyx_AddTraceback("PygameShader.misc.swap_channels24_c", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_rr); __Pyx_XDECREF(__pyx_v_gg); __Pyx_XDECREF(__pyx_v_bb); __Pyx_XDECREF(__pyx_v_order); __Pyx_XDECREF(__pyx_v_rgb_); __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_1swap_channels24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_swap_channels24_c[] = "\n THIS PLUGIN ALLOW YOU TO SWAP CHANNEL OF AN IMAGE \n \n :param surface_: pygame.Surface\n :param model: python string; String representing the channel order e.g\n RGB, RBG, GRB, GBR, BRG, BGR etc. letters can also be replaced by the digit 0\n to null the entire channel. e.g : 'R0B' -> no green channel\n\n "; static PyObject *__pyx_pw_12PygameShader_4misc_1swap_channels24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_surface_ = 0; PyObject *__pyx_v_model = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("swap_channels24_c (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_model,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_surface)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_model)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("swap_channels24_c", 1, 2, 2, 1); __PYX_ERR(0, 94, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "swap_channels24_c") < 0)) __PYX_ERR(0, 94, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_surface_ = values[0]; __pyx_v_model = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("swap_channels24_c", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 94, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.swap_channels24_c", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_12PygameShader_4misc_swap_channels24_c(__pyx_self, __pyx_v_surface_, __pyx_v_model); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_swap_channels24_c(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, PyObject *__pyx_v_model) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("swap_channels24_c", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_12PygameShader_4misc_swap_channels24_c(__pyx_v_surface_, __pyx_v_model, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.swap_channels24_c", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0095: """
0096: THIS PLUGIN ALLOW YOU TO SWAP CHANNEL OF AN IMAGE
0097:
0098: :param surface_: pygame.Surface
0099: :param model: python string; String representing the channel order e.g
0100: RGB, RBG, GRB, GBR, BRG, BGR etc. letters can also be replaced by the digit 0
0101: to null the entire channel. e.g : 'R0B' -> no green channel
0102:
0103: """
0104:
+0105: assert PyObject_IsInstance(surface_, Surface), \
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!(__pyx_t_2 != 0))) {
+0106: 'Expecting Surface for argument surface_ got %s ' % type(surface_)
__pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Expecting_Surface_for_argument_s, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); PyErr_SetObject(PyExc_AssertionError, __pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 105, __pyx_L1_error) } } #endif
0107:
+0108: if len(model) != 3:
__pyx_t_3 = PyObject_Length(__pyx_v_model); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 108, __pyx_L1_error) __pyx_t_2 = ((__pyx_t_3 != 3) != 0); if (__pyx_t_2) { /* … */ }
+0109: print("\nArgument model is invalid.")
if (__Pyx_PrintOne(0, __pyx_kp_s_Argument_model_is_invalid) < 0) __PYX_ERR(0, 109, __pyx_L1_error)
+0110: raise ValueError("Choose between RGB, RBG, GRB, GBR, BRG, BGR")
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 110, __pyx_L1_error) /* … */ __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Choose_between_RGB_RBG_GRB_GBR_B); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 110, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_);
0111:
+0112: rr, gg, bb = list(model)
__pyx_t_1 = PySequence_List(__pyx_v_model); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (1) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 3)) { if (size > 3) __Pyx_RaiseTooManyValuesError(3); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 112, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); __pyx_t_6 = PyList_GET_ITEM(sequence, 2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __pyx_v_rr = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_gg = __pyx_t_5; __pyx_t_5 = 0; __pyx_v_bb = __pyx_t_6; __pyx_t_6 = 0;
+0113: order = {'R' : 0, 'G' : 1, 'B' : 2, '0': -1}
__pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_R, __pyx_int_0) < 0) __PYX_ERR(0, 113, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_G, __pyx_int_1) < 0) __PYX_ERR(0, 113, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_B, __pyx_int_2) < 0) __PYX_ERR(0, 113, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_1, __pyx_kp_s_0, __pyx_int_neg_1) < 0) __PYX_ERR(0, 113, __pyx_L1_error) __pyx_v_order = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
0114:
0115: cdef Py_ssize_t width, height
+0116: width, height = surface_.get_size()
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_6); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 116, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_6 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_4), 2) < 0) __PYX_ERR(0, 116, __pyx_L1_error) __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 116, __pyx_L1_error) __pyx_L5_unpacking_done:; } __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_width = __pyx_t_3; __pyx_v_height = __pyx_t_8;
0117:
+0118: try:
{ /*try:*/ { /* … */ } __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L11_try_end; __pyx_L6_error:; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; /* … */ __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); goto __pyx_L1_error; __pyx_L7_exception_handled:; __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); __pyx_L11_try_end:; }
+0119: rgb_ = pixels3d(surface_)
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 119, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); } } __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_surface_); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_rgb_ = __pyx_t_1; __pyx_t_1 = 0;
+0120: except (pygame.error, ValueError):
__Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pygame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 120, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_error); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 120, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_13 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_12) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_builtin_ValueError); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6); __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; if (__pyx_t_13) { __Pyx_AddTraceback("PygameShader.misc.swap_channels24_c", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(0, 120, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_1);
+0121: try:
{ /*try:*/ { /* … */ } __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; goto __pyx_L21_try_end; __pyx_L14_error:; __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __Pyx_XGIVEREF(__pyx_t_14); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16); goto __pyx_L8_except_error; __pyx_L21_try_end:; } __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L7_exception_handled; } goto __pyx_L8_except_error; __pyx_L8_except_error:;
+0122: rgb_ = array3d(surface_)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_array3d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 122, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_17 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_17)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_17); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } __pyx_t_12 = (__pyx_t_17) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_17, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_surface_); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 122, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_rgb_, __pyx_t_12); __pyx_t_12 = 0;
+0123: except(pygame.error, ValueError):
__Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_4, &__pyx_t_17); __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_pygame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 123, __pyx_L16_except_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 123, __pyx_L16_except_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_13 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_12, __pyx_t_19) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_12, __pyx_builtin_ValueError); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_ErrRestore(__pyx_t_12, __pyx_t_4, __pyx_t_17); __pyx_t_12 = 0; __pyx_t_4 = 0; __pyx_t_17 = 0; if (__pyx_t_13) { __Pyx_AddTraceback("PygameShader.misc.swap_channels24_c", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_17, &__pyx_t_4, &__pyx_t_12) < 0) __PYX_ERR(0, 123, __pyx_L16_except_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_12);
+0124: raise ValueError('\nIncompatible pixel format.')
__pyx_t_19 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 124, __pyx_L16_except_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_Raise(__pyx_t_19, 0, 0, 0); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __PYX_ERR(0, 124, __pyx_L16_except_error) } goto __pyx_L16_except_error; __pyx_L16_except_error:; /* … */ __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Incompatible_pixel_format); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__2); __Pyx_GIVEREF(__pyx_tuple__2);
0125:
0126: cdef:
+0127: unsigned char [:, :, :] rgb_array = rgb_
__pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(0, 127, __pyx_L1_error) __pyx_v_rgb_array = __pyx_t_20; __pyx_t_20.memview = NULL; __pyx_t_20.data = NULL;
+0128: unsigned char [:, :, ::1] new_array = empty((height, width, 3), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_height); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_width); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_6); __Pyx_INCREF(__pyx_int_3); __Pyx_GIVEREF(__pyx_int_3); PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_int_3); __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_uint8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_21 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_21.memview)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_new_array = __pyx_t_21; __pyx_t_21.memview = NULL; __pyx_t_21.data = NULL;
+0129: int i=0, j=0
__pyx_v_i = 0; __pyx_v_j = 0;
0130: short int ri, gi, bi
0131:
+0132: ri = order[rr]
__pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_order, __pyx_v_rr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_22 = __Pyx_PyInt_As_short(__pyx_t_5); if (unlikely((__pyx_t_22 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_ri = __pyx_t_22;
+0133: gi = order[gg]
__pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_order, __pyx_v_gg); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_22 = __Pyx_PyInt_As_short(__pyx_t_5); if (unlikely((__pyx_t_22 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_gi = __pyx_t_22;
+0134: bi = order[bb]
__pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_order, __pyx_v_bb); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_22 = __Pyx_PyInt_As_short(__pyx_t_5); if (unlikely((__pyx_t_22 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 134, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_bi = __pyx_t_22;
0135:
+0136: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L26; } __pyx_L26:; } }
+0137: for i in prange(width, schedule=SCHEDULE, num_threads=THREAD_NUMBER):
__pyx_t_8 = __pyx_v_width; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_23 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_23 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(static) num_threads(8) #endif /* _OPENMP */ for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_23; __pyx_t_3++){ { __pyx_v_i = (int)(0 + 1 * __pyx_t_3); /* Initialize private variables to invalid values */ __pyx_v_j = ((int)0xbad0bad0);
+0138: for j in range(height):
__pyx_t_24 = __pyx_v_height; __pyx_t_25 = __pyx_t_24; for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_25; __pyx_t_13+=1) { __pyx_v_j = __pyx_t_13;
+0139: if ri == -1:
__pyx_t_2 = ((__pyx_v_ri == -1L) != 0); if (__pyx_t_2) { /* … */ goto __pyx_L33; }
+0140: new_array[j, i, 0] = 0
__pyx_t_26 = __pyx_v_j; __pyx_t_27 = __pyx_v_i; __pyx_t_28 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_26 * __pyx_v_new_array.strides[0]) ) + __pyx_t_27 * __pyx_v_new_array.strides[1]) )) + __pyx_t_28)) )) = 0;
0141: else:
+0142: new_array[j, i, 0] = rgb_array[i, j, ri]
/*else*/ { __pyx_t_28 = __pyx_v_i; __pyx_t_27 = __pyx_v_j; __pyx_t_26 = __pyx_v_ri; __pyx_t_29 = __pyx_v_j; __pyx_t_30 = __pyx_v_i; __pyx_t_31 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_29 * __pyx_v_new_array.strides[0]) ) + __pyx_t_30 * __pyx_v_new_array.strides[1]) )) + __pyx_t_31)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_28 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_27 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_26 * __pyx_v_rgb_array.strides[2]) ))); } __pyx_L33:;
0143:
+0144: if gi == -1:
__pyx_t_2 = ((__pyx_v_gi == -1L) != 0); if (__pyx_t_2) { /* … */ goto __pyx_L34; }
+0145: new_array[j, i, 1] = 0
__pyx_t_26 = __pyx_v_j; __pyx_t_27 = __pyx_v_i; __pyx_t_28 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_26 * __pyx_v_new_array.strides[0]) ) + __pyx_t_27 * __pyx_v_new_array.strides[1]) )) + __pyx_t_28)) )) = 0;
0146: else:
+0147: new_array[j, i, 1] = rgb_array[i, j, gi]
/*else*/ { __pyx_t_28 = __pyx_v_i; __pyx_t_27 = __pyx_v_j; __pyx_t_26 = __pyx_v_gi; __pyx_t_31 = __pyx_v_j; __pyx_t_30 = __pyx_v_i; __pyx_t_29 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_31 * __pyx_v_new_array.strides[0]) ) + __pyx_t_30 * __pyx_v_new_array.strides[1]) )) + __pyx_t_29)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_28 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_27 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_26 * __pyx_v_rgb_array.strides[2]) ))); } __pyx_L34:;
0148:
+0149: if bi == -1:
__pyx_t_2 = ((__pyx_v_bi == -1L) != 0); if (__pyx_t_2) { /* … */ goto __pyx_L35; }
+0150: new_array[j, i, 2] = 0
__pyx_t_26 = __pyx_v_j; __pyx_t_27 = __pyx_v_i; __pyx_t_28 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_26 * __pyx_v_new_array.strides[0]) ) + __pyx_t_27 * __pyx_v_new_array.strides[1]) )) + __pyx_t_28)) )) = 0;
0151: else:
+0152: new_array[j, i, 2] = rgb_array[i, j, bi]
/*else*/ { __pyx_t_28 = __pyx_v_i; __pyx_t_27 = __pyx_v_j; __pyx_t_26 = __pyx_v_bi; __pyx_t_29 = __pyx_v_j; __pyx_t_30 = __pyx_v_i; __pyx_t_31 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_29 * __pyx_v_new_array.strides[0]) ) + __pyx_t_30 * __pyx_v_new_array.strides[1]) )) + __pyx_t_31)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_28 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_27 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_26 * __pyx_v_rgb_array.strides[2]) ))); } __pyx_L35:; } } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0153:
+0154: return frombuffer(new_array, (width, height), 'RGB')
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_new_array, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_height); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_4); __pyx_t_1 = 0; __pyx_t_4 = 0; __pyx_t_4 = NULL; __pyx_t_13 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_12); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_12, function); __pyx_t_13 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_t_6, __pyx_t_17, __pyx_n_s_RGB}; __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_t_6, __pyx_t_17, __pyx_n_s_RGB}; __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; } else #endif { __pyx_t_1 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__pyx_t_4) { __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL; } __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_13, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_13, __pyx_t_17); __Pyx_INCREF(__pyx_n_s_RGB); __Pyx_GIVEREF(__pyx_n_s_RGB); PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_13, __pyx_n_s_RGB); __pyx_t_6 = 0; __pyx_t_17 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
0155:
0156:
0157:
0158:
0159: @cython.boundscheck(False)
0160: @cython.wraparound(False)
0161: @cython.nonecheck(False)
0162: @cython.cdivision(True)
0163: @cython.profile(False)
+0164: cpdef create_horizontal_gradient_1d(
static PyObject *__pyx_pw_12PygameShader_4misc_3create_horizontal_gradient_1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_create_horizontal_gradient_1d(int __pyx_v_value, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_4misc_create_horizontal_gradient_1d *__pyx_optional_args) { /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1); __Pyx_AddTraceback("PygameShader.misc.create_horizontal_gradient_1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __PYX_XDEC_MEMVIEW(&__pyx_v_diff_, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_row, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_gradient, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_3create_horizontal_gradient_1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_2create_horizontal_gradient_1d[] = "\n CREATE AN ARRAY FILLED WITH A GRADIENT COLOR (RGB) \n \n :param value : integer; Size of the gradient 1d width\n :param start_color: tuple; Tuple containing the starting RGB color \n :param end_color : tuple; Tuple containing the RGB values of the final color\n :return : numpy.ndarray 2D array shape (w, 3) of type uint8 (unsigned char) \n containing all the pixels \n "; static PyObject *__pyx_pw_12PygameShader_4misc_3create_horizontal_gradient_1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_value; PyObject *__pyx_v_start_color = 0; PyObject *__pyx_v_end_color = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_horizontal_gradient_1d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_value,&__pyx_n_s_start_color,&__pyx_n_s_end_color,0}; PyObject* values[3] = {0,0,0}; /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_2create_horizontal_gradient_1d(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_value, PyObject *__pyx_v_start_color, PyObject *__pyx_v_end_color) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_horizontal_gradient_1d", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 2; __pyx_t_2.start_color = __pyx_v_start_color; __pyx_t_2.end_color = __pyx_v_end_color; __pyx_t_1 = __pyx_f_12PygameShader_4misc_create_horizontal_gradient_1d(__pyx_v_value, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.create_horizontal_gradient_1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0165: int value,
+0166: tuple start_color=(255, 0, 0),
PyObject *__pyx_v_start_color = ((PyObject*)__pyx_tuple__3); /* … */ __pyx_tuple__3 = PyTuple_Pack(3, __pyx_int_255, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3); /* … */ values[1] = ((PyObject*)__pyx_tuple__3);
+0167: tuple end_color=(0, 255, 0)
PyObject *__pyx_v_end_color = ((PyObject*)__pyx_tuple__4); __Pyx_memviewslice __pyx_v_diff_ = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_row = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_rgb_gradient = { 0, 0, { 0 }, { 0 }, { 0 } }; float __pyx_v_start[3]; int __pyx_v_i; float *__pyx_v_row_; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_horizontal_gradient_1d", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_start_color = __pyx_optional_args->start_color; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_end_color = __pyx_optional_args->end_color; } } } /* … */ __pyx_tuple__4 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_255, __pyx_int_0); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 167, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); __Pyx_GIVEREF(__pyx_tuple__4); /* … */ values[2] = ((PyObject*)__pyx_tuple__4); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_color); if (value) { values[1] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_color); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_horizontal_gradient_1d") < 0)) __PYX_ERR(0, 164, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_value = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_value == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 165, __pyx_L3_error) __pyx_v_start_color = ((PyObject*)values[1]); __pyx_v_end_color = ((PyObject*)values[2]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_horizontal_gradient_1d", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 164, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.create_horizontal_gradient_1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start_color), (&PyTuple_Type), 1, "start_color", 1))) __PYX_ERR(0, 166, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_end_color), (&PyTuple_Type), 1, "end_color", 1))) __PYX_ERR(0, 167, __pyx_L1_error) __pyx_r = __pyx_pf_12PygameShader_4misc_2create_horizontal_gradient_1d(__pyx_self, __pyx_v_value, __pyx_v_start_color, __pyx_v_end_color);
0168: ):
0169: """
0170: CREATE AN ARRAY FILLED WITH A GRADIENT COLOR (RGB)
0171:
0172: :param value : integer; Size of the gradient 1d width
0173: :param start_color: tuple; Tuple containing the starting RGB color
0174: :param end_color : tuple; Tuple containing the RGB values of the final color
0175: :return : numpy.ndarray 2D array shape (w, 3) of type uint8 (unsigned char)
0176: containing all the pixels
0177: """
0178:
+0179: if value <= 0:
__pyx_t_1 = ((__pyx_v_value <= 0) != 0); if (unlikely(__pyx_t_1)) { /* … */ }
+0180: raise ValueError("Argument value cannot be <= 1")
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 180, __pyx_L1_error) /* … */ __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_Argument_value_cannot_be_1); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 180, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5);
0181:
0182: cdef:
0183: float [:] diff_ = \
+0184: numpy.array(end_color, dtype=float32) - \
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_end_color); __Pyx_GIVEREF(__pyx_v_end_color); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_end_color); __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_t_3 = PyNumber_Subtract(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_diff_ = __pyx_t_7; __pyx_t_7.memview = NULL; __pyx_t_7.data = NULL;
+0185: numpy.array(start_color, dtype=float32)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_start_color); __Pyx_GIVEREF(__pyx_v_start_color); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_start_color); __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_float32); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0186: float [::1] row = numpy.arange(value, dtype=float32) / (value - 1.0)
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_arange); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyFloat_FromDouble((__pyx_v_value - 1.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_row = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
+0187: unsigned char [:, ::1] rgb_gradient = empty((value, 3), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_INCREF(__pyx_int_3); __Pyx_GIVEREF(__pyx_int_3); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_uint8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_rgb_gradient = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+0188: float [3] start = numpy.array(start_color, dtype=float32)
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_start_color); __Pyx_GIVEREF(__pyx_v_start_color); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_start_color); __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(__Pyx_carray_from_py_float(__pyx_t_5, __pyx_t_10, 3) < 0)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; memcpy(&(__pyx_v_start[0]), __pyx_t_10, sizeof(__pyx_v_start[0]) * (3));
+0189: int i=0
__pyx_v_i = 0;
0190: float * row_
0191:
+0192: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L6; } __pyx_L6:; } }
+0193: for i in prange(value, schedule=SCHEDULE, num_threads=THREAD_NUMBER):
__pyx_t_11 = __pyx_v_value; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_row_) schedule(static) num_threads(8) #endif /* _OPENMP */ for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_13; __pyx_t_12++){ { __pyx_v_i = (int)(0 + 1 * __pyx_t_12); /* Initialize private variables to invalid values */ __pyx_v_row_ = ((float *)1);
+0194: row_ = &row[i]
__pyx_t_14 = __pyx_v_i; __pyx_v_row_ = (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_row.data) + __pyx_t_14)) ))));
+0195: rgb_gradient[i, 0] = <unsigned char>(start[0] + row_[0] * diff_[0])
__pyx_t_14 = 0; __pyx_t_15 = __pyx_v_i; __pyx_t_16 = 0; *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_15 * __pyx_v_rgb_gradient.strides[0]) )) + __pyx_t_16)) )) = ((unsigned char)((__pyx_v_start[0]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_14 * __pyx_v_diff_.strides[0]) ))))));
+0196: rgb_gradient[i, 1] = <unsigned char>(start[1] + row_[0] * diff_[1])
__pyx_t_14 = 1; __pyx_t_16 = __pyx_v_i; __pyx_t_15 = 1; *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_16 * __pyx_v_rgb_gradient.strides[0]) )) + __pyx_t_15)) )) = ((unsigned char)((__pyx_v_start[1]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_14 * __pyx_v_diff_.strides[0]) ))))));
+0197: rgb_gradient[i, 2] = <unsigned char>(start[2] + row_[0] * diff_[2])
__pyx_t_14 = 2; __pyx_t_15 = __pyx_v_i; __pyx_t_16 = 2; *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_15 * __pyx_v_rgb_gradient.strides[0]) )) + __pyx_t_16)) )) = ((unsigned char)((__pyx_v_start[2]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_14 * __pyx_v_diff_.strides[0]) )))))); } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0198:
+0199: return asarray(rgb_gradient)
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_rgb_gradient, 2, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); } } __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
0200:
0201:
0202:
0203: @cython.boundscheck(False)
0204: @cython.wraparound(False)
0205: @cython.nonecheck(False)
0206: @cython.cdivision(True)
0207: @cython.profile(False)
+0208: cpdef create_horizontal_gradient_1d_alpha(
static PyObject *__pyx_pw_12PygameShader_4misc_5create_horizontal_gradient_1d_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_create_horizontal_gradient_1d_alpha(int __pyx_v_value, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_4misc_create_horizontal_gradient_1d_alpha *__pyx_optional_args) { /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1); __Pyx_AddTraceback("PygameShader.misc.create_horizontal_gradient_1d_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __PYX_XDEC_MEMVIEW(&__pyx_v_diff_, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_row, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_rgba_gradient, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_5create_horizontal_gradient_1d_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_4create_horizontal_gradient_1d_alpha[] = "\n CREATE AN ARRAY FILLED WITH A GRADIENT COLOR (RGBA)\n\n :param value : integer; Size of the gradient 1d width\n :param start_color: tuple; Tuple containing the starting RGB color \n :param end_color : tuple; Tuple containing the RGB values of the final color\n :return : numpy.ndarray 2D array shape (w, 3) of type uint8 (unsigned char) \n containing all the pixels \n "; static PyObject *__pyx_pw_12PygameShader_4misc_5create_horizontal_gradient_1d_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_value; PyObject *__pyx_v_start_color = 0; PyObject *__pyx_v_end_color = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_horizontal_gradient_1d_alpha (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_value,&__pyx_n_s_start_color,&__pyx_n_s_end_color,0}; PyObject* values[3] = {0,0,0}; /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_4create_horizontal_gradient_1d_alpha(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_value, PyObject *__pyx_v_start_color, PyObject *__pyx_v_end_color) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_horizontal_gradient_1d_alpha", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 2; __pyx_t_2.start_color = __pyx_v_start_color; __pyx_t_2.end_color = __pyx_v_end_color; __pyx_t_1 = __pyx_f_12PygameShader_4misc_create_horizontal_gradient_1d_alpha(__pyx_v_value, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.create_horizontal_gradient_1d_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0209: int value,
+0210: tuple start_color=(255, 0, 0, 255),
PyObject *__pyx_v_start_color = ((PyObject*)__pyx_tuple__6); /* … */ __pyx_tuple__6 = PyTuple_Pack(4, __pyx_int_255, __pyx_int_0, __pyx_int_0, __pyx_int_255); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 210, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__6); __Pyx_GIVEREF(__pyx_tuple__6); /* … */ values[1] = ((PyObject*)__pyx_tuple__6);
+0211: tuple end_color=(0, 255, 0, 0)
PyObject *__pyx_v_end_color = ((PyObject*)__pyx_tuple__7); __Pyx_memviewslice __pyx_v_diff_ = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_row = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_rgba_gradient = { 0, 0, { 0 }, { 0 }, { 0 } }; float __pyx_v_start[4]; int __pyx_v_i; float *__pyx_v_row_; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_horizontal_gradient_1d_alpha", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_start_color = __pyx_optional_args->start_color; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_end_color = __pyx_optional_args->end_color; } } } /* … */ values[2] = ((PyObject*)__pyx_tuple__7); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_color); if (value) { values[1] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_color); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_horizontal_gradient_1d_alpha") < 0)) __PYX_ERR(0, 208, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_value = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_value == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 209, __pyx_L3_error) __pyx_v_start_color = ((PyObject*)values[1]); __pyx_v_end_color = ((PyObject*)values[2]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_horizontal_gradient_1d_alpha", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 208, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.create_horizontal_gradient_1d_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start_color), (&PyTuple_Type), 1, "start_color", 1))) __PYX_ERR(0, 210, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_end_color), (&PyTuple_Type), 1, "end_color", 1))) __PYX_ERR(0, 211, __pyx_L1_error) __pyx_r = __pyx_pf_12PygameShader_4misc_4create_horizontal_gradient_1d_alpha(__pyx_self, __pyx_v_value, __pyx_v_start_color, __pyx_v_end_color); /* … */ __pyx_tuple__7 = PyTuple_Pack(4, __pyx_int_0, __pyx_int_255, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__7); __Pyx_GIVEREF(__pyx_tuple__7);
0212: ):
0213: """
0214: CREATE AN ARRAY FILLED WITH A GRADIENT COLOR (RGBA)
0215:
0216: :param value : integer; Size of the gradient 1d width
0217: :param start_color: tuple; Tuple containing the starting RGB color
0218: :param end_color : tuple; Tuple containing the RGB values of the final color
0219: :return : numpy.ndarray 2D array shape (w, 3) of type uint8 (unsigned char)
0220: containing all the pixels
0221: """
0222:
+0223: if value <= 0:
__pyx_t_1 = ((__pyx_v_value <= 0) != 0); if (unlikely(__pyx_t_1)) { /* … */ }
+0224: raise ValueError("Argument value cannot be <= 1")
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 224, __pyx_L1_error)
0225:
0226: cdef:
0227: float [:] diff_ = \
+0228: numpy.array(end_color, dtype=float32) - \
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_end_color); __Pyx_GIVEREF(__pyx_v_end_color); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_end_color); __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_t_3 = PyNumber_Subtract(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_diff_ = __pyx_t_7; __pyx_t_7.memview = NULL; __pyx_t_7.data = NULL;
+0229: numpy.array(start_color, dtype=float32)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_start_color); __Pyx_GIVEREF(__pyx_v_start_color); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_start_color); __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_float32); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0230: float [::1] row = numpy.arange(value, dtype=float32) / (value - 1.0)
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_arange); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyFloat_FromDouble((__pyx_v_value - 1.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_row = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
+0231: unsigned char [:, ::1] rgba_gradient = empty((value, 4), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_4); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_uint8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_rgba_gradient = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+0232: float [4] start = numpy.array(start_color, dtype=float32)
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_start_color); __Pyx_GIVEREF(__pyx_v_start_color); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_start_color); __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(__Pyx_carray_from_py_float(__pyx_t_5, __pyx_t_10, 4) < 0)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; memcpy(&(__pyx_v_start[0]), __pyx_t_10, sizeof(__pyx_v_start[0]) * (4));
+0233: int i=0
__pyx_v_i = 0;
0234: float * row_
0235:
+0236: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L6; } __pyx_L6:; } }
+0237: for i in prange(value, schedule=SCHEDULE, num_threads=THREAD_NUMBER):
__pyx_t_11 = __pyx_v_value; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_row_) schedule(static) num_threads(8) #endif /* _OPENMP */ for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_13; __pyx_t_12++){ { __pyx_v_i = (int)(0 + 1 * __pyx_t_12); /* Initialize private variables to invalid values */ __pyx_v_row_ = ((float *)1);
+0238: row_ = &row[i]
__pyx_t_14 = __pyx_v_i; __pyx_v_row_ = (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_row.data) + __pyx_t_14)) ))));
+0239: rgba_gradient[i, 0] = <unsigned char>(start[0] + row_[0] * diff_[0])
__pyx_t_14 = 0; __pyx_t_15 = __pyx_v_i; __pyx_t_16 = 0; *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_rgba_gradient.data + __pyx_t_15 * __pyx_v_rgba_gradient.strides[0]) )) + __pyx_t_16)) )) = ((unsigned char)((__pyx_v_start[0]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_14 * __pyx_v_diff_.strides[0]) ))))));
+0240: rgba_gradient[i, 1] = <unsigned char>(start[1] + row_[0] * diff_[1])
__pyx_t_14 = 1; __pyx_t_16 = __pyx_v_i; __pyx_t_15 = 1; *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_rgba_gradient.data + __pyx_t_16 * __pyx_v_rgba_gradient.strides[0]) )) + __pyx_t_15)) )) = ((unsigned char)((__pyx_v_start[1]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_14 * __pyx_v_diff_.strides[0]) ))))));
+0241: rgba_gradient[i, 2] = <unsigned char>(start[2] + row_[0] * diff_[2])
__pyx_t_14 = 2; __pyx_t_15 = __pyx_v_i; __pyx_t_16 = 2; *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_rgba_gradient.data + __pyx_t_15 * __pyx_v_rgba_gradient.strides[0]) )) + __pyx_t_16)) )) = ((unsigned char)((__pyx_v_start[2]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_14 * __pyx_v_diff_.strides[0]) ))))));
+0242: rgba_gradient[i, 3] = <unsigned char>(start[3] + row_[0] * diff_[3])
__pyx_t_14 = 3; __pyx_t_16 = __pyx_v_i; __pyx_t_15 = 3; *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_rgba_gradient.data + __pyx_t_16 * __pyx_v_rgba_gradient.strides[0]) )) + __pyx_t_15)) )) = ((unsigned char)((__pyx_v_start[3]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_14 * __pyx_v_diff_.strides[0]) )))))); } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0243:
+0244: return asarray(rgba_gradient)
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_rgba_gradient, 2, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); } } __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
0245:
0246: @cython.boundscheck(False)
0247: @cython.wraparound(False)
0248: @cython.nonecheck(False)
0249: @cython.cdivision(True)
0250: @cython.profile(False)
+0251: cpdef object horizontal_grad3d(
static PyObject *__pyx_pw_12PygameShader_4misc_7horizontal_grad3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_horizontal_grad3d(int __pyx_v_width, int __pyx_v_height, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_4misc_horizontal_grad3d *__pyx_optional_args) { /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1); __Pyx_XDECREF(__pyx_t_20); __Pyx_AddTraceback("PygameShader.misc.horizontal_grad3d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __PYX_XDEC_MEMVIEW(&__pyx_v_diff_, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_row, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_gradient, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_7horizontal_grad3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_6horizontal_grad3d[] = "\n CREATE A 24-BIT GRADIENT FROM TWO COLORS\n\n :param width : integer; width of the new surface in pixels\n :param height : integer; height of the new surface in pixels\n :param start_color: tuple; Value RGB, Starting color\n :param end_color : tuple; value RGB, ending color or final color\n :return : Surface; pygame.Surface format 24 bit \n size width x height \n "; static PyObject *__pyx_pw_12PygameShader_4misc_7horizontal_grad3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_width; int __pyx_v_height; PyObject *__pyx_v_start_color = 0; PyObject *__pyx_v_end_color = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("horizontal_grad3d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width,&__pyx_n_s_height,&__pyx_n_s_start_color,&__pyx_n_s_end_color,0}; PyObject* values[4] = {0,0,0,0}; /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_6horizontal_grad3d(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width, int __pyx_v_height, PyObject *__pyx_v_start_color, PyObject *__pyx_v_end_color) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("horizontal_grad3d", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 2; __pyx_t_2.start_color = __pyx_v_start_color; __pyx_t_2.end_color = __pyx_v_end_color; __pyx_t_1 = __pyx_f_12PygameShader_4misc_horizontal_grad3d(__pyx_v_width, __pyx_v_height, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.horizontal_grad3d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0252: int width,
0253: int height,
+0254: tuple start_color=(255, 0, 0),
PyObject *__pyx_v_start_color = ((PyObject*)__pyx_tuple__3); /* … */ values[2] = ((PyObject*)__pyx_tuple__3);
+0255: tuple end_color=(0, 255, 0)
PyObject *__pyx_v_end_color = ((PyObject*)__pyx_tuple__4); __Pyx_memviewslice __pyx_v_diff_ = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_row = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_rgb_gradient = { 0, 0, { 0 }, { 0 }, { 0 } }; float __pyx_v_start[3]; int __pyx_v_i; int __pyx_v_j; float *__pyx_v_row_; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("horizontal_grad3d", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_start_color = __pyx_optional_args->start_color; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_end_color = __pyx_optional_args->end_color; } } } /* … */ values[3] = ((PyObject*)__pyx_tuple__4); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_height)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("horizontal_grad3d", 0, 2, 4, 1); __PYX_ERR(0, 251, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_color); if (value) { values[2] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_color); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "horizontal_grad3d") < 0)) __PYX_ERR(0, 251, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_width = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 252, __pyx_L3_error) __pyx_v_height = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 253, __pyx_L3_error) __pyx_v_start_color = ((PyObject*)values[2]); __pyx_v_end_color = ((PyObject*)values[3]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("horizontal_grad3d", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 251, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.horizontal_grad3d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start_color), (&PyTuple_Type), 1, "start_color", 1))) __PYX_ERR(0, 254, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_end_color), (&PyTuple_Type), 1, "end_color", 1))) __PYX_ERR(0, 255, __pyx_L1_error) __pyx_r = __pyx_pf_12PygameShader_4misc_6horizontal_grad3d(__pyx_self, __pyx_v_width, __pyx_v_height, __pyx_v_start_color, __pyx_v_end_color);
0256: ):
0257: """
0258: CREATE A 24-BIT GRADIENT FROM TWO COLORS
0259:
0260: :param width : integer; width of the new surface in pixels
0261: :param height : integer; height of the new surface in pixels
0262: :param start_color: tuple; Value RGB, Starting color
0263: :param end_color : tuple; value RGB, ending color or final color
0264: :return : Surface; pygame.Surface format 24 bit
0265: size width x height
0266: """
0267: cdef:
0268: float [:] diff_ = \
+0269: numpy.array(end_color, dtype=float32) - \
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_end_color); __Pyx_GIVEREF(__pyx_v_end_color); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_end_color); __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* … */ __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 269, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_diff_ = __pyx_t_6; __pyx_t_6.memview = NULL; __pyx_t_6.data = NULL;
+0270: numpy.array(start_color, dtype=float32)
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_start_color); __Pyx_GIVEREF(__pyx_v_start_color); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_start_color); __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0271: float [::1] row = numpy.arange(width, dtype=float32) / (width - 1.0)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_arange); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_float32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyFloat_FromDouble((__pyx_v_width - 1.0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_row = __pyx_t_7; __pyx_t_7.memview = NULL; __pyx_t_7.data = NULL;
+0272: unsigned char [:, :, ::1] rgb_gradient = empty((height, width, 3), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_height); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); __Pyx_INCREF(__pyx_int_3); __Pyx_GIVEREF(__pyx_int_3); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_int_3); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_rgb_gradient = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
+0273: float [3] start = numpy.array(start_color, dtype=float32)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_start_color); __Pyx_GIVEREF(__pyx_v_start_color); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_start_color); __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(__Pyx_carray_from_py_float(__pyx_t_4, __pyx_t_9, 3) < 0)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; memcpy(&(__pyx_v_start[0]), __pyx_t_9, sizeof(__pyx_v_start[0]) * (3));
+0274: int i=0, j=0
__pyx_v_i = 0; __pyx_v_j = 0;
0275: float * row_
0276:
+0277: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L5; } __pyx_L5:; } }
+0278: for j in prange(height, schedule='static', num_threads=THREAD_NUMBER):
__pyx_t_10 = __pyx_v_height; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_12 = (__pyx_t_10 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_12 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_row_) schedule(static) num_threads(8) #endif /* _OPENMP */ for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_12; __pyx_t_11++){ { __pyx_v_j = (int)(0 + 1 * __pyx_t_11); /* Initialize private variables to invalid values */ __pyx_v_i = ((int)0xbad0bad0); __pyx_v_row_ = ((float *)1);
+0279: for i in range(width):
__pyx_t_13 = __pyx_v_width; __pyx_t_14 = __pyx_t_13; for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { __pyx_v_i = __pyx_t_15;
+0280: row_ = &row[i]
__pyx_t_16 = __pyx_v_i; __pyx_v_row_ = (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_row.data) + __pyx_t_16)) ))));
+0281: rgb_gradient[j, i, 0] = <unsigned char>(start[0] + row_[0] * diff_[0])
__pyx_t_16 = 0; __pyx_t_17 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_17 * __pyx_v_rgb_gradient.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_gradient.strides[1]) )) + __pyx_t_19)) )) = ((unsigned char)((__pyx_v_start[0]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_16 * __pyx_v_diff_.strides[0]) ))))));
+0282: rgb_gradient[j, i, 1] = <unsigned char>(start[1] + row_[0] * diff_[1])
__pyx_t_16 = 1; __pyx_t_19 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_17 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_19 * __pyx_v_rgb_gradient.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_gradient.strides[1]) )) + __pyx_t_17)) )) = ((unsigned char)((__pyx_v_start[1]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_16 * __pyx_v_diff_.strides[0]) ))))));
+0283: rgb_gradient[j, i, 2] = <unsigned char>(start[2] + row_[0] * diff_[2])
__pyx_t_16 = 2; __pyx_t_17 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_17 * __pyx_v_rgb_gradient.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_gradient.strides[1]) )) + __pyx_t_19)) )) = ((unsigned char)((__pyx_v_start[2]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_16 * __pyx_v_diff_.strides[0]) )))))); } } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0284:
+0285: return frombuffer(rgb_gradient, (width, height), "RGB")
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_rgb_gradient, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_height); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_20 = PyTuple_New(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_t_1); __pyx_t_5 = 0; __pyx_t_1 = 0; __pyx_t_1 = NULL; __pyx_t_12 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_1)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_12 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_t_2, __pyx_t_20, __pyx_n_s_RGB}; __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_t_2, __pyx_t_20, __pyx_n_s_RGB}; __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; } else #endif { __pyx_t_5 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_1) { __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL; } __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_12, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_20); PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_12, __pyx_t_20); __Pyx_INCREF(__pyx_n_s_RGB); __Pyx_GIVEREF(__pyx_n_s_RGB); PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_12, __pyx_n_s_RGB); __pyx_t_2 = 0; __pyx_t_20 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
0286:
0287:
0288:
0289: @cython.boundscheck(False)
0290: @cython.wraparound(False)
0291: @cython.nonecheck(False)
0292: @cython.cdivision(True)
0293: @cython.profile(False)
+0294: cpdef object horizontal_grad3d_alpha(
static PyObject *__pyx_pw_12PygameShader_4misc_9horizontal_grad3d_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_horizontal_grad3d_alpha(int __pyx_v_width, int __pyx_v_height, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_4misc_horizontal_grad3d_alpha *__pyx_optional_args) { /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1); __Pyx_XDECREF(__pyx_t_20); __Pyx_XDECREF(__pyx_t_21); __Pyx_AddTraceback("PygameShader.misc.horizontal_grad3d_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __PYX_XDEC_MEMVIEW(&__pyx_v_diff_, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_row, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_gradient, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_9horizontal_grad3d_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_8horizontal_grad3d_alpha[] = "\n CREATE A 32-BIT GRADIENT WITH TRANSPARENCY FROM TWO COLORS (RGBA)\n\n :param width : integer; width of the new surface in pixels\n :param height : integer; height of the new surface in pixels\n :param start_color: tuple; Value RGB, Starting color\n :param end_color : tuple; value RGB, ending color or final color\n :return : Surface; pygame.Surface format 32 bit \n size width x height \n "; static PyObject *__pyx_pw_12PygameShader_4misc_9horizontal_grad3d_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_width; int __pyx_v_height; PyObject *__pyx_v_start_color = 0; PyObject *__pyx_v_end_color = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("horizontal_grad3d_alpha (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width,&__pyx_n_s_height,&__pyx_n_s_start_color,&__pyx_n_s_end_color,0}; PyObject* values[4] = {0,0,0,0}; /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_8horizontal_grad3d_alpha(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width, int __pyx_v_height, PyObject *__pyx_v_start_color, PyObject *__pyx_v_end_color) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("horizontal_grad3d_alpha", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 2; __pyx_t_2.start_color = __pyx_v_start_color; __pyx_t_2.end_color = __pyx_v_end_color; __pyx_t_1 = __pyx_f_12PygameShader_4misc_horizontal_grad3d_alpha(__pyx_v_width, __pyx_v_height, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.horizontal_grad3d_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0295: int width,
0296: int height,
+0297: tuple start_color=(255, 0, 0, 255),
PyObject *__pyx_v_start_color = ((PyObject*)__pyx_tuple__6); /* … */ values[2] = ((PyObject*)__pyx_tuple__6);
+0298: tuple end_color=(0, 255, 0, 0)
PyObject *__pyx_v_end_color = ((PyObject*)__pyx_tuple__7); __Pyx_memviewslice __pyx_v_diff_ = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_row = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_rgb_gradient = { 0, 0, { 0 }, { 0 }, { 0 } }; float __pyx_v_start[4]; int __pyx_v_i; int __pyx_v_j; float *__pyx_v_row_; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("horizontal_grad3d_alpha", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_start_color = __pyx_optional_args->start_color; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_end_color = __pyx_optional_args->end_color; } } } /* … */ values[3] = ((PyObject*)__pyx_tuple__7); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_height)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("horizontal_grad3d_alpha", 0, 2, 4, 1); __PYX_ERR(0, 294, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_color); if (value) { values[2] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_color); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "horizontal_grad3d_alpha") < 0)) __PYX_ERR(0, 294, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_width = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 295, __pyx_L3_error) __pyx_v_height = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 296, __pyx_L3_error) __pyx_v_start_color = ((PyObject*)values[2]); __pyx_v_end_color = ((PyObject*)values[3]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("horizontal_grad3d_alpha", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 294, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.horizontal_grad3d_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start_color), (&PyTuple_Type), 1, "start_color", 1))) __PYX_ERR(0, 297, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_end_color), (&PyTuple_Type), 1, "end_color", 1))) __PYX_ERR(0, 298, __pyx_L1_error) __pyx_r = __pyx_pf_12PygameShader_4misc_8horizontal_grad3d_alpha(__pyx_self, __pyx_v_width, __pyx_v_height, __pyx_v_start_color, __pyx_v_end_color);
0299: ):
0300: """
0301: CREATE A 32-BIT GRADIENT WITH TRANSPARENCY FROM TWO COLORS (RGBA)
0302:
0303: :param width : integer; width of the new surface in pixels
0304: :param height : integer; height of the new surface in pixels
0305: :param start_color: tuple; Value RGB, Starting color
0306: :param end_color : tuple; value RGB, ending color or final color
0307: :return : Surface; pygame.Surface format 32 bit
0308: size width x height
0309: """
0310: cdef:
0311: float [:] diff_ = \
+0312: numpy.array(end_color, dtype=float32) - \
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_end_color); __Pyx_GIVEREF(__pyx_v_end_color); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_end_color); __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* … */ __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_diff_ = __pyx_t_6; __pyx_t_6.memview = NULL; __pyx_t_6.data = NULL;
+0313: numpy.array(start_color, dtype=float32)
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_start_color); __Pyx_GIVEREF(__pyx_v_start_color); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_start_color); __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0314: float [::1] row = numpy.arange(width, dtype=float32) / (width - 1.0)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_arange); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_float32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyFloat_FromDouble((__pyx_v_width - 1.0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_row = __pyx_t_7; __pyx_t_7.memview = NULL; __pyx_t_7.data = NULL;
+0315: unsigned char [:, :, ::1] rgb_gradient = empty((height, width, 4), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_height); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_int_4); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 315, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_rgb_gradient = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
+0316: float [4] start = numpy.array(start_color, dtype=float32)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_start_color); __Pyx_GIVEREF(__pyx_v_start_color); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_start_color); __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(__Pyx_carray_from_py_float(__pyx_t_4, __pyx_t_9, 4) < 0)) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; memcpy(&(__pyx_v_start[0]), __pyx_t_9, sizeof(__pyx_v_start[0]) * (4));
+0317: int i=0, j=0
__pyx_v_i = 0; __pyx_v_j = 0;
0318: float * row_
0319:
+0320: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L5; } __pyx_L5:; } }
+0321: for j in prange(height, schedule='static', num_threads=THREAD_NUMBER):
__pyx_t_10 = __pyx_v_height; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_12 = (__pyx_t_10 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_12 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_row_) schedule(static) num_threads(8) #endif /* _OPENMP */ for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_12; __pyx_t_11++){ { __pyx_v_j = (int)(0 + 1 * __pyx_t_11); /* Initialize private variables to invalid values */ __pyx_v_i = ((int)0xbad0bad0); __pyx_v_row_ = ((float *)1);
+0322: for i in range(width):
__pyx_t_13 = __pyx_v_width; __pyx_t_14 = __pyx_t_13; for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { __pyx_v_i = __pyx_t_15;
+0323: row_ = &row[i]
__pyx_t_16 = __pyx_v_i; __pyx_v_row_ = (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_row.data) + __pyx_t_16)) ))));
+0324: rgb_gradient[j, i, 0] = <unsigned char>(start[0] + row_[0] * diff_[0])
__pyx_t_16 = 0; __pyx_t_17 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_17 * __pyx_v_rgb_gradient.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_gradient.strides[1]) )) + __pyx_t_19)) )) = ((unsigned char)((__pyx_v_start[0]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_16 * __pyx_v_diff_.strides[0]) ))))));
+0325: rgb_gradient[j, i, 1] = <unsigned char>(start[1] + row_[0] * diff_[1])
__pyx_t_16 = 1; __pyx_t_19 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_17 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_19 * __pyx_v_rgb_gradient.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_gradient.strides[1]) )) + __pyx_t_17)) )) = ((unsigned char)((__pyx_v_start[1]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_16 * __pyx_v_diff_.strides[0]) ))))));
+0326: rgb_gradient[j, i, 2] = <unsigned char>(start[2] + row_[0] * diff_[2])
__pyx_t_16 = 2; __pyx_t_17 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_17 * __pyx_v_rgb_gradient.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_gradient.strides[1]) )) + __pyx_t_19)) )) = ((unsigned char)((__pyx_v_start[2]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_16 * __pyx_v_diff_.strides[0]) ))))));
+0327: rgb_gradient[j, i, 3] = <unsigned char> (start[2] + row_[0] * diff_[3])
__pyx_t_16 = 3; __pyx_t_19 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_17 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_gradient.data + __pyx_t_19 * __pyx_v_rgb_gradient.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_gradient.strides[1]) )) + __pyx_t_17)) )) = ((unsigned char)((__pyx_v_start[2]) + ((__pyx_v_row_[0]) * (*((float *) ( /* dim=0 */ (__pyx_v_diff_.data + __pyx_t_16 * __pyx_v_diff_.strides[0]) )))))); } } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0328:
+0329: return frombuffer(rgb_gradient, (width, height), "RGBA").convert_alpha()
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_rgb_gradient, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_20 = __Pyx_PyInt_From_int(__pyx_v_height); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_21 = PyTuple_New(2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_20); PyTuple_SET_ITEM(__pyx_t_21, 1, __pyx_t_20); __pyx_t_1 = 0; __pyx_t_20 = 0; __pyx_t_20 = NULL; __pyx_t_12 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_20)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_20); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); __pyx_t_12 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[4] = {__pyx_t_20, __pyx_t_5, __pyx_t_21, __pyx_n_s_RGBA}; __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[4] = {__pyx_t_20, __pyx_t_5, __pyx_t_21, __pyx_n_s_RGBA}; __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; } else #endif { __pyx_t_1 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__pyx_t_20) { __Pyx_GIVEREF(__pyx_t_20); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_20); __pyx_t_20 = NULL; } __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_12, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_12, __pyx_t_21); __Pyx_INCREF(__pyx_n_s_RGBA); __Pyx_GIVEREF(__pyx_n_s_RGBA); PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_12, __pyx_n_s_RGBA); __pyx_t_5 = 0; __pyx_t_21 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_convert_alpha); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
0330:
0331:
0332: DEF r_max = 1.0 / 0.707106781 #inverse sqrt(0.5) or 1.0/cos45
0333:
0334:
0335:
0336: @cython.boundscheck(False)
0337: @cython.wraparound(False)
0338: @cython.nonecheck(False)
0339: @cython.cdivision(True)
0340: @cython.profile(False)
+0341: cpdef create_radial_gradient(
static PyObject *__pyx_pw_12PygameShader_4misc_11create_radial_gradient(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_create_radial_gradient(int __pyx_v_width_, int __pyx_v_height_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_4misc_create_radial_gradient *__pyx_optional_args) { float __pyx_v_offset_x = ((float)0.5); float __pyx_v_offset_y = ((float)0.5); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1); __Pyx_XDECREF(__pyx_t_21); __Pyx_XDECREF(__pyx_t_22); __Pyx_AddTraceback("PygameShader.misc.create_radial_gradient", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_gradient_array__, 1); __Pyx_XDECREF(__pyx_v_gradient_array_); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_11create_radial_gradient(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_10create_radial_gradient[] = "\n CREATE A RADIAL GRADIENT (24-BIT) OPAQUE \n \n :param width_ : integer; surface width in pixels \n :param height_ : integer; surface height in pixels\n :param offset_x : float; Centre of the gradient within the surface default (0.5 centre)\n :param offset_y : float; Centre of the gradient within the surface default (0.5 centre)\n :param end_color_ : tuple; Contains the start color of the radian (RGB values), default (255, 0, 0)\n :param start_color_ : tuple; Contains the end color of the radian (RGB values), default (0, 0, 0)\n :param gradient_array_: numpy.array; gradient array shape (w, 3) containing RGB colors (uint8) \n :param factor_ : float; Value must be > 0. Default is 1.4 \n :param threads_ : integer; concurrent threads default 8\n :return : pygame.Surface; Return a radial gradient centre from the surface \n origin C(Width/2, height/2), surface is 24 bit \n "; static PyObject *__pyx_pw_12PygameShader_4misc_11create_radial_gradient(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_width_; int __pyx_v_height_; float __pyx_v_offset_x; float __pyx_v_offset_y; PyObject *__pyx_v_start_color_ = 0; PyObject *__pyx_v_end_color_ = 0; PyObject *__pyx_v_gradient_array_ = 0; float __pyx_v_factor_; unsigned short __pyx_v_threads_; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_radial_gradient (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width_2,&__pyx_n_s_height_2,&__pyx_n_s_offset_x,&__pyx_n_s_offset_y,&__pyx_n_s_start_color_2,&__pyx_n_s_end_color_2,&__pyx_n_s_gradient_array,&__pyx_n_s_factor,&__pyx_n_s_threads,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_10create_radial_gradient(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width_, int __pyx_v_height_, float __pyx_v_offset_x, float __pyx_v_offset_y, PyObject *__pyx_v_start_color_, PyObject *__pyx_v_end_color_, PyObject *__pyx_v_gradient_array_, float __pyx_v_factor_, unsigned short __pyx_v_threads_) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_radial_gradient", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 7; __pyx_t_2.offset_x = __pyx_v_offset_x; __pyx_t_2.offset_y = __pyx_v_offset_y; __pyx_t_2.start_color_ = __pyx_v_start_color_; __pyx_t_2.end_color_ = __pyx_v_end_color_; __pyx_t_2.gradient_array_ = __pyx_v_gradient_array_; __pyx_t_2.factor_ = __pyx_v_factor_; __pyx_t_2.threads_ = __pyx_v_threads_; __pyx_t_1 = __pyx_f_12PygameShader_4misc_create_radial_gradient(__pyx_v_width_, __pyx_v_height_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.create_radial_gradient", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0342: int width_,
0343: int height_,
0344: float offset_x = 0.5,
0345: float offset_y = 0.5,
+0346: tuple start_color_ = (255, 0, 0),
PyObject *__pyx_v_start_color_ = ((PyObject*)__pyx_tuple__3); /* … */ values[4] = ((PyObject*)__pyx_tuple__3);
+0347: tuple end_color_ = (0, 0, 0),
PyObject *__pyx_v_end_color_ = ((PyObject*)__pyx_tuple__8); /* … */ __pyx_tuple__8 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 347, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__8); __Pyx_GIVEREF(__pyx_tuple__8); /* … */ values[5] = ((PyObject*)__pyx_tuple__8);
+0348: object gradient_array_ = None,
PyObject *__pyx_v_gradient_array_ = ((PyObject *)Py_None); float __pyx_v_factor_ = ((float)1.4); unsigned short __pyx_v_threads_ = ((unsigned short)8); __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } }; float __pyx_v_nx; float __pyx_v_ny; float __pyx_v_w2; float __pyx_v_h2; float __pyx_v_r0; int __pyx_v_i; int __pyx_v_j; unsigned int __pyx_v_x; float __pyx_v_n1; float __pyx_v_n2; unsigned char *__pyx_v_r; unsigned char *__pyx_v_g; unsigned char *__pyx_v_b; CYTHON_UNUSED unsigned short __pyx_v_THREADS; __Pyx_memviewslice __pyx_v_gradient_array__ = { 0, 0, { 0 }, { 0 }, { 0 } }; unsigned int __pyx_v_l; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_radial_gradient", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_offset_x = __pyx_optional_args->offset_x; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_offset_y = __pyx_optional_args->offset_y; if (__pyx_optional_args->__pyx_n > 2) { __pyx_v_start_color_ = __pyx_optional_args->start_color_; if (__pyx_optional_args->__pyx_n > 3) { __pyx_v_end_color_ = __pyx_optional_args->end_color_; if (__pyx_optional_args->__pyx_n > 4) { __pyx_v_gradient_array_ = __pyx_optional_args->gradient_array_; if (__pyx_optional_args->__pyx_n > 5) { __pyx_v_factor_ = __pyx_optional_args->factor_; if (__pyx_optional_args->__pyx_n > 6) { __pyx_v_threads_ = __pyx_optional_args->threads_; } } } } } } } } __Pyx_INCREF(__pyx_v_gradient_array_); /* … */ values[6] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); CYTHON_FALLTHROUGH; case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); CYTHON_FALLTHROUGH; case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width_2)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_height_2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_radial_gradient", 0, 2, 9, 1); __PYX_ERR(0, 341, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset_x); if (value) { values[2] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset_y); if (value) { values[3] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_color_2); if (value) { values[4] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 5: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_color_2); if (value) { values[5] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 6: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_gradient_array); if (value) { values[6] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 7: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factor); if (value) { values[7] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 8: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_threads); if (value) { values[8] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_radial_gradient") < 0)) __PYX_ERR(0, 341, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); CYTHON_FALLTHROUGH; case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); CYTHON_FALLTHROUGH; case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_width_ = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_width_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 342, __pyx_L3_error) __pyx_v_height_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 343, __pyx_L3_error) if (values[2]) { __pyx_v_offset_x = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_offset_x == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 344, __pyx_L3_error) } else { __pyx_v_offset_x = ((float)0.5); } if (values[3]) { __pyx_v_offset_y = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_offset_y == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 345, __pyx_L3_error) } else { __pyx_v_offset_y = ((float)0.5); } __pyx_v_start_color_ = ((PyObject*)values[4]); __pyx_v_end_color_ = ((PyObject*)values[5]); __pyx_v_gradient_array_ = values[6]; if (values[7]) { __pyx_v_factor_ = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_factor_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) } else { __pyx_v_factor_ = ((float)1.4); } if (values[8]) { __pyx_v_threads_ = __Pyx_PyInt_As_unsigned_short(values[8]); if (unlikely((__pyx_v_threads_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 350, __pyx_L3_error) } else { __pyx_v_threads_ = ((unsigned short)8); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_radial_gradient", 0, 2, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 341, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.create_radial_gradient", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start_color_), (&PyTuple_Type), 1, "start_color_", 1))) __PYX_ERR(0, 346, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_end_color_), (&PyTuple_Type), 1, "end_color_", 1))) __PYX_ERR(0, 347, __pyx_L1_error) __pyx_r = __pyx_pf_12PygameShader_4misc_10create_radial_gradient(__pyx_self, __pyx_v_width_, __pyx_v_height_, __pyx_v_offset_x, __pyx_v_offset_y, __pyx_v_start_color_, __pyx_v_end_color_, __pyx_v_gradient_array_, __pyx_v_factor_, __pyx_v_threads_);
0349: float factor_ = 1.4,
0350: unsigned short int threads_ = 8
0351: ):
0352: """
0353: CREATE A RADIAL GRADIENT (24-BIT) OPAQUE
0354:
0355: :param width_ : integer; surface width in pixels
0356: :param height_ : integer; surface height in pixels
0357: :param offset_x : float; Centre of the gradient within the surface default (0.5 centre)
0358: :param offset_y : float; Centre of the gradient within the surface default (0.5 centre)
0359: :param end_color_ : tuple; Contains the start color of the radian (RGB values), default (255, 0, 0)
0360: :param start_color_ : tuple; Contains the end color of the radian (RGB values), default (0, 0, 0)
0361: :param gradient_array_: numpy.array; gradient array shape (w, 3) containing RGB colors (uint8)
0362: :param factor_ : float; Value must be > 0. Default is 1.4
0363: :param threads_ : integer; concurrent threads default 8
0364: :return : pygame.Surface; Return a radial gradient centre from the surface
0365: origin C(Width/2, height/2), surface is 24 bit
0366: """
+0367: assert r_max != 0, "Constant r_max cannot be null"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!1)) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Constant_r_max_cannot_be_null); __PYX_ERR(0, 367, __pyx_L1_error) } } #endif
+0368: if factor_ <=0:
__pyx_t_1 = ((__pyx_v_factor_ <= 0.0) != 0); if (unlikely(__pyx_t_1)) { /* … */ }
+0369: raise ValueError("Argument factor_ cannot be <= 0.0 default is 1.4")
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 369, __pyx_L1_error) /* … */ __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Argument_factor__cannot_be_0_0_d); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__9); __Pyx_GIVEREF(__pyx_tuple__9);
+0370: assert width_ > 0, "Argument width cannot be <=0"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_width_ > 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_width_cannot_be_0); __PYX_ERR(0, 370, __pyx_L1_error) } } #endif
+0371: assert height_ > 0, "Argument height cannot be <=0"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_height_ > 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_height_cannot_be_0); __PYX_ERR(0, 371, __pyx_L1_error) } } #endif
0372:
0373: cdef:
+0374: unsigned char [:, :, ::1] rgb_array = empty((height_, width_, 3), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __Pyx_INCREF(__pyx_int_3); __Pyx_GIVEREF(__pyx_int_3); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_int_3); __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_rgb_array = __pyx_t_6; __pyx_t_6.memview = NULL; __pyx_t_6.data = NULL;
0375: float nx, ny
+0376: float w2 = <float>width_ * <float>factor_
__pyx_v_w2 = (((float)__pyx_v_width_) * ((float)__pyx_v_factor_));
+0377: float h2 = <float>height_ * <float>factor_
__pyx_v_h2 = (((float)__pyx_v_height_) * ((float)__pyx_v_factor_));
+0378: float r0 = <float>sqrt(w2 * w2 + h2 * h2)
__pyx_v_r0 = ((float)sqrt(((__pyx_v_w2 * __pyx_v_w2) + (__pyx_v_h2 * __pyx_v_h2))));
0379:
0380: int i, j
0381: unsigned int x
+0382: float n1 = <float>1.0 / width_
__pyx_v_n1 = (((float)1.0) / __pyx_v_width_);
+0383: float n2 = <float>1.0 / height_
__pyx_v_n2 = (((float)1.0) / __pyx_v_height_);
0384: unsigned char * r
0385: unsigned char * g
0386: unsigned char * b
0387:
+0388: cdef unsigned short int THREADS = threads_
__pyx_v_THREADS = __pyx_v_threads_;
0389:
0390: cdef unsigned char [:, ::1] gradient_array__
0391:
+0392: if gradient_array_ is None:
__pyx_t_1 = (__pyx_v_gradient_array_ == Py_None); __pyx_t_7 = (__pyx_t_1 != 0); if (__pyx_t_7) { /* … */ }
0393:
+0394: gradient_array_ = create_horizontal_gradient_1d_alpha(
__pyx_t_8.__pyx_n = 2; __pyx_t_8.start_color = __pyx_v_start_color_; __pyx_t_8.end_color = __pyx_v_end_color_; __pyx_t_3 = __pyx_f_12PygameShader_4misc_create_horizontal_gradient_1d_alpha(((int)sqrt(((__pyx_v_width_ * __pyx_v_width_) + ((__pyx_v_height_ * ((float)0.5)) * (__pyx_v_height_ * ((float)0.5)))))), 0, &__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_gradient_array_, __pyx_t_3); __pyx_t_3 = 0;
0395: <int>sqrt(width_ * width_ + (height_ * <float>0.5) * (height_ * <float>0.5)),
0396: start_color = start_color_,
0397: end_color = end_color_
0398: )
0399:
0400:
+0401: gradient_array__ = gradient_array_
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_v_gradient_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 401, __pyx_L1_error) __pyx_v_gradient_array__ = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+0402: cdef unsigned int l = <object> gradient_array__.shape[0] - 1
__pyx_t_3 = PyInt_FromSsize_t((__pyx_v_gradient_array__.shape[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 402, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 402, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 402, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_l = __pyx_t_10;
0403:
+0404: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L7; } __pyx_L7:; } }
+0405: for j in prange(height_, schedule=SCHEDULE, num_threads=THREADS):
__pyx_t_11 = __pyx_v_height_; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_r) lastprivate(__pyx_v_x) schedule(static) /* … */ __pyx_t_11 = __pyx_v_height_; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_r) lastprivate(__pyx_v_x) schedule(static) num_threads(__pyx_v_THREADS) #endif /* _OPENMP */ for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_13; __pyx_t_12++){ { __pyx_v_j = (int)(0 + 1 * __pyx_t_12); /* Initialize private variables to invalid values */ __pyx_v_b = ((unsigned char *)1); __pyx_v_g = ((unsigned char *)1); __pyx_v_i = ((int)0xbad0bad0); __pyx_v_nx = ((float)__PYX_NAN()); __pyx_v_ny = ((float)__PYX_NAN()); __pyx_v_r = ((unsigned char *)1); __pyx_v_x = ((unsigned int)0xbad0bad0);
+0406: ny = (<float> j * n2) - <float> offset_y
__pyx_v_ny = ((((float)__pyx_v_j) * __pyx_v_n2) - ((float)__pyx_v_offset_y));
+0407: for i in range(width_):
__pyx_t_14 = __pyx_v_width_; __pyx_t_15 = __pyx_t_14; for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) { __pyx_v_i = __pyx_t_16;
+0408: nx = (<float>i * n1) - <float> offset_x
__pyx_v_nx = ((((float)__pyx_v_i) * __pyx_v_n1) - ((float)__pyx_v_offset_x));
0409:
+0410: r = &rgb_array[j, i, 0]
__pyx_t_17 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 0; __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) ))));
+0411: g = &rgb_array[j, i, 1]
__pyx_t_19 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_17 = 1; __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_17)) ))));
+0412: b = &rgb_array[j, i, 2]
__pyx_t_17 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 2; __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) ))));
0413: # position in the gradient
+0414: x = <int>((<float>sqrt(nx * nx + ny * ny) * r0) * r_max)
__pyx_v_x = ((int)((((float)sqrt(((__pyx_v_nx * __pyx_v_nx) + (__pyx_v_ny * __pyx_v_ny)))) * __pyx_v_r0) * 1.41421356274619));
0415:
0416: # check if the radius is greater than the size of the gradient,
0417: # in which case, the color is black
+0418: if x > l:
__pyx_t_7 = ((__pyx_v_x > __pyx_v_l) != 0); if (__pyx_t_7) { /* … */ goto __pyx_L14; }
+0419: r[0] = 0
(__pyx_v_r[0]) = 0;
+0420: g[0] = 0
(__pyx_v_g[0]) = 0;
+0421: b[0] = 0
(__pyx_v_b[0]) = 0;
0422: # assign the gradient
0423: else:
+0424: r[0] = <unsigned char>gradient_array__[x, 0]
/*else*/ { __pyx_t_20 = __pyx_v_x; __pyx_t_19 = 0; (__pyx_v_r[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_20 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_19)) ))));
+0425: g[0] = <unsigned char>gradient_array__[x, 1]
__pyx_t_20 = __pyx_v_x; __pyx_t_19 = 1; (__pyx_v_g[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_20 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_19)) ))));
+0426: b[0] = <unsigned char>gradient_array__[x, 2]
__pyx_t_20 = __pyx_v_x; __pyx_t_19 = 2; (__pyx_v_b[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_20 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_19)) )))); } __pyx_L14:; } } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0427:
+0428: return frombuffer(rgb_array, (width_, height_), "RGB")
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_rgb_array, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_21 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); __pyx_t_22 = PyTuple_New(2); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_22, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_22, 1, __pyx_t_21); __pyx_t_2 = 0; __pyx_t_21 = 0; __pyx_t_21 = NULL; __pyx_t_13 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_21)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_21); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_13 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_21, __pyx_t_4, __pyx_t_22, __pyx_n_s_RGB}; __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_21, __pyx_t_4, __pyx_t_22, __pyx_n_s_RGB}; __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; } else #endif { __pyx_t_2 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__pyx_t_21) { __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_21); __pyx_t_21 = NULL; } __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_13, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_22); PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_13, __pyx_t_22); __Pyx_INCREF(__pyx_n_s_RGB); __Pyx_GIVEREF(__pyx_n_s_RGB); PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_13, __pyx_n_s_RGB); __pyx_t_4 = 0; __pyx_t_22 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
0429:
0430:
0431:
0432: @cython.boundscheck(False)
0433: @cython.wraparound(False)
0434: @cython.nonecheck(False)
0435: @cython.cdivision(True)
0436: @cython.profile(False)
+0437: cpdef create_radial_gradient_alpha(
static PyObject *__pyx_pw_12PygameShader_4misc_13create_radial_gradient_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_create_radial_gradient_alpha(int __pyx_v_width_, int __pyx_v_height_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_4misc_create_radial_gradient_alpha *__pyx_optional_args) { float __pyx_v_offset_x = ((float)0.5); float __pyx_v_offset_y = ((float)0.5); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1); __Pyx_XDECREF(__pyx_t_21); __Pyx_XDECREF(__pyx_t_22); __Pyx_XDECREF(__pyx_t_23); __Pyx_AddTraceback("PygameShader.misc.create_radial_gradient_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_gradient_array__, 1); __Pyx_XDECREF(__pyx_v_gradient_array_); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_13create_radial_gradient_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_12create_radial_gradient_alpha[] = "\n CREATE A RADIAL GRADIENT (32-bit WITH TRANSPARENCY) \n\n \n :param width_ : integer; surface width in pixels \n :param height_ : integer; surface height in pixels\n :param offset_x : float; Centre of the gradient within the surface default (0.5 centre)\n :param offset_y : float; Centre of the gradient within the surface default (0.5 centre)\n :param end_color_ : tuple; Contains the start color of the radian (RGBA values), default (255, 0, 0, 255)\n :param start_color_ : tuple; Contains the end color of the radian (RGBA values), default (0, 0, 0, 0)\n :param gradient_array_: numpy.array; gradient array shape (w, 3) containing RGB colors (uint8) \n :param factor_ : float; Value must be > 0. Default is 1.4 \n :param threads_ : integer; concurrent threads default 8\n :return : pygame.Surface; Return a radial gradient centre from the surface \n origin C(Width/2, height/2, surface is 32 bit containing per-pixel transparency\n "; static PyObject *__pyx_pw_12PygameShader_4misc_13create_radial_gradient_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_width_; int __pyx_v_height_; float __pyx_v_offset_x; float __pyx_v_offset_y; PyObject *__pyx_v_start_color_ = 0; PyObject *__pyx_v_end_color_ = 0; PyObject *__pyx_v_gradient_array_ = 0; float __pyx_v_factor_; unsigned short __pyx_v_threads_; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_radial_gradient_alpha (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width_2,&__pyx_n_s_height_2,&__pyx_n_s_offset_x,&__pyx_n_s_offset_y,&__pyx_n_s_start_color_2,&__pyx_n_s_end_color_2,&__pyx_n_s_gradient_array,&__pyx_n_s_factor,&__pyx_n_s_threads,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_12create_radial_gradient_alpha(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width_, int __pyx_v_height_, float __pyx_v_offset_x, float __pyx_v_offset_y, PyObject *__pyx_v_start_color_, PyObject *__pyx_v_end_color_, PyObject *__pyx_v_gradient_array_, float __pyx_v_factor_, unsigned short __pyx_v_threads_) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_radial_gradient_alpha", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 7; __pyx_t_2.offset_x = __pyx_v_offset_x; __pyx_t_2.offset_y = __pyx_v_offset_y; __pyx_t_2.start_color_ = __pyx_v_start_color_; __pyx_t_2.end_color_ = __pyx_v_end_color_; __pyx_t_2.gradient_array_ = __pyx_v_gradient_array_; __pyx_t_2.factor_ = __pyx_v_factor_; __pyx_t_2.threads_ = __pyx_v_threads_; __pyx_t_1 = __pyx_f_12PygameShader_4misc_create_radial_gradient_alpha(__pyx_v_width_, __pyx_v_height_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.create_radial_gradient_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0438: int width_,
0439: int height_,
0440: float offset_x = 0.5,
0441: float offset_y = 0.5,
+0442: tuple start_color_ = (255, 0, 0, 255),
PyObject *__pyx_v_start_color_ = ((PyObject*)__pyx_tuple__6); /* … */ values[4] = ((PyObject*)__pyx_tuple__6);
+0443: tuple end_color_ = (0, 0, 0, 0),
PyObject *__pyx_v_end_color_ = ((PyObject*)__pyx_tuple__10); /* … */ values[5] = ((PyObject*)__pyx_tuple__10); /* … */ __pyx_tuple__10 = PyTuple_Pack(4, __pyx_int_0, __pyx_int_0, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10);
+0444: object gradient_array_ = None,
PyObject *__pyx_v_gradient_array_ = ((PyObject *)Py_None); float __pyx_v_factor_ = ((float)1.4); unsigned short __pyx_v_threads_ = ((unsigned short)8); __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } }; float __pyx_v_nx; float __pyx_v_ny; float __pyx_v_w2; float __pyx_v_h2; float __pyx_v_r0; int __pyx_v_i; int __pyx_v_j; unsigned int __pyx_v_x; float __pyx_v_n1; float __pyx_v_n2; unsigned char *__pyx_v_r; unsigned char *__pyx_v_g; unsigned char *__pyx_v_b; unsigned char *__pyx_v_a; CYTHON_UNUSED unsigned short __pyx_v_THREADS; __Pyx_memviewslice __pyx_v_gradient_array__ = { 0, 0, { 0 }, { 0 }, { 0 } }; unsigned int __pyx_v_l; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_radial_gradient_alpha", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_offset_x = __pyx_optional_args->offset_x; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_offset_y = __pyx_optional_args->offset_y; if (__pyx_optional_args->__pyx_n > 2) { __pyx_v_start_color_ = __pyx_optional_args->start_color_; if (__pyx_optional_args->__pyx_n > 3) { __pyx_v_end_color_ = __pyx_optional_args->end_color_; if (__pyx_optional_args->__pyx_n > 4) { __pyx_v_gradient_array_ = __pyx_optional_args->gradient_array_; if (__pyx_optional_args->__pyx_n > 5) { __pyx_v_factor_ = __pyx_optional_args->factor_; if (__pyx_optional_args->__pyx_n > 6) { __pyx_v_threads_ = __pyx_optional_args->threads_; } } } } } } } } __Pyx_INCREF(__pyx_v_gradient_array_); /* … */ values[6] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); CYTHON_FALLTHROUGH; case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); CYTHON_FALLTHROUGH; case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width_2)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_height_2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_radial_gradient_alpha", 0, 2, 9, 1); __PYX_ERR(0, 437, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset_x); if (value) { values[2] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset_y); if (value) { values[3] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_color_2); if (value) { values[4] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 5: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_color_2); if (value) { values[5] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 6: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_gradient_array); if (value) { values[6] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 7: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factor); if (value) { values[7] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 8: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_threads); if (value) { values[8] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_radial_gradient_alpha") < 0)) __PYX_ERR(0, 437, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); CYTHON_FALLTHROUGH; case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); CYTHON_FALLTHROUGH; case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_width_ = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_width_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 438, __pyx_L3_error) __pyx_v_height_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 439, __pyx_L3_error) if (values[2]) { __pyx_v_offset_x = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_offset_x == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 440, __pyx_L3_error) } else { __pyx_v_offset_x = ((float)0.5); } if (values[3]) { __pyx_v_offset_y = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_offset_y == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 441, __pyx_L3_error) } else { __pyx_v_offset_y = ((float)0.5); } __pyx_v_start_color_ = ((PyObject*)values[4]); __pyx_v_end_color_ = ((PyObject*)values[5]); __pyx_v_gradient_array_ = values[6]; if (values[7]) { __pyx_v_factor_ = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_factor_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 445, __pyx_L3_error) } else { __pyx_v_factor_ = ((float)1.4); } if (values[8]) { __pyx_v_threads_ = __Pyx_PyInt_As_unsigned_short(values[8]); if (unlikely((__pyx_v_threads_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 446, __pyx_L3_error) } else { __pyx_v_threads_ = ((unsigned short)8); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_radial_gradient_alpha", 0, 2, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 437, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.create_radial_gradient_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start_color_), (&PyTuple_Type), 1, "start_color_", 1))) __PYX_ERR(0, 442, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_end_color_), (&PyTuple_Type), 1, "end_color_", 1))) __PYX_ERR(0, 443, __pyx_L1_error) __pyx_r = __pyx_pf_12PygameShader_4misc_12create_radial_gradient_alpha(__pyx_self, __pyx_v_width_, __pyx_v_height_, __pyx_v_offset_x, __pyx_v_offset_y, __pyx_v_start_color_, __pyx_v_end_color_, __pyx_v_gradient_array_, __pyx_v_factor_, __pyx_v_threads_);
0445: float factor_ = 1.4,
0446: unsigned short int threads_ = 8
0447: ):
0448: """
0449: CREATE A RADIAL GRADIENT (32-bit WITH TRANSPARENCY)
0450:
0451:
0452: :param width_ : integer; surface width in pixels
0453: :param height_ : integer; surface height in pixels
0454: :param offset_x : float; Centre of the gradient within the surface default (0.5 centre)
0455: :param offset_y : float; Centre of the gradient within the surface default (0.5 centre)
0456: :param end_color_ : tuple; Contains the start color of the radian (RGBA values), default (255, 0, 0, 255)
0457: :param start_color_ : tuple; Contains the end color of the radian (RGBA values), default (0, 0, 0, 0)
0458: :param gradient_array_: numpy.array; gradient array shape (w, 3) containing RGB colors (uint8)
0459: :param factor_ : float; Value must be > 0. Default is 1.4
0460: :param threads_ : integer; concurrent threads default 8
0461: :return : pygame.Surface; Return a radial gradient centre from the surface
0462: origin C(Width/2, height/2, surface is 32 bit containing per-pixel transparency
0463: """
0464:
+0465: assert r_max != 0, "Constant r_max cannot be null"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!1)) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Constant_r_max_cannot_be_null); __PYX_ERR(0, 465, __pyx_L1_error) } } #endif
+0466: if factor_ <=0:
__pyx_t_1 = ((__pyx_v_factor_ <= 0.0) != 0); if (unlikely(__pyx_t_1)) { /* … */ }
+0467: raise ValueError("Argument factor_ cannot be <= 0.0 default is 1.4")
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 467, __pyx_L1_error)
+0468: assert width_ > 0, "Argument width cannot be <=0"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_width_ > 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_width_cannot_be_0); __PYX_ERR(0, 468, __pyx_L1_error) } } #endif
+0469: assert height_ > 0, "Argument height cannot be <=0"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_height_ > 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_height_cannot_be_0); __PYX_ERR(0, 469, __pyx_L1_error) } } #endif
0470:
0471: cdef:
+0472: unsigned char [:, :, ::1] rgb_array = empty((height_, width_, 4), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_int_4); __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_rgb_array = __pyx_t_6; __pyx_t_6.memview = NULL; __pyx_t_6.data = NULL;
0473: float nx, ny
+0474: float w2 = <float>width_ * <float>factor_
__pyx_v_w2 = (((float)__pyx_v_width_) * ((float)__pyx_v_factor_));
+0475: float h2 = <float>height_ * <float>factor_
__pyx_v_h2 = (((float)__pyx_v_height_) * ((float)__pyx_v_factor_));
+0476: float r0 = <float>sqrt(w2 * w2 + h2 * h2)
__pyx_v_r0 = ((float)sqrt(((__pyx_v_w2 * __pyx_v_w2) + (__pyx_v_h2 * __pyx_v_h2))));
0477:
0478: int i, j
0479: unsigned int x
0480:
+0481: float n1 = <float>1.0 / width_
__pyx_v_n1 = (((float)1.0) / __pyx_v_width_);
+0482: float n2 = <float>1.0 / height_
__pyx_v_n2 = (((float)1.0) / __pyx_v_height_);
0483: unsigned char * r
0484: unsigned char * g
0485: unsigned char * b
0486: unsigned char * a
0487:
+0488: cdef unsigned short int THREADS = threads_
__pyx_v_THREADS = __pyx_v_threads_;
0489:
0490: cdef unsigned char [:, ::1] gradient_array__
0491:
+0492: if gradient_array_ is None:
__pyx_t_1 = (__pyx_v_gradient_array_ == Py_None); __pyx_t_7 = (__pyx_t_1 != 0); if (__pyx_t_7) { /* … */ }
0493:
+0494: gradient_array_ = create_horizontal_gradient_1d_alpha(
__pyx_t_8.__pyx_n = 2; __pyx_t_8.start_color = __pyx_v_start_color_; __pyx_t_8.end_color = __pyx_v_end_color_; __pyx_t_3 = __pyx_f_12PygameShader_4misc_create_horizontal_gradient_1d_alpha(((int)sqrt(((__pyx_v_width_ * __pyx_v_width_) + ((__pyx_v_height_ * ((float)0.5)) * (__pyx_v_height_ * ((float)0.5)))))), 0, &__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_gradient_array_, __pyx_t_3); __pyx_t_3 = 0;
0495: <int>sqrt(width_ * width_ + (height_ * <float>0.5) * (height_ * <float>0.5)),
0496: start_color = start_color_,
0497: end_color = end_color_
0498: )
0499:
0500:
+0501: gradient_array__ = gradient_array_
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_v_gradient_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 501, __pyx_L1_error) __pyx_v_gradient_array__ = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+0502: cdef unsigned int l = <object> gradient_array__.shape[0] - 1
__pyx_t_3 = PyInt_FromSsize_t((__pyx_v_gradient_array__.shape[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 502, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 502, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 502, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_l = __pyx_t_10;
0503:
+0504: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L7; } __pyx_L7:; } }
+0505: for j in prange(height_, schedule=SCHEDULE, num_threads=THREADS):
__pyx_t_11 = __pyx_v_height_; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_a) lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_r) lastprivate(__pyx_v_x) schedule(static) /* … */ __pyx_t_11 = __pyx_v_height_; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_a) lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_r) lastprivate(__pyx_v_x) schedule(static) num_threads(__pyx_v_THREADS) #endif /* _OPENMP */ for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_13; __pyx_t_12++){ { __pyx_v_j = (int)(0 + 1 * __pyx_t_12); /* Initialize private variables to invalid values */ __pyx_v_a = ((unsigned char *)1); __pyx_v_b = ((unsigned char *)1); __pyx_v_g = ((unsigned char *)1); __pyx_v_i = ((int)0xbad0bad0); __pyx_v_nx = ((float)__PYX_NAN()); __pyx_v_ny = ((float)__PYX_NAN()); __pyx_v_r = ((unsigned char *)1); __pyx_v_x = ((unsigned int)0xbad0bad0);
+0506: ny = (<float> j * n2) - <float> offset_y
__pyx_v_ny = ((((float)__pyx_v_j) * __pyx_v_n2) - ((float)__pyx_v_offset_y));
0507:
+0508: for i in range(width_):
__pyx_t_14 = __pyx_v_width_; __pyx_t_15 = __pyx_t_14; for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) { __pyx_v_i = __pyx_t_16;
+0509: nx = (<float>i * n1) - <float> offset_x
__pyx_v_nx = ((((float)__pyx_v_i) * __pyx_v_n1) - ((float)__pyx_v_offset_x));
0510:
+0511: r = &rgb_array[j, i, 0]
__pyx_t_17 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 0; __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) ))));
+0512: g = &rgb_array[j, i, 1]
__pyx_t_19 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_17 = 1; __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_17)) ))));
+0513: b = &rgb_array[j, i, 2]
__pyx_t_17 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 2; __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) ))));
+0514: a = &rgb_array[j, i, 3]
__pyx_t_19 = __pyx_v_j; __pyx_t_18 = __pyx_v_i; __pyx_t_17 = 3; __pyx_v_a = (&(*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_17)) ))));
0515:
0516: # position in the gradient
+0517: x = <int>((<float>sqrt(nx * nx + ny * ny) * r0) * r_max)
__pyx_v_x = ((int)((((float)sqrt(((__pyx_v_nx * __pyx_v_nx) + (__pyx_v_ny * __pyx_v_ny)))) * __pyx_v_r0) * 1.41421356274619));
0518:
0519: # check if the radius is greater than the size of the gradient,
0520: # in which case, the color is black
+0521: if x > l:
__pyx_t_7 = ((__pyx_v_x > __pyx_v_l) != 0); if (__pyx_t_7) { /* … */ goto __pyx_L14; }
+0522: r[0] = 0
(__pyx_v_r[0]) = 0;
+0523: g[0] = 0
(__pyx_v_g[0]) = 0;
+0524: b[0] = 0
(__pyx_v_b[0]) = 0;
+0525: a[0] = 0
(__pyx_v_a[0]) = 0;
0526: # assign the gradient
0527: else:
+0528: r[0] = <unsigned char>gradient_array__[x, 0]
/*else*/ { __pyx_t_20 = __pyx_v_x; __pyx_t_17 = 0; (__pyx_v_r[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_20 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_17)) ))));
+0529: g[0] = <unsigned char>gradient_array__[x, 1]
__pyx_t_20 = __pyx_v_x; __pyx_t_17 = 1; (__pyx_v_g[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_20 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_17)) ))));
+0530: b[0] = <unsigned char>gradient_array__[x, 2]
__pyx_t_20 = __pyx_v_x; __pyx_t_17 = 2; (__pyx_v_b[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_20 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_17)) ))));
+0531: a[0] = <unsigned char>gradient_array__[x, 3]
__pyx_t_20 = __pyx_v_x; __pyx_t_17 = 3; (__pyx_v_a[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_20 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_17)) )))); } __pyx_L14:; } } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0532:
+0533: return frombuffer(rgb_array, (width_, height_), "RGBA").convert_alpha()
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_rgb_array, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_21 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); __pyx_t_22 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_23 = PyTuple_New(2); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_23); __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_21); __Pyx_GIVEREF(__pyx_t_22); PyTuple_SET_ITEM(__pyx_t_23, 1, __pyx_t_22); __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_22 = NULL; __pyx_t_13 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_22 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_22)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_22); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); __pyx_t_13 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[4] = {__pyx_t_22, __pyx_t_2, __pyx_t_23, __pyx_n_s_RGBA}; __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[4] = {__pyx_t_22, __pyx_t_2, __pyx_t_23, __pyx_n_s_RGBA}; __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; } else #endif { __pyx_t_21 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); if (__pyx_t_22) { __Pyx_GIVEREF(__pyx_t_22); PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_22); __pyx_t_22 = NULL; } __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_21, 0+__pyx_t_13, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_23); PyTuple_SET_ITEM(__pyx_t_21, 1+__pyx_t_13, __pyx_t_23); __Pyx_INCREF(__pyx_n_s_RGBA); __Pyx_GIVEREF(__pyx_n_s_RGBA); PyTuple_SET_ITEM(__pyx_t_21, 2+__pyx_t_13, __pyx_n_s_RGBA); __pyx_t_2 = 0; __pyx_t_23 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_convert_alpha); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
0534:
0535:
0536: @cython.boundscheck(False)
0537: @cython.wraparound(False)
0538: @cython.nonecheck(False)
0539: @cython.cdivision(True)
0540: @cython.profile(False)
+0541: cpdef create_quarter_radial_gradient(
static PyObject *__pyx_pw_12PygameShader_4misc_15create_quarter_radial_gradient(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_create_quarter_radial_gradient(int __pyx_v_width_, int __pyx_v_height_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_4misc_create_quarter_radial_gradient *__pyx_optional_args) { /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1); __Pyx_XDECREF(__pyx_t_22); __Pyx_XDECREF(__pyx_t_23); __Pyx_AddTraceback("PygameShader.misc.create_quarter_radial_gradient", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_gradient_array__, 1); __Pyx_XDECREF(__pyx_v_gradient_array_); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_15create_quarter_radial_gradient(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_14create_quarter_radial_gradient[] = "\n CREATE A RADIAL GRADIENT (24-bit OPAQUE)\n\n Iterate over width/2 and height/2 (NW quarter of the surface) and mirror the \n pixels for the other blocks (NE, SE, SW)\n \n :param width_ : integer; surface width in pixels \n :param height_ : integer; surface height in pixels\n :param start_color_ : tuple; Contains the end color of the radian (RGB values), default (0, 0, 0)\n :param end_color_ : tuple; Contains the start color of the radian (RGB values), default (255, 0, 0)\n :param gradient_array_: numpy.array; gradient array shape (w, 3) containing RGB colors (uint8) \n :param factor_ : float; Value must be > 0. Default is 1.4 \n :param threads_ : integer; concurrent threads default 8\n :return : pygame.Surface; Return a radial gradient centre from the surface \n origin C(Width/2, height/2)\n "; static PyObject *__pyx_pw_12PygameShader_4misc_15create_quarter_radial_gradient(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_width_; int __pyx_v_height_; PyObject *__pyx_v_start_color_ = 0; PyObject *__pyx_v_end_color_ = 0; PyObject *__pyx_v_gradient_array_ = 0; float __pyx_v_factor_; unsigned short __pyx_v_threads_; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_quarter_radial_gradient (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width_2,&__pyx_n_s_height_2,&__pyx_n_s_start_color_2,&__pyx_n_s_end_color_2,&__pyx_n_s_gradient_array,&__pyx_n_s_factor,&__pyx_n_s_threads,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_14create_quarter_radial_gradient(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width_, int __pyx_v_height_, PyObject *__pyx_v_start_color_, PyObject *__pyx_v_end_color_, PyObject *__pyx_v_gradient_array_, float __pyx_v_factor_, unsigned short __pyx_v_threads_) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_quarter_radial_gradient", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 5; __pyx_t_2.start_color_ = __pyx_v_start_color_; __pyx_t_2.end_color_ = __pyx_v_end_color_; __pyx_t_2.gradient_array_ = __pyx_v_gradient_array_; __pyx_t_2.factor_ = __pyx_v_factor_; __pyx_t_2.threads_ = __pyx_v_threads_; __pyx_t_1 = __pyx_f_12PygameShader_4misc_create_quarter_radial_gradient(__pyx_v_width_, __pyx_v_height_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.create_quarter_radial_gradient", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0542: int width_,
0543: int height_,
+0544: tuple start_color_ = (255, 0, 0),
PyObject *__pyx_v_start_color_ = ((PyObject*)__pyx_tuple__3); /* … */ values[2] = ((PyObject*)__pyx_tuple__3);
+0545: tuple end_color_ = (0, 0, 0),
PyObject *__pyx_v_end_color_ = ((PyObject*)__pyx_tuple__8); /* … */ values[3] = ((PyObject*)__pyx_tuple__8);
+0546: object gradient_array_ = None,
PyObject *__pyx_v_gradient_array_ = ((PyObject *)Py_None); float __pyx_v_factor_ = ((float)1.4); unsigned short __pyx_v_threads_ = ((unsigned short)8); float __pyx_v_nx; float __pyx_v_ny; float __pyx_v_w2; float __pyx_v_h2; float __pyx_v_r0; __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_i; int __pyx_v_j; unsigned int __pyx_v_x; float __pyx_v_n1; float __pyx_v_n2; unsigned char *__pyx_v_g1; unsigned char *__pyx_v_g2; unsigned char *__pyx_v_g3; unsigned int __pyx_v_width_1; unsigned int __pyx_v_height_1; unsigned int __pyx_v_w_i; unsigned int __pyx_v_h_j; CYTHON_UNUSED unsigned short __pyx_v_THREADS; __Pyx_memviewslice __pyx_v_gradient_array__ = { 0, 0, { 0 }, { 0 }, { 0 } }; unsigned int __pyx_v_l; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_quarter_radial_gradient", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_start_color_ = __pyx_optional_args->start_color_; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_end_color_ = __pyx_optional_args->end_color_; if (__pyx_optional_args->__pyx_n > 2) { __pyx_v_gradient_array_ = __pyx_optional_args->gradient_array_; if (__pyx_optional_args->__pyx_n > 3) { __pyx_v_factor_ = __pyx_optional_args->factor_; if (__pyx_optional_args->__pyx_n > 4) { __pyx_v_threads_ = __pyx_optional_args->threads_; } } } } } } __Pyx_INCREF(__pyx_v_gradient_array_); /* … */ values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width_2)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_height_2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_quarter_radial_gradient", 0, 2, 7, 1); __PYX_ERR(0, 541, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_color_2); if (value) { values[2] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_color_2); if (value) { values[3] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_gradient_array); if (value) { values[4] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 5: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factor); if (value) { values[5] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 6: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_threads); if (value) { values[6] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_quarter_radial_gradient") < 0)) __PYX_ERR(0, 541, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_width_ = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_width_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L3_error) __pyx_v_height_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 543, __pyx_L3_error) __pyx_v_start_color_ = ((PyObject*)values[2]); __pyx_v_end_color_ = ((PyObject*)values[3]); __pyx_v_gradient_array_ = values[4]; if (values[5]) { __pyx_v_factor_ = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_factor_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 547, __pyx_L3_error) } else { __pyx_v_factor_ = ((float)1.4); } if (values[6]) { __pyx_v_threads_ = __Pyx_PyInt_As_unsigned_short(values[6]); if (unlikely((__pyx_v_threads_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 548, __pyx_L3_error) } else { __pyx_v_threads_ = ((unsigned short)8); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_quarter_radial_gradient", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 541, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.create_quarter_radial_gradient", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start_color_), (&PyTuple_Type), 1, "start_color_", 1))) __PYX_ERR(0, 544, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_end_color_), (&PyTuple_Type), 1, "end_color_", 1))) __PYX_ERR(0, 545, __pyx_L1_error) __pyx_r = __pyx_pf_12PygameShader_4misc_14create_quarter_radial_gradient(__pyx_self, __pyx_v_width_, __pyx_v_height_, __pyx_v_start_color_, __pyx_v_end_color_, __pyx_v_gradient_array_, __pyx_v_factor_, __pyx_v_threads_);
0547: float factor_ = 1.4,
0548: unsigned short int threads_ = 8
0549: ):
0550: """
0551: CREATE A RADIAL GRADIENT (24-bit OPAQUE)
0552:
0553: Iterate over width/2 and height/2 (NW quarter of the surface) and mirror the
0554: pixels for the other blocks (NE, SE, SW)
0555:
0556: :param width_ : integer; surface width in pixels
0557: :param height_ : integer; surface height in pixels
0558: :param start_color_ : tuple; Contains the end color of the radian (RGB values), default (0, 0, 0)
0559: :param end_color_ : tuple; Contains the start color of the radian (RGB values), default (255, 0, 0)
0560: :param gradient_array_: numpy.array; gradient array shape (w, 3) containing RGB colors (uint8)
0561: :param factor_ : float; Value must be > 0. Default is 1.4
0562: :param threads_ : integer; concurrent threads default 8
0563: :return : pygame.Surface; Return a radial gradient centre from the surface
0564: origin C(Width/2, height/2)
0565: """
0566:
+0567: assert r_max != 0, "Constant r_max cannot be null"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!1)) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Constant_r_max_cannot_be_null); __PYX_ERR(0, 567, __pyx_L1_error) } } #endif
+0568: if factor_ <=0:
__pyx_t_1 = ((__pyx_v_factor_ <= 0.0) != 0); if (unlikely(__pyx_t_1)) { /* … */ }
+0569: raise ValueError("Argument factor_ cannot be <= 0.0 default is 1.4")
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 569, __pyx_L1_error)
+0570: assert width_ > 0, "Argument width cannot be <=0"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_width_ > 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_width_cannot_be_0); __PYX_ERR(0, 570, __pyx_L1_error) } } #endif
+0571: assert height_ > 0, "Argument height cannot be <=0"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_height_ > 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_height_cannot_be_0); __PYX_ERR(0, 571, __pyx_L1_error) } } #endif
0572:
0573: cdef:
0574:
0575: float nx, ny
+0576: float w2 = <float>width_ * <float>factor_
__pyx_v_w2 = (((float)__pyx_v_width_) * ((float)__pyx_v_factor_));
+0577: float h2 = <float>height_ * <float>factor_
__pyx_v_h2 = (((float)__pyx_v_height_) * ((float)__pyx_v_factor_));
+0578: float r0 = <float>sqrt(w2 * w2 + h2 * h2)
__pyx_v_r0 = ((float)sqrt(((__pyx_v_w2 * __pyx_v_w2) + (__pyx_v_h2 * __pyx_v_h2))));
+0579: unsigned char [:, :, ::1] rgb_array = empty((height_, width_, 3), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __Pyx_INCREF(__pyx_int_3); __Pyx_GIVEREF(__pyx_int_3); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_int_3); __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_rgb_array = __pyx_t_6; __pyx_t_6.memview = NULL; __pyx_t_6.data = NULL;
0580:
0581: int i, j
0582: unsigned int x
+0583: float n1 = <float>1.0 / width_
__pyx_v_n1 = (((float)1.0) / __pyx_v_width_);
+0584: float n2 = <float>1.0 / height_
__pyx_v_n2 = (((float)1.0) / __pyx_v_height_);
0585: unsigned char * g1
0586: unsigned char * g2
0587: unsigned char * g3
+0588: unsigned int width_1 = width_ - 1
__pyx_v_width_1 = (__pyx_v_width_ - 1);
+0589: unsigned int height_1 = height_ - 1
__pyx_v_height_1 = (__pyx_v_height_ - 1);
0590: unsigned w_i
0591: unsigned h_j
0592:
+0593: cdef unsigned short int THREADS = threads_
__pyx_v_THREADS = __pyx_v_threads_;
0594:
0595: cdef unsigned char [:, ::1] gradient_array__
0596:
+0597: if gradient_array_ is None:
__pyx_t_1 = (__pyx_v_gradient_array_ == Py_None); __pyx_t_7 = (__pyx_t_1 != 0); if (__pyx_t_7) { /* … */ }
0598:
+0599: gradient_array_ = create_horizontal_gradient_1d(
__pyx_t_8.__pyx_n = 2; __pyx_t_8.start_color = __pyx_v_start_color_; __pyx_t_8.end_color = __pyx_v_end_color_; __pyx_t_3 = __pyx_f_12PygameShader_4misc_create_horizontal_gradient_1d(((int)sqrt(((__pyx_v_width_ * __pyx_v_width_) + ((__pyx_v_height_ * ((float)0.5)) * (__pyx_v_height_ * ((float)0.5)))))), 0, &__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_gradient_array_, __pyx_t_3); __pyx_t_3 = 0;
0600: <int>sqrt(width_ * width_ + (height_ * <float>0.5) * (height_ * <float>0.5)),
0601: start_color=start_color_,
0602: end_color=end_color_
0603: )
0604:
0605:
+0606: gradient_array__ = gradient_array_
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_v_gradient_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 606, __pyx_L1_error) __pyx_v_gradient_array__ = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+0607: cdef unsigned int l = <object> gradient_array__.shape[0] - 1
__pyx_t_3 = PyInt_FromSsize_t((__pyx_v_gradient_array__.shape[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 607, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_l = __pyx_t_10;
0608:
0609:
+0610: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L7; } __pyx_L7:; } }
+0611: for j in prange(height_ >> 1, schedule=SCHEDULE, num_threads=THREADS):
__pyx_t_11 = (__pyx_v_height_ >> 1); if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_g1) lastprivate(__pyx_v_g2) lastprivate(__pyx_v_g3) lastprivate(__pyx_v_h_j) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_w_i) lastprivate(__pyx_v_x) schedule(static) /* … */ __pyx_t_11 = (__pyx_v_height_ >> 1); if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_g1) lastprivate(__pyx_v_g2) lastprivate(__pyx_v_g3) lastprivate(__pyx_v_h_j) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_w_i) lastprivate(__pyx_v_x) schedule(static) num_threads(__pyx_v_THREADS) #endif /* _OPENMP */ for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_13; __pyx_t_12++){ { __pyx_v_j = (int)(0 + 1 * __pyx_t_12); /* Initialize private variables to invalid values */ __pyx_v_g1 = ((unsigned char *)1); __pyx_v_g2 = ((unsigned char *)1); __pyx_v_g3 = ((unsigned char *)1); __pyx_v_h_j = ((unsigned int)0xbad0bad0); __pyx_v_i = ((int)0xbad0bad0); __pyx_v_nx = ((float)__PYX_NAN()); __pyx_v_ny = ((float)__PYX_NAN()); __pyx_v_w_i = ((unsigned int)0xbad0bad0); __pyx_v_x = ((unsigned int)0xbad0bad0);
+0612: ny = (<float> j * n2) - <float> 0.5
__pyx_v_ny = ((((float)__pyx_v_j) * __pyx_v_n2) - ((float)0.5));
0613:
+0614: for i in range(width_ >> 1):
__pyx_t_14 = (__pyx_v_width_ >> 1); __pyx_t_15 = __pyx_t_14; for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) { __pyx_v_i = __pyx_t_16;
+0615: nx = (<float>i * n1) - <float> 0.5
__pyx_v_nx = ((((float)__pyx_v_i) * __pyx_v_n1) - ((float)0.5));
0616:
0617: # position in the gradient
+0618: x = <int>((<float>sqrt(nx * nx + ny * ny) * r0) * r_max)
__pyx_v_x = ((int)((((float)sqrt(((__pyx_v_nx * __pyx_v_nx) + (__pyx_v_ny * __pyx_v_ny)))) * __pyx_v_r0) * 1.41421356274619));
0619:
+0620: g1 = &gradient_array__[x, 0]
__pyx_t_17 = __pyx_v_x; __pyx_t_18 = 0; __pyx_v_g1 = (&(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_17 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_18)) ))));
+0621: g2 = &gradient_array__[x, 1]
__pyx_t_17 = __pyx_v_x; __pyx_t_18 = 1; __pyx_v_g2 = (&(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_17 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_18)) ))));
+0622: g3 = &gradient_array__[x, 2]
__pyx_t_17 = __pyx_v_x; __pyx_t_18 = 2; __pyx_v_g3 = (&(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_17 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_18)) ))));
0623:
+0624: w_i = width_1 - i
__pyx_v_w_i = (__pyx_v_width_1 - __pyx_v_i);
+0625: h_j = height_1 - j
__pyx_v_h_j = (__pyx_v_height_1 - __pyx_v_j);
0626:
+0627: if x > l:
__pyx_t_7 = ((__pyx_v_x > __pyx_v_l) != 0); if (__pyx_t_7) { /* … */ goto __pyx_L14; }
0628: # NW
+0629: rgb_array[j, i, 0] = 0
__pyx_t_18 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = 0;
+0630: rgb_array[j, i, 1] = 0
__pyx_t_20 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
+0631: rgb_array[j, i, 2] = 0
__pyx_t_18 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = 0;
0632: # NE
+0633: rgb_array[j, w_i, 0] = 0
__pyx_t_20 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
+0634: rgb_array[j, w_i, 1] = 0
__pyx_t_19 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_20 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = 0;
+0635: rgb_array[j, w_i, 2] = 0
__pyx_t_20 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
0636:
0637: # SE
+0638: rgb_array[h_j, w_i, 0] = 0
__pyx_t_17 = __pyx_v_h_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
+0639: rgb_array[h_j, w_i, 1] = 0
__pyx_t_21 = __pyx_v_h_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
+0640: rgb_array[h_j, w_i, 2] = 0
__pyx_t_17 = __pyx_v_h_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
0641:
0642: # SW
+0643: rgb_array[h_j, i, 0] = 0
__pyx_t_21 = __pyx_v_h_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = 0;
+0644: rgb_array[h_j, i, 1] = 0
__pyx_t_21 = __pyx_v_h_j; __pyx_t_20 = __pyx_v_i; __pyx_t_19 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_20 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
+0645: rgb_array[h_j, i, 2] = 0
__pyx_t_21 = __pyx_v_h_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = 0;
0646:
0647: else:
0648: # NW
+0649: rgb_array[j, i, 0] = g1[0]
/*else*/ { __pyx_t_20 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g1[0]);
+0650: rgb_array[j, i, 1] = g2[0]
__pyx_t_18 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = (__pyx_v_g2[0]);
+0651: rgb_array[j, i, 2] = g3[0]
__pyx_t_20 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g3[0]);
0652: # NE
+0653: rgb_array[j, w_i, 0] = g1[0]
__pyx_t_18 = __pyx_v_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g1[0]);
+0654: rgb_array[j, w_i, 1] = g2[0]
__pyx_t_19 = __pyx_v_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g2[0]);
+0655: rgb_array[j, w_i, 2] = g3[0]
__pyx_t_18 = __pyx_v_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g3[0]);
0656: # SE
+0657: rgb_array[h_j, w_i, 0] = g1[0]
__pyx_t_21 = __pyx_v_h_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g1[0]);
+0658: rgb_array[h_j, w_i, 1] = g2[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_19 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g2[0]);
+0659: rgb_array[h_j, w_i, 2] = g3[0]
__pyx_t_21 = __pyx_v_h_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g3[0]);
0660: # SW
+0661: rgb_array[h_j, i, 0] = g1[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g1[0]);
+0662: rgb_array[h_j, i, 1] = g2[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g2[0]);
+0663: rgb_array[h_j, i, 2] = g3[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g3[0]); } __pyx_L14:; } } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0664:
+0665: return frombuffer(rgb_array, (width_, height_), "RGB")
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_rgb_array, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_22 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_23 = PyTuple_New(2); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_23); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_22); PyTuple_SET_ITEM(__pyx_t_23, 1, __pyx_t_22); __pyx_t_2 = 0; __pyx_t_22 = 0; __pyx_t_22 = NULL; __pyx_t_16 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_22 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_22)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_22); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_16 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_22, __pyx_t_4, __pyx_t_23, __pyx_n_s_RGB}; __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_22, __pyx_t_4, __pyx_t_23, __pyx_n_s_RGB}; __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; } else #endif { __pyx_t_2 = PyTuple_New(3+__pyx_t_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__pyx_t_22) { __Pyx_GIVEREF(__pyx_t_22); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_22); __pyx_t_22 = NULL; } __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_16, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_23); PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_16, __pyx_t_23); __Pyx_INCREF(__pyx_n_s_RGB); __Pyx_GIVEREF(__pyx_n_s_RGB); PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_16, __pyx_n_s_RGB); __pyx_t_4 = 0; __pyx_t_23 = 0; __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
0666:
0667:
0668:
0669:
0670: @cython.boundscheck(False)
0671: @cython.wraparound(False)
0672: @cython.nonecheck(False)
0673: @cython.cdivision(True)
0674: @cython.profile(False)
+0675: cpdef create_quarter_radial_gradient_alpha(
static PyObject *__pyx_pw_12PygameShader_4misc_17create_quarter_radial_gradient_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_12PygameShader_4misc_create_quarter_radial_gradient_alpha(int __pyx_v_width_, int __pyx_v_height_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_4misc_create_quarter_radial_gradient_alpha *__pyx_optional_args) { /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1); __Pyx_XDECREF(__pyx_t_22); __Pyx_XDECREF(__pyx_t_23); __Pyx_XDECREF(__pyx_t_24); __Pyx_AddTraceback("PygameShader.misc.create_quarter_radial_gradient_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_gradient_array__, 1); __Pyx_XDECREF(__pyx_v_gradient_array_); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_12PygameShader_4misc_17create_quarter_radial_gradient_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_12PygameShader_4misc_16create_quarter_radial_gradient_alpha[] = "\n CREATE A RADIAL GRADIENT (32-BIT WITH TRANSPARENCY)\n\n Iterate over width/2 and height/2 (NW quarter of the surface) and mirror the \n pixels for the other blocks (NE, SE, SW)\n\n :param width_ : integer; surface width in pixels \n :param height_ : integer; surface height in pixels\n :param end_color_ : tuple; Contains the start color of the radian (RGBA values), default (255, 0, 0, 255)\n :param start_color_ : tuple; Contains the end color of the radian (RGBA values), default (0, 0, 0, 0)\n :param gradient_array_: numpy.array; gradient array shape (w, 3) containing RGB colors (uint8) \n :param factor_ : float; Value must be > 0. Default is 1.4 \n :param threads_ : integer; concurrent threads default 8\n :return : pygame.Surface; Return a radial gradient centre from the surface \n origin C(Width/2, height/2)\n "; static PyObject *__pyx_pw_12PygameShader_4misc_17create_quarter_radial_gradient_alpha(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_width_; int __pyx_v_height_; PyObject *__pyx_v_start_color_ = 0; PyObject *__pyx_v_end_color_ = 0; PyObject *__pyx_v_gradient_array_ = 0; float __pyx_v_factor_; unsigned short __pyx_v_threads_; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_quarter_radial_gradient_alpha (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width_2,&__pyx_n_s_height_2,&__pyx_n_s_start_color_2,&__pyx_n_s_end_color_2,&__pyx_n_s_gradient_array,&__pyx_n_s_factor,&__pyx_n_s_threads,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_12PygameShader_4misc_16create_quarter_radial_gradient_alpha(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width_, int __pyx_v_height_, PyObject *__pyx_v_start_color_, PyObject *__pyx_v_end_color_, PyObject *__pyx_v_gradient_array_, float __pyx_v_factor_, unsigned short __pyx_v_threads_) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_quarter_radial_gradient_alpha", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 5; __pyx_t_2.start_color_ = __pyx_v_start_color_; __pyx_t_2.end_color_ = __pyx_v_end_color_; __pyx_t_2.gradient_array_ = __pyx_v_gradient_array_; __pyx_t_2.factor_ = __pyx_v_factor_; __pyx_t_2.threads_ = __pyx_v_threads_; __pyx_t_1 = __pyx_f_12PygameShader_4misc_create_quarter_radial_gradient_alpha(__pyx_v_width_, __pyx_v_height_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("PygameShader.misc.create_quarter_radial_gradient_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
0676: int width_,
0677: int height_,
+0678: tuple start_color_ = (255, 0, 0, 255),
PyObject *__pyx_v_start_color_ = ((PyObject*)__pyx_tuple__6); /* … */ values[2] = ((PyObject*)__pyx_tuple__6);
+0679: tuple end_color_ = (0, 0, 0, 0),
PyObject *__pyx_v_end_color_ = ((PyObject*)__pyx_tuple__10); /* … */ values[3] = ((PyObject*)__pyx_tuple__10);
+0680: object gradient_array_ = None,
PyObject *__pyx_v_gradient_array_ = ((PyObject *)Py_None); float __pyx_v_factor_ = ((float)1.4); unsigned short __pyx_v_threads_ = ((unsigned short)8); float __pyx_v_nx; float __pyx_v_ny; float __pyx_v_w2; float __pyx_v_h2; float __pyx_v_r0; __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_i; int __pyx_v_j; unsigned int __pyx_v_x; float __pyx_v_n1; float __pyx_v_n2; unsigned char *__pyx_v_g1; unsigned char *__pyx_v_g2; unsigned char *__pyx_v_g3; unsigned char *__pyx_v_g4; unsigned int __pyx_v_width_1; unsigned int __pyx_v_height_1; unsigned int __pyx_v_w_i; unsigned int __pyx_v_h_j; CYTHON_UNUSED unsigned short __pyx_v_THREADS; __Pyx_memviewslice __pyx_v_gradient_array__ = { 0, 0, { 0 }, { 0 }, { 0 } }; unsigned int __pyx_v_l; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_quarter_radial_gradient_alpha", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_start_color_ = __pyx_optional_args->start_color_; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_end_color_ = __pyx_optional_args->end_color_; if (__pyx_optional_args->__pyx_n > 2) { __pyx_v_gradient_array_ = __pyx_optional_args->gradient_array_; if (__pyx_optional_args->__pyx_n > 3) { __pyx_v_factor_ = __pyx_optional_args->factor_; if (__pyx_optional_args->__pyx_n > 4) { __pyx_v_threads_ = __pyx_optional_args->threads_; } } } } } } __Pyx_INCREF(__pyx_v_gradient_array_); /* … */ values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width_2)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_height_2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_quarter_radial_gradient_alpha", 0, 2, 7, 1); __PYX_ERR(0, 675, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_color_2); if (value) { values[2] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_color_2); if (value) { values[3] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_gradient_array); if (value) { values[4] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 5: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factor); if (value) { values[5] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 6: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_threads); if (value) { values[6] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_quarter_radial_gradient_alpha") < 0)) __PYX_ERR(0, 675, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_width_ = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_width_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 676, __pyx_L3_error) __pyx_v_height_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 677, __pyx_L3_error) __pyx_v_start_color_ = ((PyObject*)values[2]); __pyx_v_end_color_ = ((PyObject*)values[3]); __pyx_v_gradient_array_ = values[4]; if (values[5]) { __pyx_v_factor_ = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_factor_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 681, __pyx_L3_error) } else { __pyx_v_factor_ = ((float)1.4); } if (values[6]) { __pyx_v_threads_ = __Pyx_PyInt_As_unsigned_short(values[6]); if (unlikely((__pyx_v_threads_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 682, __pyx_L3_error) } else { __pyx_v_threads_ = ((unsigned short)8); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_quarter_radial_gradient_alpha", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 675, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("PygameShader.misc.create_quarter_radial_gradient_alpha", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start_color_), (&PyTuple_Type), 1, "start_color_", 1))) __PYX_ERR(0, 678, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_end_color_), (&PyTuple_Type), 1, "end_color_", 1))) __PYX_ERR(0, 679, __pyx_L1_error) __pyx_r = __pyx_pf_12PygameShader_4misc_16create_quarter_radial_gradient_alpha(__pyx_self, __pyx_v_width_, __pyx_v_height_, __pyx_v_start_color_, __pyx_v_end_color_, __pyx_v_gradient_array_, __pyx_v_factor_, __pyx_v_threads_);
0681: float factor_ = 1.4,
0682: unsigned short int threads_ = 8
0683: ):
0684: """
0685: CREATE A RADIAL GRADIENT (32-BIT WITH TRANSPARENCY)
0686:
0687: Iterate over width/2 and height/2 (NW quarter of the surface) and mirror the
0688: pixels for the other blocks (NE, SE, SW)
0689:
0690: :param width_ : integer; surface width in pixels
0691: :param height_ : integer; surface height in pixels
0692: :param end_color_ : tuple; Contains the start color of the radian (RGBA values), default (255, 0, 0, 255)
0693: :param start_color_ : tuple; Contains the end color of the radian (RGBA values), default (0, 0, 0, 0)
0694: :param gradient_array_: numpy.array; gradient array shape (w, 3) containing RGB colors (uint8)
0695: :param factor_ : float; Value must be > 0. Default is 1.4
0696: :param threads_ : integer; concurrent threads default 8
0697: :return : pygame.Surface; Return a radial gradient centre from the surface
0698: origin C(Width/2, height/2)
0699: """
0700:
+0701: assert r_max != 0, "Constant r_max cannot be null"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!1)) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Constant_r_max_cannot_be_null); __PYX_ERR(0, 701, __pyx_L1_error) } } #endif
+0702: if factor_ <=0:
__pyx_t_1 = ((__pyx_v_factor_ <= 0.0) != 0); if (unlikely(__pyx_t_1)) { /* … */ }
+0703: raise ValueError("Argument factor_ cannot be <= 0.0 default is 1.4")
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 703, __pyx_L1_error)
+0704: assert width_ > 0, "Argument width cannot be <=0"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_width_ > 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_width_cannot_be_0); __PYX_ERR(0, 704, __pyx_L1_error) } } #endif
+0705: assert height_ > 0, "Argument height cannot be <=0"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_height_ > 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_height_cannot_be_0); __PYX_ERR(0, 705, __pyx_L1_error) } } #endif
0706:
0707: cdef:
0708:
0709: float nx, ny
+0710: float w2 = <float>width_ * <float>factor_
__pyx_v_w2 = (((float)__pyx_v_width_) * ((float)__pyx_v_factor_));
+0711: float h2 = <float>height_ * <float>factor_
__pyx_v_h2 = (((float)__pyx_v_height_) * ((float)__pyx_v_factor_));
+0712: float r0 = <float>sqrt(w2 * w2 + h2 * h2)
__pyx_v_r0 = ((float)sqrt(((__pyx_v_w2 * __pyx_v_w2) + (__pyx_v_h2 * __pyx_v_h2))));
+0713: unsigned char [:, :, ::1] rgb_array = empty((height_, width_, 4), dtype=uint8)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_int_4); __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_rgb_array = __pyx_t_6; __pyx_t_6.memview = NULL; __pyx_t_6.data = NULL;
0714:
0715: int i, j
0716: unsigned int x
+0717: float n1 = <float>1.0 / width_
__pyx_v_n1 = (((float)1.0) / __pyx_v_width_);
+0718: float n2 = <float>1.0 / height_
__pyx_v_n2 = (((float)1.0) / __pyx_v_height_);
0719: unsigned char * g1
0720: unsigned char * g2
0721: unsigned char * g3
0722: unsigned char * g4
+0723: unsigned int width_1 = width_ - 1
__pyx_v_width_1 = (__pyx_v_width_ - 1);
+0724: unsigned int height_1 = height_ - 1
__pyx_v_height_1 = (__pyx_v_height_ - 1);
0725: unsigned w_i
0726: unsigned h_j
0727:
+0728: cdef unsigned short int THREADS = threads_
__pyx_v_THREADS = __pyx_v_threads_;
0729:
0730: cdef unsigned char [:, ::1] gradient_array__
0731:
+0732: if gradient_array_ is None:
__pyx_t_1 = (__pyx_v_gradient_array_ == Py_None); __pyx_t_7 = (__pyx_t_1 != 0); if (__pyx_t_7) { /* … */ }
0733:
+0734: gradient_array_ = create_horizontal_gradient_1d_alpha(
__pyx_t_8.__pyx_n = 2; __pyx_t_8.start_color = __pyx_v_start_color_; __pyx_t_8.end_color = __pyx_v_end_color_; __pyx_t_3 = __pyx_f_12PygameShader_4misc_create_horizontal_gradient_1d_alpha(((int)sqrt(((__pyx_v_width_ * __pyx_v_width_) + ((__pyx_v_height_ * ((float)0.5)) * (__pyx_v_height_ * ((float)0.5)))))), 0, &__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_gradient_array_, __pyx_t_3); __pyx_t_3 = 0;
0735: <int>sqrt(width_ * width_ + (height_ * <float>0.5) * (height_ * <float>0.5)),
0736: start_color=start_color_,
0737: end_color=end_color_
0738: )
0739:
+0740: gradient_array__ = gradient_array_
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_v_gradient_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 740, __pyx_L1_error) __pyx_v_gradient_array__ = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+0741: cdef unsigned int l = <object> gradient_array__.shape[0] - 1
__pyx_t_3 = PyInt_FromSsize_t((__pyx_v_gradient_array__.shape[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 741, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 741, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_l = __pyx_t_10;
0742:
0743:
+0744: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L7; } __pyx_L7:; } }
+0745: for j in prange(height_ >> 1, schedule=SCHEDULE, num_threads=THREADS):
__pyx_t_11 = (__pyx_v_height_ >> 1); if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_g1) lastprivate(__pyx_v_g2) lastprivate(__pyx_v_g3) lastprivate(__pyx_v_g4) lastprivate(__pyx_v_h_j) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_w_i) lastprivate(__pyx_v_x) schedule(static) /* … */ __pyx_t_11 = (__pyx_v_height_ >> 1); if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_13 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_13 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_g1) lastprivate(__pyx_v_g2) lastprivate(__pyx_v_g3) lastprivate(__pyx_v_g4) lastprivate(__pyx_v_h_j) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_w_i) lastprivate(__pyx_v_x) schedule(static) num_threads(__pyx_v_THREADS) #endif /* _OPENMP */ for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_13; __pyx_t_12++){ { __pyx_v_j = (int)(0 + 1 * __pyx_t_12); /* Initialize private variables to invalid values */ __pyx_v_g1 = ((unsigned char *)1); __pyx_v_g2 = ((unsigned char *)1); __pyx_v_g3 = ((unsigned char *)1); __pyx_v_g4 = ((unsigned char *)1); __pyx_v_h_j = ((unsigned int)0xbad0bad0); __pyx_v_i = ((int)0xbad0bad0); __pyx_v_nx = ((float)__PYX_NAN()); __pyx_v_ny = ((float)__PYX_NAN()); __pyx_v_w_i = ((unsigned int)0xbad0bad0); __pyx_v_x = ((unsigned int)0xbad0bad0);
+0746: ny = (<float> j * n2) - <float> 0.5
__pyx_v_ny = ((((float)__pyx_v_j) * __pyx_v_n2) - ((float)0.5));
0747:
+0748: for i in range(width_ >> 1):
__pyx_t_14 = (__pyx_v_width_ >> 1); __pyx_t_15 = __pyx_t_14; for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) { __pyx_v_i = __pyx_t_16;
+0749: nx = (<float>i * n1) - <float> 0.5
__pyx_v_nx = ((((float)__pyx_v_i) * __pyx_v_n1) - ((float)0.5));
0750:
0751: # position in the gradient
+0752: x = <int>((<float>sqrt(nx * nx + ny * ny) * r0) * r_max)
__pyx_v_x = ((int)((((float)sqrt(((__pyx_v_nx * __pyx_v_nx) + (__pyx_v_ny * __pyx_v_ny)))) * __pyx_v_r0) * 1.41421356274619));
0753:
+0754: g1 = &gradient_array__[x, 0]
__pyx_t_17 = __pyx_v_x; __pyx_t_18 = 0; __pyx_v_g1 = (&(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_17 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_18)) ))));
+0755: g2 = &gradient_array__[x, 1]
__pyx_t_17 = __pyx_v_x; __pyx_t_18 = 1; __pyx_v_g2 = (&(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_17 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_18)) ))));
+0756: g3 = &gradient_array__[x, 2]
__pyx_t_17 = __pyx_v_x; __pyx_t_18 = 2; __pyx_v_g3 = (&(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_17 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_18)) ))));
+0757: g4 = &gradient_array__[x, 3]
__pyx_t_17 = __pyx_v_x; __pyx_t_18 = 3; __pyx_v_g4 = (&(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_gradient_array__.data + __pyx_t_17 * __pyx_v_gradient_array__.strides[0]) )) + __pyx_t_18)) ))));
0758:
+0759: w_i = width_1 - i
__pyx_v_w_i = (__pyx_v_width_1 - __pyx_v_i);
+0760: h_j = height_1 - j
__pyx_v_h_j = (__pyx_v_height_1 - __pyx_v_j);
0761:
+0762: if x > l:
__pyx_t_7 = ((__pyx_v_x > __pyx_v_l) != 0); if (__pyx_t_7) { /* … */ goto __pyx_L14; }
0763: # NW
+0764: rgb_array[j, i, 0] = 0
__pyx_t_18 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = 0;
+0765: rgb_array[j, i, 1] = 0
__pyx_t_20 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
+0766: rgb_array[j, i, 2] = 0
__pyx_t_18 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = 0;
+0767: rgb_array[j, i, 3] = 0
__pyx_t_20 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
0768: # NE
+0769: rgb_array[j, w_i, 0] = 0
__pyx_t_18 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
+0770: rgb_array[j, w_i, 1] = 0
__pyx_t_19 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
+0771: rgb_array[j, w_i, 2] = 0
__pyx_t_18 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
+0772: rgb_array[j, w_i, 3] = 0
__pyx_t_19 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_18 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
0773:
0774: # SE
+0775: rgb_array[h_j, w_i, 0] = 0
__pyx_t_17 = __pyx_v_h_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_18 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
+0776: rgb_array[h_j, w_i, 1] = 0
__pyx_t_21 = __pyx_v_h_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
+0777: rgb_array[h_j, w_i, 2] = 0
__pyx_t_17 = __pyx_v_h_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_18 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
+0778: rgb_array[h_j, w_i, 3] = 0
__pyx_t_21 = __pyx_v_h_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_18 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
0779:
0780: # SW
+0781: rgb_array[h_j, i, 0] = 0
__pyx_t_17 = __pyx_v_h_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
+0782: rgb_array[h_j, i, 1] = 0
__pyx_t_17 = __pyx_v_h_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
+0783: rgb_array[h_j, i, 2] = 0
__pyx_t_17 = __pyx_v_h_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = 0;
+0784: rgb_array[h_j, i, 3] = 0
__pyx_t_17 = __pyx_v_h_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = 0;
0785:
0786: else:
0787: # NW
+0788: rgb_array[j, i, 0] = g1[0]
/*else*/ { __pyx_t_18 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = (__pyx_v_g1[0]);
+0789: rgb_array[j, i, 1] = g2[0]
__pyx_t_20 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g2[0]);
+0790: rgb_array[j, i, 2] = g3[0]
__pyx_t_18 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_20 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_20)) )) = (__pyx_v_g3[0]);
+0791: rgb_array[j, i, 3] = g4[0]
__pyx_t_20 = __pyx_v_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g4[0]);
0792: # NE
+0793: rgb_array[j, w_i, 0] = g1[0]
__pyx_t_18 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g1[0]);
+0794: rgb_array[j, w_i, 1] = g2[0]
__pyx_t_19 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g2[0]);
+0795: rgb_array[j, w_i, 2] = g3[0]
__pyx_t_18 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_18 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g3[0]);
+0796: rgb_array[j, w_i, 3] = g4[0]
__pyx_t_19 = __pyx_v_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_18 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_19 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g4[0]);
0797: # SE
+0798: rgb_array[h_j, w_i, 0] = g1[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_18 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g1[0]);
+0799: rgb_array[h_j, w_i, 1] = g2[0]
__pyx_t_21 = __pyx_v_h_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g2[0]);
+0800: rgb_array[h_j, w_i, 2] = g3[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_21 = __pyx_v_w_i; __pyx_t_18 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g3[0]);
+0801: rgb_array[h_j, w_i, 3] = g4[0]
__pyx_t_21 = __pyx_v_h_j; __pyx_t_17 = __pyx_v_w_i; __pyx_t_18 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g4[0]);
0802: # SW
+0803: rgb_array[h_j, i, 0] = g1[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 0; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g1[0]);
+0804: rgb_array[h_j, i, 1] = g2[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 1; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g2[0]);
+0805: rgb_array[h_j, i, 2] = g3[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_18 = __pyx_v_i; __pyx_t_19 = 2; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_19)) )) = (__pyx_v_g3[0]);
+0806: rgb_array[h_j, i, 3] = g4[0]
__pyx_t_17 = __pyx_v_h_j; __pyx_t_19 = __pyx_v_i; __pyx_t_18 = 3; *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_19 * __pyx_v_rgb_array.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_g4[0]); } __pyx_L14:; } } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif }
0807:
+0808: return frombuffer(rgb_array, (width_, height_), "RGBA").convert_alpha()
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_rgb_array, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_22 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_23 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_23); __pyx_t_24 = PyTuple_New(2); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_24); __Pyx_GIVEREF(__pyx_t_22); PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_22); __Pyx_GIVEREF(__pyx_t_23); PyTuple_SET_ITEM(__pyx_t_24, 1, __pyx_t_23); __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_23 = NULL; __pyx_t_16 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_23)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_23); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); __pyx_t_16 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[4] = {__pyx_t_23, __pyx_t_2, __pyx_t_24, __pyx_n_s_RGBA}; __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[4] = {__pyx_t_23, __pyx_t_2, __pyx_t_24, __pyx_n_s_RGBA}; __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0; } else #endif { __pyx_t_22 = PyTuple_New(3+__pyx_t_16); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); if (__pyx_t_23) { __Pyx_GIVEREF(__pyx_t_23); PyTuple_SET_ITEM(__pyx_t_22, 0, __pyx_t_23); __pyx_t_23 = NULL; } __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_22, 0+__pyx_t_16, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_24); PyTuple_SET_ITEM(__pyx_t_22, 1+__pyx_t_16, __pyx_t_24); __Pyx_INCREF(__pyx_n_s_RGBA); __Pyx_GIVEREF(__pyx_n_s_RGBA); PyTuple_SET_ITEM(__pyx_t_22, 2+__pyx_t_16, __pyx_n_s_RGBA); __pyx_t_2 = 0; __pyx_t_24 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_22, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_convert_alpha); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
0809:
0810:
0811:
0812: @cython.boundscheck(False)
0813: @cython.wraparound(False)
0814: @cython.nonecheck(False)
0815: @cython.cdivision(True)
0816: @cython.profile(False)
+0817: cdef float color_dist_hsv(hsv hsv_1, hsv hsv_2)nogil:
static float __pyx_f_12PygameShader_4misc_color_dist_hsv(struct hsv __pyx_v_hsv_1, struct hsv __pyx_v_hsv_2) { float __pyx_r; /* … */ /* function exit code */ __pyx_L0:; return __pyx_r; }
+0818: return (hsv_1.h - hsv_2.h) ** 2 + (hsv_1.s - hsv_2.s) ** 2 + (hsv_1.v - hsv_2.v) ** 2
__pyx_r = ((powf((__pyx_v_hsv_1.h - __pyx_v_hsv_2.h), 2.0) + powf((__pyx_v_hsv_1.s - __pyx_v_hsv_2.s), 2.0)) + powf((__pyx_v_hsv_1.v - __pyx_v_hsv_2.v), 2.0)); goto __pyx_L0;
0819:
0820:
0821: @cython.boundscheck(False)
0822: @cython.wraparound(False)
0823: @cython.nonecheck(False)
0824: @cython.cdivision(True)
0825: @cython.profile(False)
+0826: cdef float color_dist_hsl(hsl hsl_1, hsl hsl_2)nogil:
static float __pyx_f_12PygameShader_4misc_color_dist_hsl(struct hsl __pyx_v_hsl_1, struct hsl __pyx_v_hsl_2) { float __pyx_r; /* … */ /* function exit code */ __pyx_L0:; return __pyx_r; }
+0827: return (hsl_1.h - hsl_2.h) ** 2 + (hsl_1.s - hsl_2.s) ** 2 + (hsl_1.l - hsl_2.l) ** 2
__pyx_r = ((powf((__pyx_v_hsl_1.h - __pyx_v_hsl_2.h), 2.0) + powf((__pyx_v_hsl_1.s - __pyx_v_hsl_2.s), 2.0)) + powf((__pyx_v_hsl_1.l - __pyx_v_hsl_2.l), 2.0)); goto __pyx_L0;
0828:
0829:
0830: @cython.boundscheck(False)
0831: @cython.wraparound(False)
0832: @cython.nonecheck(False)
0833: @cython.cdivision(True)
0834: @cython.profile(False)
+0835: cdef rgb color_diff_hsv(
static struct rgb __pyx_f_12PygameShader_4misc_color_diff_hsv(struct rgb __pyx_v_color0, __Pyx_memviewslice __pyx_v_palette_, Py_ssize_t __pyx_v_p_length) { float *__pyx_v_hsv_values; int __pyx_v_i; struct rgb __pyx_v_color1; struct hsv __pyx_v_hsv1; struct hsv __pyx_v_hsv2; float __pyx_v_minimum; int __pyx_v_found; struct rgb __pyx_r; /* … */ /* function exit code */ __pyx_L0:; return __pyx_r; }
0836: rgb color0,
0837: float [:, :] palette_,
0838: Py_ssize_t p_length
0839: )nogil:
0840: """
0841: FIND THE CLOSEST MATCH FOR A GIVEN COLOR (color0) FROM
0842: A COLOR PALETTE (palette_).
0843:
0844: This method is using hsv space to find the closest color from the palette.
0845: Each colors from the palette are compare with the HSV value of the given color
0846: and the minimal difference between HSV values represent the closest match.
0847:
0848: :param color0 : struct RGB containing the pixel color
0849: :param palette_: numpy.ndarray shape (w, 3) type float32 containing the palette colors RGB
0850: range [0 ... 255]
0851: :param p_length: integer; size of the given palette or number of colors
0852: :return: struct RGB containing the new pixel values RGB
0853: """
0854:
0855: cdef:
0856:
+0857: float * hsv_values = <float *> malloc(p_length * sizeof(float))
__pyx_v_hsv_values = ((float *)malloc((__pyx_v_p_length * (sizeof(float)))));
0858: int i
0859: rgb color1
0860: hsv hsv1, hsv2
0861: float minimum
0862:
0863:
0864: # THE RGB TO HSV VALUE NEVER CHANGE INSIDE THE LOOP
+0865: hsv1 = struct_rgb_to_hsv(
__pyx_v_hsv1 = struct_rgb_to_hsv((((float)__pyx_v_color0.r) / ((float)255.0)), (((float)__pyx_v_color0.g) / ((float)255.0)), (((float)__pyx_v_color0.b) / ((float)255.0)));
0866: <float>color0.r / <float>255.0,
0867: <float>color0.g / <float>255.0,
0868: <float>color0.b / <float>255.0)
0869:
0870:
+0871: for i in range(p_length):
__pyx_t_1 = __pyx_v_p_length; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_i = __pyx_t_3;
0872:
+0873: hsv2 = struct_rgb_to_hsv(
__pyx_v_hsv2 = struct_rgb_to_hsv((((float)(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_4 * __pyx_v_palette_.strides[0]) ) + __pyx_t_5 * __pyx_v_palette_.strides[1]) )))) / ((float)255.0)), (((float)(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_6 * __pyx_v_palette_.strides[0]) ) + __pyx_t_7 * __pyx_v_palette_.strides[1]) )))) / ((float)255.0)), (((float)(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_8 * __pyx_v_palette_.strides[0]) ) + __pyx_t_9 * __pyx_v_palette_.strides[1]) )))) / ((float)255.0)));
+0874: <float>palette_[ i, 0 ]/ <float>255.0,
__pyx_t_4 = __pyx_v_i; __pyx_t_5 = 0;
+0875: <float>palette_[ i, 1 ]/ <float>255.0,
__pyx_t_6 = __pyx_v_i; __pyx_t_7 = 1;
+0876: <float>palette_[ i, 2 ]/ <float>255.0)
__pyx_t_8 = __pyx_v_i; __pyx_t_9 = 2;
0877:
+0878: hsv_values[i] = <float>color_dist_hsv(hsv1, hsv2)
(__pyx_v_hsv_values[__pyx_v_i]) = ((float)__pyx_f_12PygameShader_4misc_color_dist_hsv(__pyx_v_hsv1, __pyx_v_hsv2)); }
0879:
+0880: minimum = <float>minf(hsv_values, p_length)
__pyx_v_minimum = ((float)minf(__pyx_v_hsv_values, __pyx_v_p_length));
0881:
+0882: cdef bint found = False
__pyx_v_found = 0;
+0883: for i in range(p_length):
__pyx_t_1 = __pyx_v_p_length; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_i = __pyx_t_3;
+0884: if minimum == hsv_values[i]:
__pyx_t_10 = ((__pyx_v_minimum == (__pyx_v_hsv_values[__pyx_v_i])) != 0); if (__pyx_t_10) { /* … */ } } __pyx_L6_break:;
+0885: found = True
__pyx_v_found = 1;
+0886: break
goto __pyx_L6_break;
0887:
+0888: if found:
__pyx_t_10 = (__pyx_v_found != 0); if (__pyx_t_10) { /* … */ goto __pyx_L8; }
+0889: color1.r = palette_[ i, 0 ]
__pyx_t_9 = __pyx_v_i; __pyx_t_8 = 0; __pyx_v_color1.r = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_9 * __pyx_v_palette_.strides[0]) ) + __pyx_t_8 * __pyx_v_palette_.strides[1]) )));
+0890: color1.g = palette_[ i, 1 ]
__pyx_t_8 = __pyx_v_i; __pyx_t_9 = 1; __pyx_v_color1.g = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_8 * __pyx_v_palette_.strides[0]) ) + __pyx_t_9 * __pyx_v_palette_.strides[1]) )));
+0891: color1.b = palette_[ i, 2 ]
__pyx_t_9 = __pyx_v_i; __pyx_t_8 = 2; __pyx_v_color1.b = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_9 * __pyx_v_palette_.strides[0]) ) + __pyx_t_8 * __pyx_v_palette_.strides[1]) )));
0892: else:
+0893: color1.r = 0.0
/*else*/ { __pyx_v_color1.r = 0.0;
+0894: color1.g = 0.
__pyx_v_color1.g = 0.;
+0895: color1.b = 0.
__pyx_v_color1.b = 0.; } __pyx_L8:;
0896:
+0897: free(hsv_values)
free(__pyx_v_hsv_values);
0898:
+0899: return color1
__pyx_r = __pyx_v_color1; goto __pyx_L0;
0900:
0901:
0902:
0903: @cython.boundscheck(False)
0904: @cython.wraparound(False)
0905: @cython.nonecheck(False)
0906: @cython.cdivision(True)
0907: @cython.profile(False)
+0908: cdef rgb color_diff_hsl(
static struct rgb __pyx_f_12PygameShader_4misc_color_diff_hsl(struct rgb __pyx_v_color0, __Pyx_memviewslice __pyx_v_palette_, Py_ssize_t __pyx_v_p_length) { float *__pyx_v_hsl_values; int __pyx_v_i; struct rgb __pyx_v_color1; struct hsl __pyx_v_hsl1; struct hsl __pyx_v_hsl2; float __pyx_v_minimum; int __pyx_v_found; struct rgb __pyx_r; /* … */ /* function exit code */ __pyx_L0:; return __pyx_r; }
0909: rgb color0,
0910: float [:, :] palette_,
0911: Py_ssize_t p_length
0912: )nogil:
0913: """
0914:
0915: FIND THE CLOSEST MATCH FOR A GIVEN COLOR (color0) FROM
0916: A COLOR PALETTE (palette_).
0917:
0918: This method is using HSL color space to find the closest color from the palette.
0919: Each colors from the palette are compare with the HSL values of the given color
0920: and the minimal difference between HSL values represent the closest match.
0921:
0922: :param color0 : struct RGB containing the pixel color
0923: :param palette_: numpy.ndarray shape (w, 3) type float32 containing the palette colors RGB
0924: range [0 ... 255]
0925: :param p_length: integer; size of the given palette or number of colors
0926: :return: struct RGB containing the new pixel values RGB
0927: """
0928:
0929: cdef:
0930:
+0931: float * hsl_values = <float *> malloc(p_length * sizeof(float))
__pyx_v_hsl_values = ((float *)malloc((__pyx_v_p_length * (sizeof(float)))));
0932: int i
0933: rgb color1
0934: hsl hsl1, hsl2
0935: float minimum
0936:
0937:
0938: # THE RGB TO HSL VALUE NEVER CHANGE INSIDE THE LOOP
+0939: hsl1 = struct_rgb_to_hsl(
__pyx_v_hsl1 = struct_rgb_to_hsl((((float)__pyx_v_color0.r) / ((float)255.0)), (((float)__pyx_v_color0.g) / ((float)255.0)), (((float)__pyx_v_color0.b) / ((float)255.0)));
0940: <float>color0.r / <float>255.0,
0941: <float>color0.g / <float>255.0,
0942: <float>color0.b / <float>255.0)
0943:
+0944: for i in prange(p_length):
__pyx_t_1 = __pyx_v_p_length; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_3 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for lastprivate(__pyx_v_hsl2) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) #endif /* _OPENMP */ for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){ { __pyx_v_i = (int)(0 + 1 * __pyx_t_2);
0945:
+0946: hsl2 = struct_rgb_to_hsl(
__pyx_v_hsl2 = struct_rgb_to_hsl((((float)(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_4 * __pyx_v_palette_.strides[0]) ) + __pyx_t_5 * __pyx_v_palette_.strides[1]) )))) / ((float)255.0)), (((float)(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_6 * __pyx_v_palette_.strides[0]) ) + __pyx_t_7 * __pyx_v_palette_.strides[1]) )))) / ((float)255.0)), (((float)(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_8 * __pyx_v_palette_.strides[0]) ) + __pyx_t_9 * __pyx_v_palette_.strides[1]) )))) / ((float)255.0)));
+0947: <float>palette_[ i, 0 ]/ <float>255.0,
__pyx_t_4 = __pyx_v_i; __pyx_t_5 = 0;
+0948: <float>palette_[ i, 1 ]/ <float>255.0,
__pyx_t_6 = __pyx_v_i; __pyx_t_7 = 1;
+0949: <float>palette_[ i, 2 ]/ <float>255.0)
__pyx_t_8 = __pyx_v_i; __pyx_t_9 = 2;
0950:
+0951: hsl_values[i] = <float>color_dist_hsl(hsl1, hsl2)
(__pyx_v_hsl_values[__pyx_v_i]) = ((float)__pyx_f_12PygameShader_4misc_color_dist_hsl(__pyx_v_hsl1, __pyx_v_hsl2)); } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif
0952:
+0953: minimum = <float>minf(hsl_values, p_length)
__pyx_v_minimum = ((float)minf(__pyx_v_hsl_values, __pyx_v_p_length));
0954:
+0955: cdef bint found = False
__pyx_v_found = 0;
0956:
+0957: for i in range(p_length):
__pyx_t_3 = __pyx_v_p_length; __pyx_t_2 = __pyx_t_3; for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_2; __pyx_t_10+=1) { __pyx_v_i = __pyx_t_10;
+0958: if minimum == hsl_values[i]:
__pyx_t_11 = ((__pyx_v_minimum == (__pyx_v_hsl_values[__pyx_v_i])) != 0); if (__pyx_t_11) { /* … */ } } __pyx_L10_break:;
+0959: found = True
__pyx_v_found = 1;
+0960: break
goto __pyx_L10_break;
0961:
+0962: if found:
__pyx_t_11 = (__pyx_v_found != 0); if (__pyx_t_11) { /* … */ goto __pyx_L12; }
+0963: color1.r = palette_[ i, 0 ]
__pyx_t_9 = __pyx_v_i; __pyx_t_8 = 0; __pyx_v_color1.r = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_9 * __pyx_v_palette_.strides[0]) ) + __pyx_t_8 * __pyx_v_palette_.strides[1]) )));
+0964: color1.g = palette_[ i, 1 ]
__pyx_t_8 = __pyx_v_i; __pyx_t_9 = 1; __pyx_v_color1.g = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_8 * __pyx_v_palette_.strides[0]) ) + __pyx_t_9 * __pyx_v_palette_.strides[1]) )));
+0965: color1.b = palette_[ i, 2 ]
__pyx_t_9 = __pyx_v_i; __pyx_t_8 = 2; __pyx_v_color1.b = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_9 * __pyx_v_palette_.strides[0]) ) + __pyx_t_8 * __pyx_v_palette_.strides[1]) )));
0966: else:
+0967: color1.r = <float>0.0
/*else*/ { __pyx_v_color1.r = ((float)0.0);
+0968: color1.g = <float>0.0
__pyx_v_color1.g = ((float)0.0);
+0969: color1.b = <float>0.0
__pyx_v_color1.b = ((float)0.0); } __pyx_L12:;
0970:
+0971: free(hsl_values)
free(__pyx_v_hsl_values);
0972:
+0973: return color1
__pyx_r = __pyx_v_color1; goto __pyx_L0;
0974:
0975: @cython.boundscheck(False)
0976: @cython.wraparound(False)
0977: @cython.nonecheck(False)
0978: @cython.cdivision(True)
0979: @cython.profile(False)
+0980: cdef rgb close_color(
static struct rgb __pyx_f_12PygameShader_4misc_close_color(struct rgb __pyx_v_colors, __Pyx_memviewslice __pyx_v_palette_, Py_ssize_t __pyx_v_w) { int __pyx_v_i; float *__pyx_v_tmp_v; struct rgb __pyx_v_rgb_; float __pyx_v_v_min; int __pyx_v_s1; int __pyx_v_s2; struct hsv __pyx_v_color0_hsv; struct hsv __pyx_v_hsv1; struct hsv __pyx_v_hsv2; struct rgb __pyx_r; /* … */ /* function exit code */ __pyx_L0:; return __pyx_r; }
0981: rgb colors,
0982: float [:, :] palette_,
0983: Py_ssize_t w
0984: )nogil:
0985: """
0986: FIND THE NEAREST COLOR MATCHING A GIVEN COLOR
0987:
0988: Iterate over a 2d color palette filled with RGB values (array shape,
0989: w, 3) type float32. The palette is not normalised and contains values
0990: in range [0...255]
0991: During the iteration, the given color is compare with the palette values
0992: subtracting each components and summed up to be able to find the smallest
0993: value. The original color 'colors' will be replaced with a new color
0994: from the palette (new RGB components).
0995: This algorithm will work if the color palette contains unique RGB components
0996: For palettes with duplicate color, the algorithm will select the first color
0997: corresponding to the sum of the RGB difference between each components
0998:
0999: :param colors : struct RGB; float; Colors define with a struct type of data
1000: :param palette_: numpy.array; Palette containing the RGB color values range [0...255]
1001: :param w : integer; size of the palette
1002: :return : struct rgb containing the new RGB values close match from
1003: the given color
1004: """
1005:
1006: cdef:
1007: int i
+1008: float * tmp_v = <float *> malloc(w * sizeof(float))
__pyx_v_tmp_v = ((float *)malloc((__pyx_v_w * (sizeof(float)))));
1009: rgb rgb_
1010: float v_min,
1011:
1012: # SUM ALL RGB DIFFERENCES
+1013: for i in prange(w):
__pyx_t_1 = __pyx_v_w; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_3 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) #endif /* _OPENMP */ for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){ { __pyx_v_i = (int)(0 + 1 * __pyx_t_2);
+1014: tmp_v[ i ] = sqrt((
(__pyx_v_tmp_v[__pyx_v_i]) = sqrt(((powf((__pyx_v_colors.r - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_4 * __pyx_v_palette_.strides[0]) ) + __pyx_t_5 * __pyx_v_palette_.strides[1]) )))), 2.0) + powf((__pyx_v_colors.g - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_6 * __pyx_v_palette_.strides[0]) ) + __pyx_t_7 * __pyx_v_palette_.strides[1]) )))), 2.0)) + powf((__pyx_v_colors.b - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_8 * __pyx_v_palette_.strides[0]) ) + __pyx_t_9 * __pyx_v_palette_.strides[1]) )))), 2.0))); } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif
+1015: colors.r - palette_[ i, 0 ]) ** 2 + \
__pyx_t_4 = __pyx_v_i; __pyx_t_5 = 0;
+1016: (colors.g - palette_[ i, 1 ]) ** 2 + \
__pyx_t_6 = __pyx_v_i; __pyx_t_7 = 1;
+1017: (colors.b - palette_[ i, 2 ]) ** 2)
__pyx_t_8 = __pyx_v_i; __pyx_t_9 = 2;
1018: # THE MINIMUM VALUE IS THE CLOSEST RGB MATCH
+1019: v_min = <float> minf(tmp_v, w)
__pyx_v_v_min = ((float)minf(__pyx_v_tmp_v, __pyx_v_w));
1020:
1021:
+1022: cdef int s1 = 0
__pyx_v_s1 = 0;
+1023: cdef int s2 = 0
__pyx_v_s2 = 0;
1024:
1025: # CHECK FIRST SOLUTION
+1026: for i in range(w):
__pyx_t_3 = __pyx_v_w; __pyx_t_2 = __pyx_t_3; for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_2; __pyx_t_10+=1) { __pyx_v_i = __pyx_t_10;
+1027: if round_c(v_min) == round_c(tmp_v[i]):
__pyx_t_11 = ((round(__pyx_v_v_min) == round((__pyx_v_tmp_v[__pyx_v_i]))) != 0); if (__pyx_t_11) { /* … */ } } __pyx_L10_break:;
+1028: s1 = i
__pyx_v_s1 = __pyx_v_i;
+1029: break
goto __pyx_L10_break;
1030:
1031: # CHECK FOR COLORS WITH SAME DISTANCE
+1032: for i in range(w):
__pyx_t_3 = __pyx_v_w; __pyx_t_2 = __pyx_t_3; for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_2; __pyx_t_10+=1) { __pyx_v_i = __pyx_t_10;
+1033: if round_c(v_min) == round_c(tmp_v[i]):
__pyx_t_11 = ((round(__pyx_v_v_min) == round((__pyx_v_tmp_v[__pyx_v_i]))) != 0); if (__pyx_t_11) { /* … */ } }
+1034: if i != s1:
__pyx_t_11 = ((__pyx_v_i != __pyx_v_s1) != 0); if (__pyx_t_11) { /* … */ }
+1035: s2 = i
__pyx_v_s2 = __pyx_v_i;
1036:
1037: cdef:
1038: hsv color0_hsv
1039: hsv hsv1
1040: hsv hsv2
1041:
+1042: if s1!= 0 and s2 != 0:
__pyx_t_12 = ((__pyx_v_s1 != 0) != 0); if (__pyx_t_12) { } else { __pyx_t_11 = __pyx_t_12; goto __pyx_L17_bool_binop_done; } __pyx_t_12 = ((__pyx_v_s2 != 0) != 0); __pyx_t_11 = __pyx_t_12; __pyx_L17_bool_binop_done:; if (__pyx_t_11) { /* … */ goto __pyx_L16; }
+1043: color0_hsv = struct_rgb_to_hsv(
__pyx_v_color0_hsv = struct_rgb_to_hsv((__pyx_v_colors.r / ((float)255.0)), (__pyx_v_colors.g / ((float)255.0)), (__pyx_v_colors.b / ((float)255.0)));
1044: colors.r/<float>255.0,
1045: colors.g/<float>255.0,
1046: colors.b/<float>255.0)
+1047: hsv1 = struct_rgb_to_hsv(
__pyx_v_hsv1 = struct_rgb_to_hsv(((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_9 * __pyx_v_palette_.strides[0]) ) + __pyx_t_8 * __pyx_v_palette_.strides[1]) ))) / ((float)255.0)), ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_7 * __pyx_v_palette_.strides[0]) ) + __pyx_t_6 * __pyx_v_palette_.strides[1]) ))) / ((float)255.0)), ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_5 * __pyx_v_palette_.strides[0]) ) + __pyx_t_4 * __pyx_v_palette_.strides[1]) ))) / ((float)255.0)));
+1048: palette_[ s1, 0 ]/<float>255.0,
__pyx_t_9 = __pyx_v_s1; __pyx_t_8 = 0;
+1049: palette_[ s1, 0 ]/<float>255.0,
__pyx_t_7 = __pyx_v_s1; __pyx_t_6 = 0;
+1050: palette_[ s1, 0 ]/<float>255.0)
__pyx_t_5 = __pyx_v_s1; __pyx_t_4 = 0;
+1051: hsv2 = struct_rgb_to_hsv(
__pyx_v_hsv2 = struct_rgb_to_hsv(((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_4 * __pyx_v_palette_.strides[0]) ) + __pyx_t_5 * __pyx_v_palette_.strides[1]) ))) / ((float)255.0)), ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_6 * __pyx_v_palette_.strides[0]) ) + __pyx_t_7 * __pyx_v_palette_.strides[1]) ))) / ((float)255.0)), ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_8 * __pyx_v_palette_.strides[0]) ) + __pyx_t_9 * __pyx_v_palette_.strides[1]) ))) / ((float)255.0)));
+1052: palette_[ s2, 0 ] / <float> 255.0,
__pyx_t_4 = __pyx_v_s2; __pyx_t_5 = 0;
+1053: palette_[ s2, 0 ] / <float> 255.0,
__pyx_t_6 = __pyx_v_s2; __pyx_t_7 = 0;
+1054: palette_[ s2, 0 ] / <float> 255.0)
__pyx_t_8 = __pyx_v_s2; __pyx_t_9 = 0;
+1055: if (color0_hsv.h - hsv1.h) ** 2 < (color0_hsv.h - hsv2.h) ** 2:
__pyx_t_11 = ((powf((__pyx_v_color0_hsv.h - __pyx_v_hsv1.h), 2.0) < powf((__pyx_v_color0_hsv.h - __pyx_v_hsv2.h), 2.0)) != 0); if (__pyx_t_11) { /* … */ goto __pyx_L19; }
+1056: i = s1
__pyx_v_i = __pyx_v_s1;
1057: else:
+1058: i = s2
/*else*/ { __pyx_v_i = __pyx_v_s2; } __pyx_L19:;
1059: else:
+1060: i = s1
/*else*/ { __pyx_v_i = __pyx_v_s1; } __pyx_L16:;
1061:
+1062: rgb_.r = palette_[ i, 0 ]
__pyx_t_9 = __pyx_v_i; __pyx_t_8 = 0; __pyx_v_rgb_.r = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_9 * __pyx_v_palette_.strides[0]) ) + __pyx_t_8 * __pyx_v_palette_.strides[1]) )));
+1063: rgb_.g = palette_[ i, 1 ]
__pyx_t_8 = __pyx_v_i; __pyx_t_9 = 1; __pyx_v_rgb_.g = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_8 * __pyx_v_palette_.strides[0]) ) + __pyx_t_9 * __pyx_v_palette_.strides[1]) )));
+1064: rgb_.b = palette_[ i, 2 ]
__pyx_t_9 = __pyx_v_i; __pyx_t_8 = 2; __pyx_v_rgb_.b = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_9 * __pyx_v_palette_.strides[0]) ) + __pyx_t_8 * __pyx_v_palette_.strides[1]) )));
1065:
+1066: return rgb_
__pyx_r = __pyx_v_rgb_; goto __pyx_L0;
1067:
1068:
1069:
1070:
1071: @cython.boundscheck(False)
1072: @cython.wraparound(False)
1073: @cython.nonecheck(False)
1074: @cython.cdivision(True)
1075: @cython.profile(False)
+1076: cdef rgb use_palette(
static struct rgb __pyx_f_12PygameShader_4misc_use_palette(struct rgb __pyx_v_colors, __Pyx_memviewslice __pyx_v_palette_, Py_ssize_t __pyx_v_w) { int __pyx_v_i; int __pyx_v_j; int __pyx_v_k; float *__pyx_v_v_red; float *__pyx_v_v_green; float *__pyx_v_v_blue; float __pyx_v_r_min; float __pyx_v_g_min; float __pyx_v_b_min; struct rgb __pyx_v_rgb_; struct rgb __pyx_r; /* … */ /* function exit code */ __pyx_L0:; return __pyx_r; }
1077: rgb colors,
1078: float [:, :] palette_,
1079: Py_ssize_t w
1080: )nogil:
1081: """
1082: PICKED RGB VALUES FROM A GIVEN PALETTE TO MATCH A GIVEN COLOR
1083: ** PAINTING MODE **
1084:
1085: Picked r, g, b values from a palette by going through every
1086: elements and picking the closest match for each channels.
1087: The final color will be not necessary match a color from the palette
1088: but will have instead, a palette values from each channels.
1089:
1090:
1091: :param colors : struct; Contains RGB values integer values in range [0..255]
1092: :param palette_: numpy.array shape (w, 3) type float32 containing RGB colors values
1093: :param w : Size of the palette or number of colors available
1094: :return : Return a color RGB containing colors from the palette.
1095: """
1096:
1097: cdef:
1098: int i, j, k
+1099: float * v_red = <float *> malloc(w * sizeof(float))
__pyx_v_v_red = ((float *)malloc((__pyx_v_w * (sizeof(float)))));
+1100: float * v_green = <float *> malloc(w * sizeof(float))
__pyx_v_v_green = ((float *)malloc((__pyx_v_w * (sizeof(float)))));
+1101: float * v_blue = <float *> malloc(w * sizeof(float))
__pyx_v_v_blue = ((float *)malloc((__pyx_v_w * (sizeof(float)))));
1102: float r_min, g_min, b_min
1103: rgb rgb_
1104:
1105: # GO THROUGH EACH CHANNELS OF THE PALETTE AND
1106: # SUBTRACT VALUES.
+1107: for i in prange(w):
__pyx_t_1 = __pyx_v_w; if ((1 == 0)) abort(); { #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) (x) #define unlikely(x) (x) #endif __pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1; if (__pyx_t_3 > 0) { #ifdef _OPENMP #pragma omp parallel #endif /* _OPENMP */ { #ifdef _OPENMP #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) #endif /* _OPENMP */ for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){ { __pyx_v_i = (int)(0 + 1 * __pyx_t_2);
+1108: v_red[i] = abs_c(colors.r - palette_[i, 0] )
__pyx_t_4 = __pyx_v_i; __pyx_t_5 = 0; (__pyx_v_v_red[__pyx_v_i]) = fabs((__pyx_v_colors.r - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_4 * __pyx_v_palette_.strides[0]) ) + __pyx_t_5 * __pyx_v_palette_.strides[1]) )))));
+1109: v_green[i] = abs_c(colors.g - palette_[i, 1] )
__pyx_t_5 = __pyx_v_i; __pyx_t_4 = 1; (__pyx_v_v_green[__pyx_v_i]) = fabs((__pyx_v_colors.g - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_5 * __pyx_v_palette_.strides[0]) ) + __pyx_t_4 * __pyx_v_palette_.strides[1]) )))));
+1110: v_blue[i] = abs_c(colors.b - palette_[i, 2] )
__pyx_t_4 = __pyx_v_i; __pyx_t_5 = 2; (__pyx_v_v_blue[__pyx_v_i]) = fabs((__pyx_v_colors.b - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_4 * __pyx_v_palette_.strides[0]) ) + __pyx_t_5 * __pyx_v_palette_.strides[1]) ))))); } } } } } #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif
1111:
1112: # THE FINAL R, G, B VALUES WILL BE A PICKED
1113: # COLOR FROM EACH CHANNELS CLOSE TO THE ORIGINAL PIXEL
1114: # VALUE
+1115: r_min = <float> minf(v_red, w)
__pyx_v_r_min = ((float)minf(__pyx_v_v_red, __pyx_v_w));
+1116: g_min = <float> minf(v_green, w)
__pyx_v_g_min = ((float)minf(__pyx_v_v_green, __pyx_v_w));
+1117: b_min = <float> minf(v_blue, w)
__pyx_v_b_min = ((float)minf(__pyx_v_v_blue, __pyx_v_w));
1118:
1119: # FIND A RED COLOR FROM THE PALETTE
1120: # CLOSE TO THE ORIGINAL RED VALUE
+1121: for i in range(w):
__pyx_t_3 = __pyx_v_w; __pyx_t_2 = __pyx_t_3; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_2; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6;
+1122: if v_red[i] == r_min:
__pyx_t_7 = (((__pyx_v_v_red[__pyx_v_i]) == __pyx_v_r_min) != 0); if (__pyx_t_7) { /* … */ } } __pyx_L10_break:;
+1123: break
goto __pyx_L10_break;
1124:
1125: # FIND A GREEN COLOR FROM THE PALETTE
1126: # CLOSE TO THE ORIGINAL GREEN VALUE
+1127: for j in range(w):
__pyx_t_3 = __pyx_v_w; __pyx_t_2 = __pyx_t_3; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_2; __pyx_t_6+=1) { __pyx_v_j = __pyx_t_6;
+1128: if v_green[j] == g_min:
__pyx_t_7 = (((__pyx_v_v_green[__pyx_v_j]) == __pyx_v_g_min) != 0); if (__pyx_t_7) { /* … */ } } __pyx_L13_break:;
+1129: break
goto __pyx_L13_break;
1130:
1131: # FIND A BLUE COLOR FROM THE PALETTE
1132: # CLOSE TO THE ORIGINAL BLUE VALUE
+1133: for k in range(w):
__pyx_t_3 = __pyx_v_w; __pyx_t_2 = __pyx_t_3; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_2; __pyx_t_6+=1) { __pyx_v_k = __pyx_t_6;
+1134: if v_blue[k] == b_min:
__pyx_t_7 = (((__pyx_v_v_blue[__pyx_v_k]) == __pyx_v_b_min) != 0); if (__pyx_t_7) { /* … */ } } __pyx_L16_break:;
+1135: break
goto __pyx_L16_break;
1136:
+1137: rgb_.r = palette_[i, 0]
__pyx_t_5 = __pyx_v_i; __pyx_t_4 = 0; __pyx_v_rgb_.r = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_5 * __pyx_v_palette_.strides[0]) ) + __pyx_t_4 * __pyx_v_palette_.strides[1]) )));
+1138: rgb_.g = palette_[j, 1]
__pyx_t_4 = __pyx_v_j; __pyx_t_5 = 1; __pyx_v_rgb_.g = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_4 * __pyx_v_palette_.strides[0]) ) + __pyx_t_5 * __pyx_v_palette_.strides[1]) )));
+1139: rgb_.b = palette_[k, 2]
__pyx_t_5 = __pyx_v_k; __pyx_t_4 = 2; __pyx_v_rgb_.b = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_palette_.data + __pyx_t_5 * __pyx_v_palette_.strides[0]) ) + __pyx_t_4 * __pyx_v_palette_.strides[1]) )));
1140:
+1141: free(v_red)
free(__pyx_v_v_red);
+1142: free(v_green)
free(__pyx_v_v_green);
+1143: free(v_blue)
free(__pyx_v_v_blue);
1144:
+1145: return rgb_
__pyx_r = __pyx_v_rgb_; goto __pyx_L0;
1146: