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: