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: shader.cpp

+00001: # cython: binding=False, boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, profile=False
  __pyx_t_30 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_30) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
 00002: # cython: optimize.use_switch=True
 00003: 
 00004: # encoding: utf-8
 00005: 
 00006: """
 00007:                  GNU GENERAL PUBLIC LICENSE
 00008:                        Version 3, 29 June 2007
 00009: 
 00010:  Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 00011:  Everyone is permitted to copy and distribute verbatim copies
 00012:  of this license document, but changing it is not allowed.
 00013: 
 00014: Copyright Yoann Berenguer
 00015: """
 00016: 
 00017: 
 00018: """
 00019: Version 1.0.9
 00020: Dithering bug correction (Multi-thread causing image demarcation) + correction of rounding issue
 00021: Replaced dithering_int with dithering_inplace
 00022: Added blocksize for the pixelation algorithm
 00023: 
 00024: Added palettes
 00025: # + AAP64
 00026: # + APOLLO
 00027: # + FUNKYFUTURE
 00028: # + VINIK24
 00029: # + TWILIOQUEST76
 00030: # + IRIDESCENTCRYSTAL
 00031: # + AAPSPLENDOR128
 00032: # + LOSPEC500
 00033: # + FAMICUBE
 00034: 
 00035: renamed YIQ CPU methods
 00036: cpdef void Luma_GreyScale(object surface_)
 00037: cpdef void Luma_GreyScale_c(unsigned char [:, :, :] rgb_array)
 00038: 
 00039: cpdef void RGB_TO_YIQ_Q0_inplace(object surface_)
 00040: cpdef void RGB_TO_YIQ_Q0_inplace_c(unsigned char [:, :, :] rgb_array)
 00041: 
 00042: cpdef void RGB_TO_YIQ_I0_inplace(object surface_)
 00043: cpdef void RGB_TO_YIQ_I0_inplace_c(unsigned char [:, :, :] rgb_array)
 00044: 
 00045: cpdef void RGB_TO_YIQ_Y0_inplace(object surface_)
 00046: cpdef void RGB_TO_YIQ_Y0_inplace_c(unsigned char [:, :, :] rgb_array)
 00047: 
 00048: tunnel_modeling24
 00049: tunnel_render24
 00050: 
 00051: # Fixed bugs in
 00052:     shader_median_filter24_inplace_c(arr, median_kernel_)
 00053:     shader_median_filter24_inplace_heapsort_c(arr, median_kernel_)
 00054:     shader_median_grayscale_filter24_inplace_c(arr, median_kernel_)
 00055: fixed bug in Heapify
 00056: 
 00057: 
 00058: """
 00059: 
+00060: __VERSION__ = "1.0.9"
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VERSION, __pyx_kp_s_1_0_9) < 0) __PYX_ERR(1, 60, __pyx_L1_error)
 00061: 
+00062: import warnings
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_warnings, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_warnings, __pyx_t_1) < 0) __PYX_ERR(1, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 00063: 
+00064: warnings.filterwarnings("ignore", category=FutureWarning)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_warnings); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_filterwarnings); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_category, __pyx_builtin_FutureWarning) < 0) __PYX_ERR(1, 64, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__73, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __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_tuple__73 = PyTuple_Pack(1, __pyx_n_s_ignore); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__73);
  __Pyx_GIVEREF(__pyx_tuple__73);
+00065: warnings.filterwarnings("ignore", category=RuntimeWarning)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_warnings); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_filterwarnings); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_category, __pyx_builtin_RuntimeWarning) < 0) __PYX_ERR(1, 65, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__73, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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;
+00066: warnings.filterwarnings("ignore", category=ImportWarning)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_warnings); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_filterwarnings); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_category, __pyx_builtin_ImportWarning) < 0) __PYX_ERR(1, 66, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__73, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 00067: 
+00068: try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L7_try_end;
    __pyx_L2_error:;
    __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;
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L7_try_end:;
  }
+00069:     import numpy
      __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 69, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_numpy, __pyx_t_1) < 0) __PYX_ERR(1, 69, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00070:     from numpy import empty, uint8, int16, float32, asarray, linspace, \
      __pyx_t_1 = PyList_New(12); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_n_s_empty);
      __Pyx_GIVEREF(__pyx_n_s_empty);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_empty);
      __Pyx_INCREF(__pyx_n_s_uint8);
      __Pyx_GIVEREF(__pyx_n_s_uint8);
      PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_uint8);
      __Pyx_INCREF(__pyx_n_s_int16);
      __Pyx_GIVEREF(__pyx_n_s_int16);
      PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_int16);
      __Pyx_INCREF(__pyx_n_s_float32);
      __Pyx_GIVEREF(__pyx_n_s_float32);
      PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_float32);
      __Pyx_INCREF(__pyx_n_s_asarray);
      __Pyx_GIVEREF(__pyx_n_s_asarray);
      PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_asarray);
      __Pyx_INCREF(__pyx_n_s_linspace);
      __Pyx_GIVEREF(__pyx_n_s_linspace);
      PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_s_linspace);
      __Pyx_INCREF(__pyx_n_s_ascontiguousarray);
      __Pyx_GIVEREF(__pyx_n_s_ascontiguousarray);
      PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_s_ascontiguousarray);
      __Pyx_INCREF(__pyx_n_s_zeros);
      __Pyx_GIVEREF(__pyx_n_s_zeros);
      PyList_SET_ITEM(__pyx_t_1, 7, __pyx_n_s_zeros);
      __Pyx_INCREF(__pyx_n_s_uint16);
      __Pyx_GIVEREF(__pyx_n_s_uint16);
      PyList_SET_ITEM(__pyx_t_1, 8, __pyx_n_s_uint16);
      __Pyx_INCREF(__pyx_n_s_uint32);
      __Pyx_GIVEREF(__pyx_n_s_uint32);
      PyList_SET_ITEM(__pyx_t_1, 9, __pyx_n_s_uint32);
      __Pyx_INCREF(__pyx_n_s_int32);
      __Pyx_GIVEREF(__pyx_n_s_int32);
      PyList_SET_ITEM(__pyx_t_1, 10, __pyx_n_s_int32);
      __Pyx_INCREF(__pyx_n_s_int8);
      __Pyx_GIVEREF(__pyx_n_s_int8);
      PyList_SET_ITEM(__pyx_t_1, 11, __pyx_n_s_int8);
      __pyx_t_2 = __Pyx_Import(__pyx_n_s_numpy, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_empty, __pyx_t_1) < 0) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_uint8, __pyx_t_1) < 0) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_int16, __pyx_t_1) < 0) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_float32, __pyx_t_1) < 0) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_asarray, __pyx_t_1) < 0) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_linspace); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_linspace, __pyx_t_1) < 0) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_ascontiguousarray, __pyx_t_1) < 0) __PYX_ERR(1, 71, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_zeros, __pyx_t_1) < 0) __PYX_ERR(1, 71, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_uint16, __pyx_t_1) < 0) __PYX_ERR(1, 71, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_uint32); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_uint32, __pyx_t_1) < 0) __PYX_ERR(1, 71, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_int32, __pyx_t_1) < 0) __PYX_ERR(1, 71, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_int8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_int8, __pyx_t_1) < 0) __PYX_ERR(1, 71, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 00071:         ascontiguousarray, zeros, uint16, uint32, int32, int8
+00072: except ImportError:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(1, 72, __pyx_L4_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_3);
+00073:     raise ImportError("\n<numpy> library is missing on your system."
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__74, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 73, __pyx_L4_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(1, 73, __pyx_L4_except_error)
    }
    goto __pyx_L4_except_error;
    __pyx_L4_except_error:;
/* … */
  __pyx_tuple__74 = PyTuple_Pack(1, __pyx_kp_s_numpy_library_is_missing_on_you); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(1, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__74);
  __Pyx_GIVEREF(__pyx_tuple__74);
 00074:           "\nTry: \n   C:\\pip install numpy on a window command prompt.")
 00075: 
 00076: cimport numpy as np
 00077: 
+00078: try:
  {
    /*try:*/ {
/* … */
    }
  }
 00079:     cimport cython
 00080:     from cython.parallel cimport prange
 00081: 
 00082: except ImportError:
 00083:     raise ImportError("\n<cython> library is missing on your system."
 00084:           "\nTry: \n   C:\\pip install cython on a window command prompt.")
 00085: 
 00086: # PYGAME IS REQUIRED
+00087: try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L21_try_end;
    __pyx_L16_error:;
    __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;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L21_try_end:;
  }
+00088:     import pygame
      __pyx_t_3 = __Pyx_Import(__pyx_n_s_pygame, 0, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 88, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_pygame, __pyx_t_3) < 0) __PYX_ERR(1, 88, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00089:     from pygame import Color, Surface, SRCALPHA, RLEACCEL, BufferProxy, HWACCEL, HWSURFACE, \
      __pyx_t_3 = PyList_New(13); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_n_s_Color);
      __Pyx_GIVEREF(__pyx_n_s_Color);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Color);
      __Pyx_INCREF(__pyx_n_s_Surface);
      __Pyx_GIVEREF(__pyx_n_s_Surface);
      PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Surface);
      __Pyx_INCREF(__pyx_n_s_SRCALPHA);
      __Pyx_GIVEREF(__pyx_n_s_SRCALPHA);
      PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_SRCALPHA);
      __Pyx_INCREF(__pyx_n_s_RLEACCEL);
      __Pyx_GIVEREF(__pyx_n_s_RLEACCEL);
      PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_RLEACCEL);
      __Pyx_INCREF(__pyx_n_s_BufferProxy);
      __Pyx_GIVEREF(__pyx_n_s_BufferProxy);
      PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_s_BufferProxy);
      __Pyx_INCREF(__pyx_n_s_HWACCEL);
      __Pyx_GIVEREF(__pyx_n_s_HWACCEL);
      PyList_SET_ITEM(__pyx_t_3, 5, __pyx_n_s_HWACCEL);
      __Pyx_INCREF(__pyx_n_s_HWSURFACE);
      __Pyx_GIVEREF(__pyx_n_s_HWSURFACE);
      PyList_SET_ITEM(__pyx_t_3, 6, __pyx_n_s_HWSURFACE);
      __Pyx_INCREF(__pyx_n_s_QUIT);
      __Pyx_GIVEREF(__pyx_n_s_QUIT);
      PyList_SET_ITEM(__pyx_t_3, 7, __pyx_n_s_QUIT);
      __Pyx_INCREF(__pyx_n_s_K_SPACE);
      __Pyx_GIVEREF(__pyx_n_s_K_SPACE);
      PyList_SET_ITEM(__pyx_t_3, 8, __pyx_n_s_K_SPACE);
      __Pyx_INCREF(__pyx_n_s_BLEND_RGB_ADD);
      __Pyx_GIVEREF(__pyx_n_s_BLEND_RGB_ADD);
      PyList_SET_ITEM(__pyx_t_3, 9, __pyx_n_s_BLEND_RGB_ADD);
      __Pyx_INCREF(__pyx_n_s_Rect);
      __Pyx_GIVEREF(__pyx_n_s_Rect);
      PyList_SET_ITEM(__pyx_t_3, 10, __pyx_n_s_Rect);
      __Pyx_INCREF(__pyx_n_s_BLEND_RGB_MAX);
      __Pyx_GIVEREF(__pyx_n_s_BLEND_RGB_MAX);
      PyList_SET_ITEM(__pyx_t_3, 11, __pyx_n_s_BLEND_RGB_MAX);
      __Pyx_INCREF(__pyx_n_s_BLEND_RGB_MIN);
      __Pyx_GIVEREF(__pyx_n_s_BLEND_RGB_MIN);
      PyList_SET_ITEM(__pyx_t_3, 12, __pyx_n_s_BLEND_RGB_MIN);
      __pyx_t_1 = __Pyx_Import(__pyx_n_s_pygame, __pyx_t_3, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Color); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_Color, __pyx_t_3) < 0) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_Surface, __pyx_t_3) < 0) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_SRCALPHA, __pyx_t_3) < 0) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_RLEACCEL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_RLEACCEL, __pyx_t_3) < 0) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BufferProxy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_BufferProxy, __pyx_t_3) < 0) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_HWACCEL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_HWACCEL, __pyx_t_3) < 0) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_HWSURFACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_HWSURFACE, __pyx_t_3) < 0) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_QUIT); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_QUIT, __pyx_t_3) < 0) __PYX_ERR(1, 90, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_K_SPACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_K_SPACE, __pyx_t_3) < 0) __PYX_ERR(1, 90, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_BLEND_RGB_ADD, __pyx_t_3) < 0) __PYX_ERR(1, 90, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Rect); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_Rect, __pyx_t_3) < 0) __PYX_ERR(1, 90, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BLEND_RGB_MAX); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_BLEND_RGB_MAX, __pyx_t_3) < 0) __PYX_ERR(1, 90, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BLEND_RGB_MIN); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 89, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_BLEND_RGB_MIN, __pyx_t_3) < 0) __PYX_ERR(1, 90, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 00090:     QUIT, K_SPACE, BLEND_RGB_ADD, Rect, BLEND_RGB_MAX, BLEND_RGB_MIN
+00091:     from pygame.surfarray import pixels3d, array_alpha, pixels_alpha, array3d, \
      __pyx_t_1 = PyList_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_n_s_pixels3d);
      __Pyx_GIVEREF(__pyx_n_s_pixels3d);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_pixels3d);
      __Pyx_INCREF(__pyx_n_s_array_alpha);
      __Pyx_GIVEREF(__pyx_n_s_array_alpha);
      PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_array_alpha);
      __Pyx_INCREF(__pyx_n_s_pixels_alpha);
      __Pyx_GIVEREF(__pyx_n_s_pixels_alpha);
      PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_pixels_alpha);
      __Pyx_INCREF(__pyx_n_s_array3d);
      __Pyx_GIVEREF(__pyx_n_s_array3d);
      PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_array3d);
      __Pyx_INCREF(__pyx_n_s_make_surface);
      __Pyx_GIVEREF(__pyx_n_s_make_surface);
      PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_make_surface);
      __Pyx_INCREF(__pyx_n_s_blit_array);
      __Pyx_GIVEREF(__pyx_n_s_blit_array);
      PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_s_blit_array);
      __Pyx_INCREF(__pyx_n_s_pixels_red);
      __Pyx_GIVEREF(__pyx_n_s_pixels_red);
      PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_s_pixels_red);
      __Pyx_INCREF(__pyx_n_s_pixels_green);
      __Pyx_GIVEREF(__pyx_n_s_pixels_green);
      PyList_SET_ITEM(__pyx_t_1, 7, __pyx_n_s_pixels_green);
      __Pyx_INCREF(__pyx_n_s_pixels_blue);
      __Pyx_GIVEREF(__pyx_n_s_pixels_blue);
      PyList_SET_ITEM(__pyx_t_1, 8, __pyx_n_s_pixels_blue);
      __pyx_t_3 = __Pyx_Import(__pyx_n_s_pygame_surfarray, __pyx_t_1, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_pixels3d, __pyx_t_1) < 0) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_array_alpha); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_array_alpha, __pyx_t_1) < 0) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_pixels_alpha); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_pixels_alpha, __pyx_t_1) < 0) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_array3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_array3d, __pyx_t_1) < 0) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_surface, __pyx_t_1) < 0) __PYX_ERR(1, 92, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_blit_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_blit_array, __pyx_t_1) < 0) __PYX_ERR(1, 92, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_pixels_red); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_pixels_red, __pyx_t_1) < 0) __PYX_ERR(1, 92, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_pixels_green); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_pixels_green, __pyx_t_1) < 0) __PYX_ERR(1, 93, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_pixels_blue); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 91, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_pixels_blue, __pyx_t_1) < 0) __PYX_ERR(1, 93, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 00092:         make_surface, blit_array, pixels_red, \
 00093:     pixels_green, pixels_blue
+00094:     from pygame.image import frombuffer, fromstring, tostring
      __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 94, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_n_s_frombuffer);
      __Pyx_GIVEREF(__pyx_n_s_frombuffer);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_frombuffer);
      __Pyx_INCREF(__pyx_n_s_fromstring);
      __Pyx_GIVEREF(__pyx_n_s_fromstring);
      PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_fromstring);
      __Pyx_INCREF(__pyx_n_s_tostring);
      __Pyx_GIVEREF(__pyx_n_s_tostring);
      PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_tostring);
      __pyx_t_1 = __Pyx_Import(__pyx_n_s_pygame_image, __pyx_t_3, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 94, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 94, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_frombuffer, __pyx_t_3) < 0) __PYX_ERR(1, 94, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 94, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_fromstring, __pyx_t_3) < 0) __PYX_ERR(1, 94, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_tostring); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 94, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_tostring, __pyx_t_3) < 0) __PYX_ERR(1, 94, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00095:     from pygame.math import Vector2
      __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 95, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_n_s_Vector2);
      __Pyx_GIVEREF(__pyx_n_s_Vector2);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Vector2);
      __pyx_t_3 = __Pyx_Import(__pyx_n_s_pygame_math, __pyx_t_1, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 95, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Vector2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 95, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_Vector2, __pyx_t_1) < 0) __PYX_ERR(1, 95, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00096:     from pygame import _freetype
      __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 96, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_n_s_freetype);
      __Pyx_GIVEREF(__pyx_n_s_freetype);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_freetype);
      __pyx_t_1 = __Pyx_Import(__pyx_n_s_pygame, __pyx_t_3, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 96, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_freetype); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 96, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_freetype, __pyx_t_3) < 0) __PYX_ERR(1, 96, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00097:     from pygame._freetype import STYLE_STRONG, STYLE_NORMAL
      __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 97, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_n_s_STYLE_STRONG);
      __Pyx_GIVEREF(__pyx_n_s_STYLE_STRONG);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_STYLE_STRONG);
      __Pyx_INCREF(__pyx_n_s_STYLE_NORMAL);
      __Pyx_GIVEREF(__pyx_n_s_STYLE_NORMAL);
      PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_STYLE_NORMAL);
      __pyx_t_3 = __Pyx_Import(__pyx_n_s_pygame__freetype, __pyx_t_1, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 97, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_STYLE_STRONG); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 97, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_STYLE_STRONG, __pyx_t_1) < 0) __PYX_ERR(1, 97, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_STYLE_NORMAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 97, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_STYLE_NORMAL, __pyx_t_1) < 0) __PYX_ERR(1, 97, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00098:     from pygame.transform import scale, smoothscale, rotate, scale2x
      __pyx_t_3 = PyList_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_n_s_scale);
      __Pyx_GIVEREF(__pyx_n_s_scale);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_scale);
      __Pyx_INCREF(__pyx_n_s_smoothscale);
      __Pyx_GIVEREF(__pyx_n_s_smoothscale);
      PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_smoothscale);
      __Pyx_INCREF(__pyx_n_s_rotate);
      __Pyx_GIVEREF(__pyx_n_s_rotate);
      PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_rotate);
      __Pyx_INCREF(__pyx_n_s_scale2x);
      __Pyx_GIVEREF(__pyx_n_s_scale2x);
      PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_scale2x);
      __pyx_t_1 = __Pyx_Import(__pyx_n_s_pygame_transform, __pyx_t_3, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_scale); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_scale, __pyx_t_3) < 0) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_smoothscale, __pyx_t_3) < 0) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_rotate); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotate, __pyx_t_3) < 0) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_scale2x); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_scale2x, __pyx_t_3) < 0) __PYX_ERR(1, 98, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00099:     from pygame.pixelcopy import array_to_surface
      __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 99, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_n_s_array_to_surface);
      __Pyx_GIVEREF(__pyx_n_s_array_to_surface);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_array_to_surface);
      __pyx_t_3 = __Pyx_Import(__pyx_n_s_pygame_pixelcopy, __pyx_t_1, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 99, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_array_to_surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 99, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_array_to_surface, __pyx_t_1) < 0) __PYX_ERR(1, 99, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 00100: 
+00101: except ImportError:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(1, 101, __pyx_L18_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
+00102:     raise ImportError("\n<Pygame> library is missing on your system."
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__75, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 102, __pyx_L18_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(1, 102, __pyx_L18_except_error)
    }
    goto __pyx_L18_except_error;
    __pyx_L18_except_error:;
/* … */
  __pyx_tuple__75 = PyTuple_Pack(1, __pyx_kp_s_Pygame_library_is_missing_on_yo); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(1, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__75);
  __Pyx_GIVEREF(__pyx_tuple__75);
 00103:           "\nTry: \n   C:\\pip install pygame on a window command prompt.")
 00104: 
+00105: try:
  {
    /*try:*/ {
/* … */
    }
  }
 00106:     cimport cython
 00107:     from cython.parallel cimport prange
 00108:     from cpython cimport PyObject_CallFunctionObjArgs, PyObject, \
 00109:         PyList_SetSlice, PyObject_HasAttr, PyObject_IsInstance, \
 00110:         PyObject_CallMethod, PyObject_CallObject
 00111:     from cpython.dict cimport PyDict_DelItem, PyDict_Clear, PyDict_GetItem, PyDict_SetItem, \
 00112:         PyDict_Values, PyDict_Keys, PyDict_Items
 00113:     from cpython.list cimport PyList_Append, PyList_GetItem, PyList_Size, PyList_SetItem
 00114:     from cpython.object cimport PyObject_SetAttr
 00115: 
 00116: except ImportError:
 00117:     raise ImportError("\n<cython> library is missing on your system."
 00118:           "\nTry: \n   C:\\pip install cython on a window command prompt.")
 00119: 
+00120: from PygameShader.gaussianBlur5x5 import canny_blur5x5_surface24_c
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_canny_blur5x5_surface24_c);
  __Pyx_GIVEREF(__pyx_n_s_canny_blur5x5_surface24_c);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_canny_blur5x5_surface24_c);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_PygameShader_gaussianBlur5x5, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_canny_blur5x5_surface24_c); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_canny_blur5x5_surface24_c, __pyx_t_2) < 0) __PYX_ERR(1, 120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 00121: from PygameShader.misc cimport color_diff_hsv, color_diff_hsl, close_color
 00122: 
 00123: cimport numpy as np
 00124: 
 00125: from libc.stdlib cimport rand, malloc
 00126: from libc.math cimport sqrt, atan2, sin, cos, nearbyint, exp, pow, floor
 00127: from libc.stdlib cimport malloc, free
 00128: from libc.math cimport round as round_c, fmin, fmax
 00129: 
 00130: from libc.stdio cimport printf
 00131: 
+00132: cdef float M_PI = 3.14159265358979323846
  __pyx_v_12PygameShader_6shader_M_PI = 3.14159265358979323846;
+00133: cdef float M_PI2 =3.14159265358979323846/2.0
  __pyx_v_12PygameShader_6shader_M_PI2 = (3.14159265358979323846 / 2.0);
+00134: cdef float M_2PI =2 * 3.14159265358979323846
  __pyx_v_12PygameShader_6shader_M_2PI = (2.0 * 3.14159265358979323846);
 00135: 
+00136: cdef float RAD_TO_DEG=<float>(180.0/M_PI)
  __pyx_v_12PygameShader_6shader_RAD_TO_DEG = ((float)(180.0 / __pyx_v_12PygameShader_6shader_M_PI));
+00137: cdef float DEG_TO_RAD=<float>(M_PI/180.0)
  __pyx_v_12PygameShader_6shader_DEG_TO_RAD = ((float)(__pyx_v_12PygameShader_6shader_M_PI / 180.0));
 00138: 
+00139: cdef float C1 = <float>7.0/<float>16.0
  __pyx_v_12PygameShader_6shader_C1 = (((float)7.0) / ((float)16.0));
+00140: cdef float C2 = <float>3.0/<float>16.0
  __pyx_v_12PygameShader_6shader_C2 = (((float)3.0) / ((float)16.0));
+00141: cdef float C3 = <float>5.0/<float>16.0
  __pyx_v_12PygameShader_6shader_C3 = (((float)5.0) / ((float)16.0));
+00142: cdef float C4 = <float>1.0/<float>16.0
  __pyx_v_12PygameShader_6shader_C4 = (((float)1.0) / ((float)16.0));
 00143: 
 00144: 
+00145: cdef int THREADS = 8
  __pyx_v_12PygameShader_6shader_THREADS = 8;
 00146: 
 00147: DEF HALF         = 1.0/2.0
 00148: DEF ONE_THIRD    = 1.0/3.0
 00149: DEF ONE_FOURTH   = 1.0/4.0
 00150: DEF ONE_FIFTH    = 1.0/5.0
 00151: DEF ONE_SIXTH    = 1.0/6.0
 00152: DEF ONE_SEVENTH  = 1.0/7.0
 00153: DEF ONE_HEIGHT   = 1.0/8.0
 00154: DEF ONE_NINTH    = 1.0/9.0
 00155: DEF ONE_TENTH    = 1.0/10.0
 00156: DEF ONE_ELEVENTH = 1.0/11.0
 00157: DEF ONE_TWELVE   = 1.0/12.0
 00158: DEF ONE_32       = 1.0/32.0
 00159: DEF ONE_64       = 1.0/64.0
 00160: DEF ONE_128      = 1.0/128.0
 00161: DEF ONE_255      = 1.0/255.0
 00162: DEF ONE_360      = 1.0/360.0
 00163: DEF TWO_THIRD    = 2.0/3.0
 00164: 
 00165: cdef float[360] COS_TABLE
 00166: cdef float[360] SIN_TABLE
 00167: cdef int ANGLE
+00168: for ANGLE in range(0, 360):
  for (__pyx_t_7 = 0; __pyx_t_7 < 0x168; __pyx_t_7+=1) {
    __pyx_v_12PygameShader_6shader_ANGLE = __pyx_t_7;
+00169:     COS_TABLE[ANGLE] = <float>cos(<float>(ANGLE * DEG_TO_RAD))
    (__pyx_v_12PygameShader_6shader_COS_TABLE[__pyx_v_12PygameShader_6shader_ANGLE]) = ((float)cos(((float)(__pyx_v_12PygameShader_6shader_ANGLE * __pyx_v_12PygameShader_6shader_DEG_TO_RAD))));
+00170:     SIN_TABLE[ANGLE] = <float>sin(<float>(ANGLE * DEG_TO_RAD))
    (__pyx_v_12PygameShader_6shader_SIN_TABLE[__pyx_v_12PygameShader_6shader_ANGLE]) = ((float)sin(((float)(__pyx_v_12PygameShader_6shader_ANGLE * __pyx_v_12PygameShader_6shader_DEG_TO_RAD))));
  }
 00171: 
+00172: COLORS_CPC64 = numpy.array(
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_32 = PyTuple_New(1); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_GIVEREF(__pyx_t_33);
  PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_t_33);
  __pyx_t_33 = 0;
/* … */
  __pyx_t_30 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_32, __pyx_t_33); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COLORS_CPC64, __pyx_t_30) < 0) __PYX_ERR(1, 172, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
+00173:     [[0, 0, 0],
  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_int_0);
/* … */
  __pyx_t_33 = PyList_New(27); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_33, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_33, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_8);
  PyList_SET_ITEM(__pyx_t_33, 2, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_9);
  PyList_SET_ITEM(__pyx_t_33, 3, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_10);
  PyList_SET_ITEM(__pyx_t_33, 4, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_11);
  PyList_SET_ITEM(__pyx_t_33, 5, __pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_12);
  PyList_SET_ITEM(__pyx_t_33, 6, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_13);
  PyList_SET_ITEM(__pyx_t_33, 7, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_14);
  PyList_SET_ITEM(__pyx_t_33, 8, __pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_15);
  PyList_SET_ITEM(__pyx_t_33, 9, __pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_16);
  PyList_SET_ITEM(__pyx_t_33, 10, __pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_17);
  PyList_SET_ITEM(__pyx_t_33, 11, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_18);
  PyList_SET_ITEM(__pyx_t_33, 12, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_19);
  PyList_SET_ITEM(__pyx_t_33, 13, __pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_20);
  PyList_SET_ITEM(__pyx_t_33, 14, __pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_21);
  PyList_SET_ITEM(__pyx_t_33, 15, __pyx_t_21);
  __Pyx_GIVEREF(__pyx_t_22);
  PyList_SET_ITEM(__pyx_t_33, 16, __pyx_t_22);
  __Pyx_GIVEREF(__pyx_t_23);
  PyList_SET_ITEM(__pyx_t_33, 17, __pyx_t_23);
  __Pyx_GIVEREF(__pyx_t_24);
  PyList_SET_ITEM(__pyx_t_33, 18, __pyx_t_24);
  __Pyx_GIVEREF(__pyx_t_25);
  PyList_SET_ITEM(__pyx_t_33, 19, __pyx_t_25);
  __Pyx_GIVEREF(__pyx_t_26);
  PyList_SET_ITEM(__pyx_t_33, 20, __pyx_t_26);
  __Pyx_GIVEREF(__pyx_t_27);
  PyList_SET_ITEM(__pyx_t_33, 21, __pyx_t_27);
  __Pyx_GIVEREF(__pyx_t_28);
  PyList_SET_ITEM(__pyx_t_33, 22, __pyx_t_28);
  __Pyx_GIVEREF(__pyx_t_29);
  PyList_SET_ITEM(__pyx_t_33, 23, __pyx_t_29);
  __Pyx_GIVEREF(__pyx_t_30);
  PyList_SET_ITEM(__pyx_t_33, 24, __pyx_t_30);
  __Pyx_GIVEREF(__pyx_t_31);
  PyList_SET_ITEM(__pyx_t_33, 25, __pyx_t_31);
  __Pyx_GIVEREF(__pyx_t_32);
  PyList_SET_ITEM(__pyx_t_33, 26, __pyx_t_32);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_8 = 0;
  __pyx_t_9 = 0;
  __pyx_t_10 = 0;
  __pyx_t_11 = 0;
  __pyx_t_12 = 0;
  __pyx_t_13 = 0;
  __pyx_t_14 = 0;
  __pyx_t_15 = 0;
  __pyx_t_16 = 0;
  __pyx_t_17 = 0;
  __pyx_t_18 = 0;
  __pyx_t_19 = 0;
  __pyx_t_20 = 0;
  __pyx_t_21 = 0;
  __pyx_t_22 = 0;
  __pyx_t_23 = 0;
  __pyx_t_24 = 0;
  __pyx_t_25 = 0;
  __pyx_t_26 = 0;
  __pyx_t_27 = 0;
  __pyx_t_28 = 0;
  __pyx_t_29 = 0;
  __pyx_t_30 = 0;
  __pyx_t_31 = 0;
  __pyx_t_32 = 0;
+00174:     [0, 0, 128],
  __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_3, 2, __pyx_int_128);
+00175:     [0, 0, 255],
  __pyx_t_8 = PyList_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_8, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_8, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_8, 2, __pyx_int_255);
+00176:     [128, 0, 0],
  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_9, 2, __pyx_int_0);
+00177:     [128, 0, 128],
  __pyx_t_10 = PyList_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_10, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_10, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_10, 2, __pyx_int_128);
+00178:     [128, 0, 255],
  __pyx_t_11 = PyList_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_11, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_11, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_11, 2, __pyx_int_255);
+00179:     [255, 0, 0],
  __pyx_t_12 = PyList_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_12, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_12, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_12, 2, __pyx_int_0);
+00180:     [255, 0, 128],
  __pyx_t_13 = PyList_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_13, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_13, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_13, 2, __pyx_int_128);
+00181:     [255, 0, 255],
  __pyx_t_14 = PyList_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_14, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_14, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_14, 2, __pyx_int_255);
+00182:     [0, 128, 0],
  __pyx_t_15 = PyList_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_15, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_15, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_15, 2, __pyx_int_0);
+00183:     [0, 128, 128],
  __pyx_t_16 = PyList_New(3); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_16, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_16, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_16, 2, __pyx_int_128);
+00184:     [0, 128, 255],
  __pyx_t_17 = PyList_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_17, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_17, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_17, 2, __pyx_int_255);
+00185:     [128, 128, 0],
  __pyx_t_18 = PyList_New(3); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_18, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_18, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_18, 2, __pyx_int_0);
+00186:     [128, 128, 128],
  __pyx_t_19 = PyList_New(3); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_19, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_19, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_19, 2, __pyx_int_128);
+00187:     [128, 128, 255],
  __pyx_t_20 = PyList_New(3); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_20, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_20, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_20, 2, __pyx_int_255);
+00188:     [255, 128, 0],
  __pyx_t_21 = PyList_New(3); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_21, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_21, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_21, 2, __pyx_int_0);
+00189:     [255, 128, 128],
  __pyx_t_22 = PyList_New(3); if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_22, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_22, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_22, 2, __pyx_int_128);
+00190:     [255, 128, 255],
  __pyx_t_23 = PyList_New(3); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_23, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_23, 1, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_23, 2, __pyx_int_255);
+00191:     [0, 255, 0],
  __pyx_t_24 = PyList_New(3); if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_24, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_24, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_24, 2, __pyx_int_0);
+00192:     [0, 255, 128],
  __pyx_t_25 = PyList_New(3); if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_25, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_25, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_25, 2, __pyx_int_128);
+00193:     [0, 255, 255],
  __pyx_t_26 = PyList_New(3); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_26, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_26, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_26, 2, __pyx_int_255);
+00194:     [128, 255, 0],
  __pyx_t_27 = PyList_New(3); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_27, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_27, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_27, 2, __pyx_int_0);
+00195:     [128, 255, 128],
  __pyx_t_28 = PyList_New(3); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_28, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_28, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_28, 2, __pyx_int_128);
+00196:     [128, 255, 255],
  __pyx_t_29 = PyList_New(3); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_29, 0, __pyx_int_128);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_29, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_29, 2, __pyx_int_255);
+00197:     [255, 255, 0],
  __pyx_t_30 = PyList_New(3); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_30, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_30, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_30, 2, __pyx_int_0);
+00198:     [255, 255, 128],
  __pyx_t_31 = PyList_New(3); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_31, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_31, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_128);
  __Pyx_GIVEREF(__pyx_int_128);
  PyList_SET_ITEM(__pyx_t_31, 2, __pyx_int_128);
+00199:     [255, 255, 255]], dtype=numpy.uint8)
  __pyx_t_32 = PyList_New(3); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_32, 0, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_32, 1, __pyx_int_255);
  __Pyx_INCREF(__pyx_int_255);
  __Pyx_GIVEREF(__pyx_int_255);
  PyList_SET_ITEM(__pyx_t_32, 2, __pyx_int_255);
/* … */
  __pyx_t_33 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_GetModuleGlobalName(__pyx_t_31, __pyx_n_s_numpy); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_31, __pyx_n_s_uint8); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  if (PyDict_SetItem(__pyx_t_33, __pyx_n_s_dtype, __pyx_t_30) < 0) __PYX_ERR(1, 199, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
 00200: 
 00201: cdef:
+00202:     float [:, :] COLORS_CPC64_C = numpy.divide(COLORS_CPC64, <float>255.0).astype(dtype=float32)
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_divide); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_COLORS_CPC64); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_32 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_30);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_30);
  __Pyx_GIVEREF(__pyx_t_32);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_32);
  __pyx_t_30 = 0;
  __pyx_t_32 = 0;
  __pyx_t_32 = __Pyx_PyObject_Call(__pyx_t_33, __pyx_t_2, NULL); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_32, __pyx_n_s_astype); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __pyx_t_32 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_float32); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  if (PyDict_SetItem(__pyx_t_32, __pyx_n_s_dtype, __pyx_t_33) < 0) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __pyx_t_33 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_32); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __pyx_t_34 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_33, PyBUF_WRITABLE); if (unlikely(!__pyx_t_34.memview)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_12PygameShader_6shader_COLORS_CPC64_C, 1);
  __pyx_v_12PygameShader_6shader_COLORS_CPC64_C = __pyx_t_34;
  __pyx_t_34.memview = NULL;
  __pyx_t_34.data = NULL;
 00203: 
 00204: 
 00205: @cython.binding(False)
 00206: @cython.boundscheck(False)
 00207: @cython.wraparound(False)
 00208: @cython.nonecheck(False)
 00209: @cython.cdivision(True)
 00210: @cython.profile(False)
+00211: cpdef tuple rgb_2_yiq(unsigned char r, unsigned char g, unsigned char b):
static PyObject *__pyx_pw_12PygameShader_6shader_1rgb_2_yiq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_rgb_2_yiq(unsigned char __pyx_v_r, unsigned char __pyx_v_g, unsigned char __pyx_v_b, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct yiq __pyx_v_yiq_;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_2_yiq", 0);
/* … */
  /* 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_AddTraceback("PygameShader.shader.rgb_2_yiq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_1rgb_2_yiq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_rgb_2_yiq[] = "\n    CONVERT RGB VALUES INTO YIQ COLOR MODEL \n    \n    * formulas NTSC 1953 \n    \n    :param r: integer; (unsigned char) red value in range [0.255]\n    :param g: integer; (unsigned char) green value in range [0.255]\n    :param b: integer; (unsigned char) blue value in range [0.255]\n    :return: tuple representing the color in YIQ color model\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_1rgb_2_yiq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  unsigned char __pyx_v_r;
  unsigned char __pyx_v_g;
  unsigned char __pyx_v_b;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_2_yiq (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_r,&__pyx_n_s_g,&__pyx_n_s_b,0};
    PyObject* values[3] = {0,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  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_r)) != 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_g)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rgb_2_yiq", 1, 3, 3, 1); __PYX_ERR(1, 211, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rgb_2_yiq", 1, 3, 3, 2); __PYX_ERR(1, 211, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rgb_2_yiq") < 0)) __PYX_ERR(1, 211, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_r = __Pyx_PyInt_As_unsigned_char(values[0]); if (unlikely((__pyx_v_r == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 211, __pyx_L3_error)
    __pyx_v_g = __Pyx_PyInt_As_unsigned_char(values[1]); if (unlikely((__pyx_v_g == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 211, __pyx_L3_error)
    __pyx_v_b = __Pyx_PyInt_As_unsigned_char(values[2]); if (unlikely((__pyx_v_b == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 211, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rgb_2_yiq", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 211, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.rgb_2_yiq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_rgb_2_yiq(__pyx_self, __pyx_v_r, __pyx_v_g, __pyx_v_b);
  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_6shader_rgb_2_yiq(CYTHON_UNUSED PyObject *__pyx_self, unsigned char __pyx_v_r, unsigned char __pyx_v_g, unsigned char __pyx_v_b) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_2_yiq", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_rgb_2_yiq(__pyx_v_r, __pyx_v_g, __pyx_v_b, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 211, __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.shader.rgb_2_yiq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00212:     """
 00213:     CONVERT RGB VALUES INTO YIQ COLOR MODEL
 00214: 
 00215:     * formulas NTSC 1953
 00216: 
 00217:     :param r: integer; (unsigned char) red value in range [0.255]
 00218:     :param g: integer; (unsigned char) green value in range [0.255]
 00219:     :param b: integer; (unsigned char) blue value in range [0.255]
 00220:     :return: tuple representing the color in YIQ color model
 00221:     """
 00222:     cdef yiq yiq_
+00223:     yiq_ = rgb_to_yiq(r/<float>255.0, g/<float>255.0, b/<float>255.0)
  __pyx_v_yiq_ = rgb_to_yiq((__pyx_v_r / ((float)255.0)), (__pyx_v_g / ((float)255.0)), (__pyx_v_b / ((float)255.0)));
+00224:     return yiq_.y, yiq_.i, yiq_.q
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_yiq_.y); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_yiq_.i); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_yiq_.q); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;
 00225: 
 00226: @cython.binding(False)
 00227: @cython.boundscheck(False)
 00228: @cython.wraparound(False)
 00229: @cython.nonecheck(False)
 00230: @cython.cdivision(True)
 00231: @cython.profile(False)
+00232: cpdef tuple yiq_2_rgb(float y, float i, float q):
static PyObject *__pyx_pw_12PygameShader_6shader_3yiq_2_rgb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_yiq_2_rgb(float __pyx_v_y, float __pyx_v_i, float __pyx_v_q, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct rgb __pyx_v_rgb_;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("yiq_2_rgb", 0);
/* … */
  /* 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_AddTraceback("PygameShader.shader.yiq_2_rgb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_3yiq_2_rgb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_2yiq_2_rgb[] = "\n    CONVERT YIQ COLOR MODEL INTO EQUIVALENT RGB VALUES\n    * NTSC 1953\n    \n    :param y: float; LUMA\n    :param i: float; I stands for in-phase\n    :param q: float; Q stands for quadrature, \n    :return: tuple representing the RGB values [0...255] unsigned char values\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_3yiq_2_rgb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_y;
  float __pyx_v_i;
  float __pyx_v_q;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("yiq_2_rgb (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_i,&__pyx_n_s_q,0};
    PyObject* values[3] = {0,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  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_y)) != 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_i)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("yiq_2_rgb", 1, 3, 3, 1); __PYX_ERR(1, 232, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_q)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("yiq_2_rgb", 1, 3, 3, 2); __PYX_ERR(1, 232, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "yiq_2_rgb") < 0)) __PYX_ERR(1, 232, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_y = __pyx_PyFloat_AsFloat(values[0]); if (unlikely((__pyx_v_y == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 232, __pyx_L3_error)
    __pyx_v_i = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_i == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 232, __pyx_L3_error)
    __pyx_v_q = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_q == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 232, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("yiq_2_rgb", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 232, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.yiq_2_rgb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_2yiq_2_rgb(__pyx_self, __pyx_v_y, __pyx_v_i, __pyx_v_q);
  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_6shader_2yiq_2_rgb(CYTHON_UNUSED PyObject *__pyx_self, float __pyx_v_y, float __pyx_v_i, float __pyx_v_q) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("yiq_2_rgb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_yiq_2_rgb(__pyx_v_y, __pyx_v_i, __pyx_v_q, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 232, __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.shader.yiq_2_rgb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00233:     """
 00234:     CONVERT YIQ COLOR MODEL INTO EQUIVALENT RGB VALUES
 00235:     * NTSC 1953
 00236: 
 00237:     :param y: float; LUMA
 00238:     :param i: float; I stands for in-phase
 00239:     :param q: float; Q stands for quadrature,
 00240:     :return: tuple representing the RGB values [0...255] unsigned char values
 00241:     """
 00242:     cdef rgb rgb_
 00243: 
+00244:     rgb_ = yiq_to_rgb(y, i, q)
  __pyx_v_rgb_ = yiq_to_rgb(__pyx_v_y, __pyx_v_i, __pyx_v_q);
+00245:     return <unsigned char>(rgb_.r * <float>255.0), \
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_char(((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;
+00246:            <unsigned char>(rgb_.g * <float>255.0), \
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+00247:            <unsigned char>(rgb_.b * <float>255.0)
  __pyx_t_3 = __Pyx_PyInt_From_unsigned_char(((unsigned char)(__pyx_v_rgb_.b * ((float)255.0)))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
 00248: 
 00249: @cython.binding(False)
 00250: @cython.boundscheck(False)
 00251: @cython.wraparound(False)
 00252: @cython.nonecheck(False)
 00253: @cython.cdivision(True)
 00254: @cython.profile(False)
+00255: cpdef inline void rgb_to_bgr(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_5rgb_to_bgr(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_rgb_to_bgr(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_bgr", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.rgb_to_bgr", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_5rgb_to_bgr(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_4rgb_to_bgr[] = "  \n    SHADER RGB to BGR\n  \n    Convert your game display from RGB to BGR format\n    This algorithm can also be used to transform pygame texture in the equivalent bgr format\n    \n    * The changes are automatically applied inplace to the surface you do not need to create a \n    new surface.\n\n    e.g:\n    rgb_to_bgr(surface)\n\n    :param surface_    : Pygame surface or display surface compatible (image 24-32 bit with or \n                         without per-pixel transparency / alpha channel)\n    :return             : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_5rgb_to_bgr(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_bgr (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_4rgb_to_bgr(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_4rgb_to_bgr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_bgr", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_rgb_to_bgr(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 255, __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.shader.rgb_to_bgr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00256:     """
 00257:     SHADER RGB to BGR
 00258: 
 00259:     Convert your game display from RGB to BGR format
 00260:     This algorithm can also be used to transform pygame texture in the equivalent bgr format
 00261: 
 00262:     * The changes are automatically applied inplace to the surface you do not need to create a
 00263:     new surface.
 00264: 
 00265:     e.g:
 00266:     rgb_to_bgr(surface)
 00267: 
 00268:     :param surface_    : Pygame surface or display surface compatible (image 24-32 bit with or
 00269:                          without per-pixel transparency / alpha channel)
 00270:     :return             : void
 00271:     """
+00272:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 272, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00273:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 273, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 272, __pyx_L1_error)
    }
  }
  #endif
 00274: 
 00275:     cdef unsigned char [:, :, :] rgb_array
+00276:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00277:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 277, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 277, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 277, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00278: 
+00279:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.rgb_to_bgr", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 279, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00280:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 280, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 280, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 280, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00281: 
 00282: 
+00283:     shader_rgb_to_bgr_inplace_c(rgb_array)
  __pyx_f_12PygameShader_6shader_shader_rgb_to_bgr_inplace_c(__pyx_v_rgb_array);
 00284: 
 00285: @cython.binding(False)
 00286: @cython.boundscheck(False)
 00287: @cython.wraparound(False)
 00288: @cython.nonecheck(False)
 00289: @cython.cdivision(True)
 00290: @cython.profile(False)
+00291: cpdef inline void rgb_to_brg(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_7rgb_to_brg(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_rgb_to_brg(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_brg", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.rgb_to_brg", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_7rgb_to_brg(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_6rgb_to_brg[] = "\n    SHADER RGB TO BRG\n\n    Convert your game display from RGB to BRG format.\n    This algorithm can also be used to transform pygame texture in the equivalent BRG format\n    \n    * The changes are automatically applied inplace to the surface you do not need to create a \n      new surface.\n    \n    e.g:\n    rgb_to_brg(surface)\n\n    :param surface_: Pygame surface or display surface compatible (image 24-32 bit with or without \n                     per-pixel transparency / alpha channel)\n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_7rgb_to_brg(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_brg (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_6rgb_to_brg(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_6rgb_to_brg(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_brg", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_rgb_to_brg(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 291, __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.shader.rgb_to_brg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00292:     """
 00293:     SHADER RGB TO BRG
 00294: 
 00295:     Convert your game display from RGB to BRG format.
 00296:     This algorithm can also be used to transform pygame texture in the equivalent BRG format
 00297: 
 00298:     * The changes are automatically applied inplace to the surface you do not need to create a
 00299:       new surface.
 00300: 
 00301:     e.g:
 00302:     rgb_to_brg(surface)
 00303: 
 00304:     :param surface_: Pygame surface or display surface compatible (image 24-32 bit with or without
 00305:                      per-pixel transparency / alpha channel)
 00306:     :return: void
 00307:     """
+00308:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 308, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00309:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 309, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 308, __pyx_L1_error)
    }
  }
  #endif
 00310: 
 00311:     cdef unsigned char [:, :, :] rgb_array
+00312:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00313:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 313, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 313, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 313, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00314: 
+00315:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.rgb_to_brg", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 315, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00316:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 316, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 316, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 316, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00317: 
+00318:     shader_rgb_to_brg_inplace_c(rgb_array)
  __pyx_f_12PygameShader_6shader_shader_rgb_to_brg_inplace_c(__pyx_v_rgb_array);
 00319: 
 00320: @cython.binding(False)
 00321: @cython.boundscheck(False)
 00322: @cython.wraparound(False)
 00323: @cython.nonecheck(False)
 00324: @cython.cdivision(True)
 00325: @cython.profile(False)
+00326: cpdef inline void greyscale(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_9greyscale(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_greyscale(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("greyscale", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.greyscale", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_9greyscale(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_8greyscale[] = "\n    SHADER GRAYSCALE (CONSERVE LUMINOSITY)\n\n    This shader transform the game display on a grayscale video game effect\n    \n    * This shader can also be applied to pygame textures/surface to transform them into\n      an equivalent grayscale model\n    * The changes are automatically applied inplace to the surface you do not need to create a \n      new surface.\n\n    e.g:\n    greyscale(surface)\n\n    :param surface_  : Pygame surface or display surface compatible (image 24-32 bit with \n                       or without per-pixel transparency / alpha channel)\n    :return          : void\n    \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_9greyscale(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("greyscale (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_8greyscale(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_8greyscale(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("greyscale", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_greyscale(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 326, __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.shader.greyscale", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00327:     """
 00328:     SHADER GRAYSCALE (CONSERVE LUMINOSITY)
 00329: 
 00330:     This shader transform the game display on a grayscale video game effect
 00331: 
 00332:     * This shader can also be applied to pygame textures/surface to transform them into
 00333:       an equivalent grayscale model
 00334:     * The changes are automatically applied inplace to the surface you do not need to create a
 00335:       new surface.
 00336: 
 00337:     e.g:
 00338:     greyscale(surface)
 00339: 
 00340:     :param surface_  : Pygame surface or display surface compatible (image 24-32 bit with
 00341:                        or without per-pixel transparency / alpha channel)
 00342:     :return          : void
 00343: 
 00344:     """
+00345:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 345, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00346:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 346, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 345, __pyx_L1_error)
    }
  }
  #endif
 00347: 
 00348:     cdef unsigned char [:, :, :] rgb_array
+00349:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00350:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 350, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 350, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 350, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00351: 
+00352:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.greyscale", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 352, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00353:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 353, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 353, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 353, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00354: 
+00355:     shader_greyscale_luminosity24_inplace_c(rgb_array)
  __pyx_f_12PygameShader_6shader_shader_greyscale_luminosity24_inplace_c(__pyx_v_rgb_array);
 00356: 
 00357: @cython.binding(False)
 00358: @cython.binding(False)
 00359: @cython.boundscheck(False)
 00360: @cython.wraparound(False)
 00361: @cython.nonecheck(False)
 00362: @cython.cdivision(True)
 00363: @cython.profile(False)
+00364: cpdef inline void sepia(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_11sepia(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_sepia(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sepia", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.sepia", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_11sepia(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_10sepia[] = "\n    SHADER SEPIA MODEL\n\n    Transform your video game into an equivalent sepia model\n    \n    * The changes are automatically applied inplace to the surface you do not need to create a \n      new surface.\n\n    e.g:\n    sepia(surface)\n\n\n    :param surface_  : Pygame surface or display surface compatible (image 24-32 bit with \n                       or without per-pixel transparency / alpha channel)\n    :return:         : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_11sepia(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sepia (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_10sepia(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_10sepia(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sepia", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_sepia(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 364, __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.shader.sepia", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00365:     """
 00366:     SHADER SEPIA MODEL
 00367: 
 00368:     Transform your video game into an equivalent sepia model
 00369: 
 00370:     * The changes are automatically applied inplace to the surface you do not need to create a
 00371:       new surface.
 00372: 
 00373:     e.g:
 00374:     sepia(surface)
 00375: 
 00376: 
 00377:     :param surface_  : Pygame surface or display surface compatible (image 24-32 bit with
 00378:                        or without per-pixel transparency / alpha channel)
 00379:     :return:         : void
 00380:     """
+00381:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 381, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 381, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 381, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00382:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 382, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 381, __pyx_L1_error)
    }
  }
  #endif
 00383:     cdef unsigned char [:, :, :] rgb_array
+00384:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00385:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 385, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 385, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 385, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00386: 
+00387:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.sepia", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 387, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00388:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 388, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 388, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 388, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00389: 
+00390:     shader_sepia24_inplace_c(rgb_array)
  __pyx_f_12PygameShader_6shader_shader_sepia24_inplace_c(__pyx_v_rgb_array);
 00391: 
 00392: 
 00393: @cython.binding(False)
 00394: @cython.binding(False)
 00395: @cython.boundscheck(False)
 00396: @cython.wraparound(False)
 00397: @cython.nonecheck(False)
 00398: @cython.cdivision(True)
 00399: @cython.profile(False)
+00400: cdef inline void median_fast(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_median_fast(PyObject *__pyx_v_surface_, struct __pyx_opt_args_12PygameShader_6shader_median_fast *__pyx_optional_args) {
  unsigned short __pyx_v_kernel_size_ = ((unsigned short)2);
  unsigned short __pyx_v_reduce_factor_ = ((unsigned short)1);
  PyObject *__pyx_v_rgb_array = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_surface_cp = NULL;
  int __pyx_v_w;
  int __pyx_v_h;
  PyObject *__pyx_v_cp_array = NULL;
  int __pyx_v_i;
  int __pyx_v_j;
  __Pyx_memviewslice __pyx_v_org_surface = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_surface_cp_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("median_fast", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kernel_size_ = __pyx_optional_args->kernel_size_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_reduce_factor_ = __pyx_optional_args->reduce_factor_;
      }
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.median_fast", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rgb_array);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_surface_cp);
  __Pyx_XDECREF(__pyx_v_cp_array);
  __PYX_XDEC_MEMVIEW(&__pyx_v_org_surface, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_surface_cp_arr, 1);
  __Pyx_RefNannyFinishContext();
}
 00401:         object surface_,
 00402:         unsigned short int kernel_size_=2,
 00403:         unsigned short int reduce_factor_=1
 00404: ):
 00405:     """
 00406:     This function cannot be called directly from python script (cdef)
 00407: 
 00408:     :param surface_: pygame.surface; Surface compatible 24-32 bit
 00409:     :param kernel_size_: integer; size of the kernel
 00410:     :param reduce_factor_: integer; value of 1 divide the image by 2, value of 2 div the image by 4
 00411:     :return: void
 00412:     """
+00413:     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_L8_try_end;
    __pyx_L3_error:;
    __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_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_L8_try_end:;
  }
+00414:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 414, __pyx_L3_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_4 = (__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_4)) __PYX_ERR(1, 414, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_rgb_array = __pyx_t_4;
      __pyx_t_4 = 0;
 00415: 
+00416:     except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader.median_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(1, 416, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __pyx_v_e = __pyx_t_5;
+00417:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_8 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 417, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 417, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_Raise(__pyx_t_9, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __PYX_ERR(1, 417, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00418: 
 00419: 
+00420:     surface_cp = surface_.copy()
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_surface_cp = __pyx_t_6;
  __pyx_t_6 = 0;
 00421:     cdef:
 00422:         int w, h
+00423:     w, h = surface_cp.get_size()
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_cp, __pyx_n_s_get_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
    PyObject* sequence = __pyx_t_6;
    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(1, 423, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_4 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(1, 423, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L12_unpacking_done;
    __pyx_L11_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 423, __pyx_L1_error)
    __pyx_L12_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 423, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 423, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_w = __pyx_t_7;
  __pyx_v_h = __pyx_t_11;
 00424: 
+00425:     surface_cp = smoothscale(surface_cp, (w >> reduce_factor_, h >> reduce_factor_))
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_w >> __pyx_v_reduce_factor_)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_PyInt_From_int((__pyx_v_h >> __pyx_v_reduce_factor_)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);
  __pyx_t_5 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  __pyx_t_11 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_11 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_surface_cp, __pyx_t_8};
    __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 425, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_surface_cp, __pyx_t_8};
    __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 425, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface_cp);
    __Pyx_GIVEREF(__pyx_v_surface_cp);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_11, __pyx_v_surface_cp);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_11, __pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF_SET(__pyx_v_surface_cp, __pyx_t_6);
  __pyx_t_6 = 0;
 00426: 
+00427:     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_L18_try_end;
    __pyx_L13_error:;
    __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_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 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_L18_try_end:;
  }
+00428:         cp_array = pixels3d(surface_cp)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 428, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_surface_cp) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_surface_cp);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 428, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_cp_array = __pyx_t_6;
      __pyx_t_6 = 0;
 00429: 
+00430:     except Exception as e:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_11) {
      __Pyx_AddTraceback("PygameShader.shader.median_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(1, 430, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_e = __pyx_t_4;
+00431:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_8 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 431, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 431, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_Raise(__pyx_t_9, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __PYX_ERR(1, 431, __pyx_L15_except_error)
    }
    goto __pyx_L15_except_error;
    __pyx_L15_except_error:;
 00432: 
 00433:     cdef:
 00434:         int i, j
+00435:         unsigned char[:, :, :] org_surface = rgb_array
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(1, 435, __pyx_L1_error)
  __pyx_v_org_surface = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
+00436:         unsigned char[:, :, :] surface_cp_arr = cp_array
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_cp_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(1, 436, __pyx_L1_error)
  __pyx_v_surface_cp_arr = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
 00437: 
+00438:     shader_median_filter24_inplace_c(surface_cp_arr, kernel_size_)
  __pyx_t_13.__pyx_n = 1;
  __pyx_t_13.kernel_size_ = __pyx_v_kernel_size_;
  __pyx_f_12PygameShader_6shader_shader_median_filter24_inplace_c(__pyx_v_surface_cp_arr, &__pyx_t_13); 
+00439:     surface_cp_arr = scale_array24_c(surface_cp_arr, w, h)
  __pyx_t_14 = __pyx_f_12PygameShader_6shader_scale_array24_c(__pyx_v_surface_cp_arr, __pyx_v_w, __pyx_v_h); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(1, 439, __pyx_L1_error)
  __PYX_XDEC_MEMVIEW(&__pyx_v_surface_cp_arr, 1);
  __pyx_v_surface_cp_arr = __pyx_t_14;
  __pyx_t_14.memview = NULL;
  __pyx_t_14.data = NULL;
 00440: 
+00441:     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_L23;
        }
        __pyx_L23:;
      }
  }
+00442:         for i in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_11 = __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_15 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_15 > 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)
/* … */
        __pyx_t_11 = __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_15 = (__pyx_t_11 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_15 > 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(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_15; __pyx_t_7++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_7);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
+00443:             for j in range(h):
                            __pyx_t_16 = __pyx_v_h;
                            __pyx_t_17 = __pyx_t_16;
                            for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
                              __pyx_v_j = __pyx_t_18;
+00444:                 org_surface[i, j, 0] = surface_cp_arr[i, j, 0]
                              __pyx_t_19 = __pyx_v_i;
                              __pyx_t_20 = __pyx_v_j;
                              __pyx_t_21 = 0;
                              __pyx_t_22 = __pyx_v_i;
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_24 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_org_surface.data + __pyx_t_22 * __pyx_v_org_surface.strides[0]) ) + __pyx_t_23 * __pyx_v_org_surface.strides[1]) ) + __pyx_t_24 * __pyx_v_org_surface.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_surface_cp_arr.data + __pyx_t_19 * __pyx_v_surface_cp_arr.strides[0]) ) + __pyx_t_20 * __pyx_v_surface_cp_arr.strides[1]) ) + __pyx_t_21 * __pyx_v_surface_cp_arr.strides[2]) )));
+00445:                 org_surface[i, j, 1] = surface_cp_arr[i, j, 1]
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_20 = __pyx_v_j;
                              __pyx_t_19 = 1;
                              __pyx_t_24 = __pyx_v_i;
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_22 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_org_surface.data + __pyx_t_24 * __pyx_v_org_surface.strides[0]) ) + __pyx_t_23 * __pyx_v_org_surface.strides[1]) ) + __pyx_t_22 * __pyx_v_org_surface.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_surface_cp_arr.data + __pyx_t_21 * __pyx_v_surface_cp_arr.strides[0]) ) + __pyx_t_20 * __pyx_v_surface_cp_arr.strides[1]) ) + __pyx_t_19 * __pyx_v_surface_cp_arr.strides[2]) )));
+00446:                 org_surface[i, j, 2] = surface_cp_arr[i, j, 2]
                              __pyx_t_19 = __pyx_v_i;
                              __pyx_t_20 = __pyx_v_j;
                              __pyx_t_21 = 2;
                              __pyx_t_22 = __pyx_v_i;
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_24 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_org_surface.data + __pyx_t_22 * __pyx_v_org_surface.strides[0]) ) + __pyx_t_23 * __pyx_v_org_surface.strides[1]) ) + __pyx_t_24 * __pyx_v_org_surface.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_surface_cp_arr.data + __pyx_t_19 * __pyx_v_surface_cp_arr.strides[0]) ) + __pyx_t_20 * __pyx_v_surface_cp_arr.strides[1]) ) + __pyx_t_21 * __pyx_v_surface_cp_arr.strides[2]) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 00447: 
 00448: @cython.binding(False)
 00449: @cython.binding(False)
 00450: @cython.boundscheck(False)
 00451: @cython.wraparound(False)
 00452: @cython.nonecheck(False)
 00453: @cython.cdivision(True)
 00454: @cython.profile(False)
+00455: cpdef inline void median(
static PyObject *__pyx_pw_12PygameShader_6shader_13median(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_median(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_median *__pyx_optional_args) {
  unsigned short __pyx_v_kernel_size_ = ((unsigned short)2);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("PygameShader.shader.median", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_13median(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_12median[] = "\n    SHADER MEDIAN FILTER COMPATIBLE 24-32 bit IMAGE\n\n    This shader cannot be used for real time display rendering as the performance \n    of the algorithm is not satisfactory < 50 fps. \n    The code would have to be changed and improved with C or assembler in order to\n    be adapted for a real time application. \n\n    In the state, this shader can be used for texture/surface transformation offline\n    \n    * The changes are automatically applied inplace to the surface you do not need to create a \n      new surface.  \n\n    :param surface_      : Pygame surface or display surface compatible (image 24-32 bit with \n                           or without per-pixel transparency / alpha channel)\n    :param kernel_size_  : integer; Kernel size or neighbourhood pixels to be included default is 2\n                           Increase the effect with kernel size > 2 (effect overall speed is \n                           degrading quickly with large kernel size e.g > 2)\n    :param fast_         : boolean; Flag for fast calculation (default True). Improve overall speed \n                           performance by using smaller texture sizes (see reduce_factor_ option)\n    :param reduce_factor_: integer; Int value to reduce the size of the original surface to \n                           process. A value of 1, divide the original surface by 2 and a value of 2\n                           reduce the surface by 4 (value of 1 and 2 are acceptable, over 2 the \n                           image quality is too pixelated and blur) default value is 1 (div by 2).\n                           This argument as no effect if flag fast_=False\n    :return:             : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_13median(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  unsigned short __pyx_v_kernel_size_;
  int __pyx_v_fast_;
  unsigned short __pyx_v_reduce_factor_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("median (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_kernel_size,&__pyx_n_s_fast,&__pyx_n_s_reduce_factor,0};
    PyObject* values[4] = {0,0,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  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_surface)) != 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_kernel_size);
          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_fast);
          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_reduce_factor);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "median") < 0)) __PYX_ERR(1, 455, __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);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_surface_ = values[0];
    if (values[1]) {
      __pyx_v_kernel_size_ = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_kernel_size_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 457, __pyx_L3_error)
    } else {
      __pyx_v_kernel_size_ = ((unsigned short)2);
    }
    if (values[2]) {
      __pyx_v_fast_ = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_fast_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 458, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_12median(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, unsigned short __pyx_v_kernel_size_, int __pyx_v_fast_, unsigned short __pyx_v_reduce_factor_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("median", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 3;
  __pyx_t_1.kernel_size_ = __pyx_v_kernel_size_;
  __pyx_t_1.fast_ = __pyx_v_fast_;
  __pyx_t_1.reduce_factor_ = __pyx_v_reduce_factor_;
  __pyx_f_12PygameShader_6shader_median(__pyx_v_surface_, 0, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 455, __pyx_L1_error)
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.median", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00456:         object surface_,
 00457:         unsigned short int kernel_size_=2,
+00458:         bint fast_=True,
  int __pyx_v_fast_ = ((int)1);
  unsigned short __pyx_v_reduce_factor_ = ((unsigned short)1);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("median", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kernel_size_ = __pyx_optional_args->kernel_size_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_fast_ = __pyx_optional_args->fast_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_reduce_factor_ = __pyx_optional_args->reduce_factor_;
        }
      }
    }
  }
/* … */
      __pyx_v_fast_ = ((int)1);
    }
    if (values[3]) {
      __pyx_v_reduce_factor_ = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_reduce_factor_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 459, __pyx_L3_error)
    } else {
      __pyx_v_reduce_factor_ = ((unsigned short)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("median", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 455, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.median", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_12median(__pyx_self, __pyx_v_surface_, __pyx_v_kernel_size_, __pyx_v_fast_, __pyx_v_reduce_factor_);
 00459:         unsigned short int reduce_factor_=1
 00460: ) except *:
 00461:     """
 00462:     SHADER MEDIAN FILTER COMPATIBLE 24-32 bit IMAGE
 00463: 
 00464:     This shader cannot be used for real time display rendering as the performance
 00465:     of the algorithm is not satisfactory < 50 fps.
 00466:     The code would have to be changed and improved with C or assembler in order to
 00467:     be adapted for a real time application.
 00468: 
 00469:     In the state, this shader can be used for texture/surface transformation offline
 00470: 
 00471:     * The changes are automatically applied inplace to the surface you do not need to create a
 00472:       new surface.
 00473: 
 00474:     :param surface_      : Pygame surface or display surface compatible (image 24-32 bit with
 00475:                            or without per-pixel transparency / alpha channel)
 00476:     :param kernel_size_  : integer; Kernel size or neighbourhood pixels to be included default is 2
 00477:                            Increase the effect with kernel size > 2 (effect overall speed is
 00478:                            degrading quickly with large kernel size e.g > 2)
 00479:     :param fast_         : boolean; Flag for fast calculation (default True). Improve overall speed
 00480:                            performance by using smaller texture sizes (see reduce_factor_ option)
 00481:     :param reduce_factor_: integer; Int value to reduce the size of the original surface to
 00482:                            process. A value of 1, divide the original surface by 2 and a value of 2
 00483:                            reduce the surface by 4 (value of 1 and 2 are acceptable, over 2 the
 00484:                            image quality is too pixelated and blur) default value is 1 (div by 2).
 00485:                            This argument as no effect if flag fast_=False
 00486:     :return:             : void
 00487:     """
+00488:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 488, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00489:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 489, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 488, __pyx_L1_error)
    }
  }
  #endif
 00490: 
+00491:     if kernel_size_ <= 0:
  __pyx_t_3 = ((__pyx_v_kernel_size_ <= 0) != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+00492:         raise ValueError('\nArgument kernel_size_ cannot be <= 0')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 492, __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(1, 492, __pyx_L1_error)
/* … */
  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Argument_kernel_size__cannot_be); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple_);
  __Pyx_GIVEREF(__pyx_tuple_);
+00493:     if not 0 < reduce_factor_ < 9:
  __pyx_t_3 = (0 < __pyx_v_reduce_factor_);
  if (__pyx_t_3) {
    __pyx_t_3 = (__pyx_v_reduce_factor_ < 9);
  }
  __pyx_t_4 = ((!(__pyx_t_3 != 0)) != 0);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+00494:         raise ValueError('\nArgument reduce_factor_ must be in range [1 ... 8] ')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 494, __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(1, 494, __pyx_L1_error)
/* … */
  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Argument_reduce_factor__must_be); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);
 00495:     cdef unsigned char [:, :, :] rgb_array
+00496:     if fast_:
  __pyx_t_4 = (__pyx_v_fast_ != 0);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L5;
  }
+00497:         median_fast(surface_, kernel_size_, reduce_factor_)
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.kernel_size_ = __pyx_v_kernel_size_;
    __pyx_t_5.reduce_factor_ = __pyx_v_reduce_factor_;
    __pyx_f_12PygameShader_6shader_median_fast(__pyx_v_surface_, &__pyx_t_5); 
 00498:     else:
+00499:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L11_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L11_try_end:;
    }
+00500:             rgb_array = pixels3d(surface_)
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 500, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_9 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_2 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_9, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 500, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(1, 500, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_v_rgb_array = __pyx_t_10;
        __pyx_t_10.memview = NULL;
        __pyx_t_10.data = NULL;
 00501: 
+00502:         except Exception as e:
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_11) {
        __Pyx_AddTraceback("PygameShader.shader.median", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_9) < 0) __PYX_ERR(1, 502, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_v_e = __pyx_t_1;
+00503:             raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
        __pyx_t_12 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 503, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 503, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_Raise(__pyx_t_13, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __PYX_ERR(1, 503, __pyx_L8_except_error)
      }
      goto __pyx_L8_except_error;
      __pyx_L8_except_error:;
 00504: 
+00505:         shader_median_filter24_inplace_c(rgb_array, kernel_size_)
    __pyx_t_14.__pyx_n = 1;
    __pyx_t_14.kernel_size_ = __pyx_v_kernel_size_;
    __pyx_f_12PygameShader_6shader_shader_median_filter24_inplace_c(__pyx_v_rgb_array, &__pyx_t_14); 
  }
  __pyx_L5:;
 00506: 
 00507: @cython.binding(False)
 00508: @cython.binding(False)
 00509: @cython.boundscheck(False)
 00510: @cython.wraparound(False)
 00511: @cython.nonecheck(False)
 00512: @cython.cdivision(True)
 00513: @cython.profile(False)
+00514: cpdef inline void median_grayscale(
static PyObject *__pyx_pw_12PygameShader_6shader_15median_grayscale(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_median_grayscale(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_median_grayscale *__pyx_optional_args) {
  int __pyx_v_kernel_size_ = ((int)2);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("median_grayscale", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kernel_size_ = __pyx_optional_args->kernel_size_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.median_grayscale", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_15median_grayscale(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_14median_grayscale[] = "\n    SHADER MEDIAN FILTER (GRAYSCALE)\n\n    This shader cannot be used for real time rendering as the performance of the algorithm are not\n    satisfactory. The code would have to be changed and improved with C or assembler in order to\n    be adapted for a real time application. \n\n    In the state, this shader can be used for texture/surface transformation offline\n\n    The surface is compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface you do not need to create a \n      new surface.  \n\n    :param surface_: pygame.Surface; compatible 24 - 32 bit with or without alpha layer\n    :param kernel_size_: integer; Kernel size (must be > 0), default value = 2\n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_15median_grayscale(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_kernel_size_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("median_grayscale (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_kernel_size,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kernel_size);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "median_grayscale") < 0)) __PYX_ERR(1, 514, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_kernel_size_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_kernel_size_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 516, __pyx_L3_error)
    } else {
      __pyx_v_kernel_size_ = ((int)2);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("median_grayscale", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 514, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.median_grayscale", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_14median_grayscale(__pyx_self, __pyx_v_surface_, __pyx_v_kernel_size_);
  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_6shader_14median_grayscale(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_kernel_size_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("median_grayscale", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.kernel_size_ = __pyx_v_kernel_size_;
  __pyx_f_12PygameShader_6shader_median_grayscale(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.median_grayscale", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00515:         object surface_,
 00516:         int kernel_size_=2
 00517: ):
 00518:     """
 00519:     SHADER MEDIAN FILTER (GRAYSCALE)
 00520: 
 00521:     This shader cannot be used for real time rendering as the performance of the algorithm are not
 00522:     satisfactory. The code would have to be changed and improved with C or assembler in order to
 00523:     be adapted for a real time application.
 00524: 
 00525:     In the state, this shader can be used for texture/surface transformation offline
 00526: 
 00527:     The surface is compatible 24 - 32 bit with or without alpha layer
 00528: 
 00529:     * The changes are automatically applied inplace to the surface you do not need to create a
 00530:       new surface.
 00531: 
 00532:     :param surface_: pygame.Surface; compatible 24 - 32 bit with or without alpha layer
 00533:     :param kernel_size_: integer; Kernel size (must be > 0), default value = 2
 00534:     :return: void
 00535:     """
+00536:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 536, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 536, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 536, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00537:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 537, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 536, __pyx_L1_error)
    }
  }
  #endif
 00538:     cdef unsigned char [:, :, :] rgb_array
+00539:     assert kernel_size_ > 0, "\nArgument kernel_size_ cannot be <= 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_kernel_size_ > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_kernel_size__cannot_be);
      __PYX_ERR(1, 539, __pyx_L1_error)
    }
  }
  #endif
+00540:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00541:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 541, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 541, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 541, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00542: 
+00543:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.median_grayscale", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 543, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00544:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 544, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 544, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 544, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00545: 
+00546:     shader_median_grayscale_filter24_inplace_c(rgb_array, kernel_size_)
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.kernel_size_ = __pyx_v_kernel_size_;
  __pyx_f_12PygameShader_6shader_shader_median_grayscale_filter24_inplace_c(__pyx_v_rgb_array, &__pyx_t_12); 
 00547: 
 00548: 
 00549: 
 00550: @cython.binding(False)
 00551: @cython.binding(False)
 00552: @cython.binding(False)
 00553: @cython.boundscheck(False)
 00554: @cython.wraparound(False)
 00555: @cython.nonecheck(False)
 00556: @cython.cdivision(True)
 00557: @cython.profile(False)
+00558: cpdef inline void color_reduction(
static PyObject *__pyx_pw_12PygameShader_6shader_17color_reduction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_color_reduction(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_color_reduction *__pyx_optional_args) {
  int __pyx_v_color_ = ((int)8);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("color_reduction", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_color_ = __pyx_optional_args->color_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.color_reduction", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_17color_reduction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_16color_reduction[] = "\n     COLOR REDUCTION SHADER\n\n    Decrease the amount of colors in the display or texture.\n    The method of color reduction is very simple: every color of the original picture is replaced\n    by an appropriate color from the limited palette that is accessible.\n    \n    The surface is compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface you do not need to create a \n      new surface.  \n      \n    e.g:\n    color_reduction(surface, 8)\n\n    :param surface_: pygame.Surface; compatible 24 - 32 bit \n    :param color_: integer must be > 0 default 8\n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_17color_reduction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_color_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("color_reduction (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_color,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_color);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "color_reduction") < 0)) __PYX_ERR(1, 558, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_color_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_color_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 560, __pyx_L3_error)
    } else {
      __pyx_v_color_ = ((int)8);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("color_reduction", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 558, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.color_reduction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_16color_reduction(__pyx_self, __pyx_v_surface_, __pyx_v_color_);
  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_6shader_16color_reduction(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_color_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("color_reduction", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.color_ = __pyx_v_color_;
  __pyx_f_12PygameShader_6shader_color_reduction(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.color_reduction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00559:         object surface_,
 00560:         int color_=8
 00561: ):
 00562:     """
 00563:      COLOR REDUCTION SHADER
 00564: 
 00565:     Decrease the amount of colors in the display or texture.
 00566:     The method of color reduction is very simple: every color of the original picture is replaced
 00567:     by an appropriate color from the limited palette that is accessible.
 00568: 
 00569:     The surface is compatible 24 - 32 bit with or without alpha layer
 00570: 
 00571:     * The changes are automatically applied inplace to the surface you do not need to create a
 00572:       new surface.
 00573: 
 00574:     e.g:
 00575:     color_reduction(surface, 8)
 00576: 
 00577:     :param surface_: pygame.Surface; compatible 24 - 32 bit
 00578:     :param color_: integer must be > 0 default 8
 00579:     :return: void
 00580:     """
+00581:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 581, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00582:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 582, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 581, __pyx_L1_error)
    }
  }
  #endif
 00583: 
+00584:     assert color_ > 0, "Argument color_number must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_color_ > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_color_number_must_be_0);
      __PYX_ERR(1, 584, __pyx_L1_error)
    }
  }
  #endif
 00585:     cdef unsigned char [:, :, :] rgb_array
+00586:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00587:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 587, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 587, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 587, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00588: 
+00589:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.color_reduction", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 589, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00590:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 590, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 590, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 590, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00591: 
+00592:     shader_color_reduction24_inplace_c(rgb_array, color_)
  __pyx_f_12PygameShader_6shader_shader_color_reduction24_inplace_c(__pyx_v_rgb_array, __pyx_v_color_);
 00593: 
 00594: @cython.binding(False)
 00595: @cython.binding(False)
 00596: @cython.binding(False)
 00597: @cython.boundscheck(False)
 00598: @cython.wraparound(False)
 00599: @cython.nonecheck(False)
 00600: @cython.cdivision(True)
 00601: @cython.profile(False)
+00602: cpdef inline void sobel(
static PyObject *__pyx_pw_12PygameShader_6shader_19sobel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_sobel(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_sobel *__pyx_optional_args) {
  int __pyx_v_threshold_ = ((int)64);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sobel", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_threshold_ = __pyx_optional_args->threshold_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.sobel", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_19sobel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_18sobel[] = "\n    SHADER SOBEL (EDGE DETECTION)\n\n    Transform the game display or a pygame surface into a sobel equivalent model\n    (surface edge detection)\n\n    The surface is compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n\n    e.g:\n    sobel(surface, 64)\n\n    :param surface_: pygame.Surface; compatible 24 - 32 bit \n    :param threshold_: integer; Value for detecting the edges default 64\n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_19sobel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_threshold_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sobel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_threshold,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_threshold);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sobel") < 0)) __PYX_ERR(1, 602, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_threshold_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_threshold_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 604, __pyx_L3_error)
    } else {
      __pyx_v_threshold_ = ((int)64);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sobel", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 602, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.sobel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_18sobel(__pyx_self, __pyx_v_surface_, __pyx_v_threshold_);
  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_6shader_18sobel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_threshold_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sobel", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.threshold_ = __pyx_v_threshold_;
  __pyx_f_12PygameShader_6shader_sobel(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.sobel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00603:         object surface_,
 00604:         int threshold_ = 64
 00605: ):
 00606:     """
 00607:     SHADER SOBEL (EDGE DETECTION)
 00608: 
 00609:     Transform the game display or a pygame surface into a sobel equivalent model
 00610:     (surface edge detection)
 00611: 
 00612:     The surface is compatible 24 - 32 bit with or without alpha layer
 00613: 
 00614:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00615:       new surface.
 00616: 
 00617:     e.g:
 00618:     sobel(surface, 64)
 00619: 
 00620:     :param surface_: pygame.Surface; compatible 24 - 32 bit
 00621:     :param threshold_: integer; Value for detecting the edges default 64
 00622:     :return:
 00623:     """
+00624:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 624, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 624, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 624, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00625:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 624, __pyx_L1_error)
    }
  }
  #endif
 00626: 
+00627:     assert -1 < threshold_ < 256, "\nArgument threshold must be an integer in range [0 ... 255]"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (-1L < __pyx_v_threshold_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_threshold_ < 0x100);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_threshold_must_be_an_i);
      __PYX_ERR(1, 627, __pyx_L1_error)
    }
  }
  #endif
 00628:     cdef unsigned char [:, :, :] rgb_array
+00629:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00630:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 630, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 630, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 630, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00631: 
+00632:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.sobel", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 632, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00633:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 633, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 633, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 633, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00634: 
+00635:     shader_sobel24_inplace_c(rgb_array, threshold_)
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.threshold = __pyx_v_threshold_;
  __pyx_f_12PygameShader_6shader_shader_sobel24_inplace_c(__pyx_v_rgb_array, &__pyx_t_12); 
 00636: 
 00637: @cython.binding(False)
 00638: @cython.binding(False)
 00639: @cython.binding(False)
 00640: @cython.boundscheck(False)
 00641: @cython.wraparound(False)
 00642: @cython.nonecheck(False)
 00643: @cython.cdivision(True)
 00644: @cython.profile(False)
+00645: cpdef inline void sobel_fast(
static PyObject *__pyx_pw_12PygameShader_6shader_21sobel_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_sobel_fast(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_sobel_fast *__pyx_optional_args) {
  int __pyx_v_threshold_ = ((int)64);
  unsigned short __pyx_v_factor_ = ((unsigned short)1);
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sobel_fast", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_threshold_ = __pyx_optional_args->threshold_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_factor_ = __pyx_optional_args->factor_;
      }
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("PygameShader.shader.sobel_fast", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_21sobel_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_20sobel_fast[] = "\n    SHADER FAST SOBEL (EDGE DETECTION)\n\n    Transform the game display or a pygame surface into a sobel equivalent model\n    (surface edge detection).This version is slightly fastest than shader_sobel24_inplace_c as\n    it down-scale the array containing all the pixels and apply the sobel algorithm to a smaller\n    sample. When the processing is done, the array is re-scale to its original dimensions.\n    If this method is in theory faster than shader_sobel24_inplace_c, down-scaling and up-scaling\n    an array does have a side effect of decreasing the overall image definition\n    (jagged lines non-antialiasing)\n    \n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n      \n    e.g:\n    sobel_fast(surface, 64, factor_=1)\n\n    :param surface_: pygame.surface compatible 24-32 bit \n    :param threshold_: integer; default value is 24 \n    :param factor_: integer; default value is 1 (div by 2)\n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_21sobel_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_threshold_;
  unsigned short __pyx_v_factor_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sobel_fast (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_threshold,&__pyx_n_s_factor,0};
    PyObject* values[3] = {0,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  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_surface)) != 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_threshold);
          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_factor);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sobel_fast") < 0)) __PYX_ERR(1, 645, __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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_threshold_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_threshold_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 647, __pyx_L3_error)
    } else {
      __pyx_v_threshold_ = ((int)64);
    }
    if (values[2]) {
      __pyx_v_factor_ = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_factor_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 648, __pyx_L3_error)
    } else {
      __pyx_v_factor_ = ((unsigned short)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sobel_fast", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 645, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.sobel_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_20sobel_fast(__pyx_self, __pyx_v_surface_, __pyx_v_threshold_, __pyx_v_factor_);
  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_6shader_20sobel_fast(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_threshold_, unsigned short __pyx_v_factor_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sobel_fast", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 2;
  __pyx_t_1.threshold_ = __pyx_v_threshold_;
  __pyx_t_1.factor_ = __pyx_v_factor_;
  __pyx_f_12PygameShader_6shader_sobel_fast(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.sobel_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00646:         object surface_,
 00647:         int threshold_ = 64,
 00648:         unsigned short factor_ = 1
 00649: ):
 00650:     """
 00651:     SHADER FAST SOBEL (EDGE DETECTION)
 00652: 
 00653:     Transform the game display or a pygame surface into a sobel equivalent model
 00654:     (surface edge detection).This version is slightly fastest than shader_sobel24_inplace_c as
 00655:     it down-scale the array containing all the pixels and apply the sobel algorithm to a smaller
 00656:     sample. When the processing is done, the array is re-scale to its original dimensions.
 00657:     If this method is in theory faster than shader_sobel24_inplace_c, down-scaling and up-scaling
 00658:     an array does have a side effect of decreasing the overall image definition
 00659:     (jagged lines non-antialiasing)
 00660: 
 00661:     Compatible 24 - 32 bit with or without alpha layer
 00662: 
 00663:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00664:       new surface.
 00665: 
 00666:     e.g:
 00667:     sobel_fast(surface, 64, factor_=1)
 00668: 
 00669:     :param surface_: pygame.surface compatible 24-32 bit
 00670:     :param threshold_: integer; default value is 24
 00671:     :param factor_: integer; default value is 1 (div by 2)
 00672:     :return:
 00673:     """
+00674:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 674, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 674, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 674, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00675:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 674, __pyx_L1_error)
    }
  }
  #endif
 00676: 
+00677:     assert -1 < threshold_ < 256, "\nArgument threshold must be an integer in range [0 ... 255]"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (-1L < __pyx_v_threshold_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_threshold_ < 0x100);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_threshold_must_be_an_i);
      __PYX_ERR(1, 677, __pyx_L1_error)
    }
  }
  #endif
+00678:     assert 0 < factor_ < 9, "\nArgument factor_ must be in range [1 ... 8]"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (0 < __pyx_v_factor_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_factor_ < 9);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_factor__must_be_in_ran);
      __PYX_ERR(1, 678, __pyx_L1_error)
    }
  }
  #endif
 00679: 
+00680:     shader_sobel24_fast_inplace_c(surface_, threshold_, factor_)
  __pyx_t_4.__pyx_n = 2;
  __pyx_t_4.threshold_ = __pyx_v_threshold_;
  __pyx_t_4.factor_ = __pyx_v_factor_;
  __pyx_f_12PygameShader_6shader_shader_sobel24_fast_inplace_c(__pyx_v_surface_, &__pyx_t_4); 
 00681: 
 00682: 
 00683: @cython.binding(False)
 00684: @cython.binding(False)
 00685: @cython.binding(False)
 00686: @cython.boundscheck(False)
 00687: @cython.wraparound(False)
 00688: @cython.nonecheck(False)
 00689: @cython.cdivision(True)
 00690: @cython.profile(False)
+00691: cpdef inline void invert(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_23invert(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_invert(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("invert", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.invert", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_23invert(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_22invert[] = "\n    SHADER INVERT PIXELS\n    \n    Invert all pixels of the display or a given texture\n    \n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n    \n    e.g:\n    invert(surface)\n    \n    :param surface_: pygame.surface; compatible 24 - 32 bit surfaces\n    :return: void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_23invert(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("invert (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_22invert(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_22invert(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("invert", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_invert(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 691, __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.shader.invert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00692:     """
 00693:     SHADER INVERT PIXELS
 00694: 
 00695:     Invert all pixels of the display or a given texture
 00696: 
 00697:     Compatible 24 - 32 bit with or without alpha layer
 00698: 
 00699:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00700:       new surface.
 00701: 
 00702:     e.g:
 00703:     invert(surface)
 00704: 
 00705:     :param surface_: pygame.surface; compatible 24 - 32 bit surfaces
 00706:     :return: void
 00707:     """
+00708:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 708, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00709:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 709, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 708, __pyx_L1_error)
    }
  }
  #endif
 00710:     cdef unsigned char [:, :, :] rgb_array
+00711:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00712:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 712, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 712, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 712, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00713: 
+00714:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.invert", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 714, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00715:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 715, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 715, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 715, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00716: 
+00717:     shader_invert_surface_24bit_inplace_c(rgb_array)
  __pyx_f_12PygameShader_6shader_shader_invert_surface_24bit_inplace_c(__pyx_v_rgb_array);
 00718: 
 00719: 
 00720: @cython.binding(False)
 00721: @cython.binding(False)
 00722: @cython.binding(False)
 00723: @cython.boundscheck(False)
 00724: @cython.wraparound(False)
 00725: @cython.nonecheck(False)
 00726: @cython.cdivision(True)
 00727: @cython.profile(False)
+00728: cpdef inline void hsl_effect(object surface_, float shift_):
static PyObject *__pyx_pw_12PygameShader_6shader_25hsl_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_hsl_effect(PyObject *__pyx_v_surface_, float __pyx_v_shift_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_effect", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.hsl_effect", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_25hsl_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_24hsl_effect[] = "\n    ROTATE THE HUE OF THE GAME DISPLAY OR GIVEN TEXTURE\n    \n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n      \n    e.g:\n    hsl_effect(surface, 0.2)\n    \n    :param surface_: pygame.Surface; Compatible 24 - 32 bit surfaces\n    :param shift_: float; float value in range [-1.0 ... 1.0]\n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_25hsl_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_shift_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_effect (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_shift,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_shift)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("hsl_effect", 1, 2, 2, 1); __PYX_ERR(1, 728, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hsl_effect") < 0)) __PYX_ERR(1, 728, __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_shift_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_shift_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 728, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("hsl_effect", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 728, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.hsl_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_24hsl_effect(__pyx_self, __pyx_v_surface_, __pyx_v_shift_);
  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_6shader_24hsl_effect(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_shift_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_effect", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_hsl_effect(__pyx_v_surface_, __pyx_v_shift_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 728, __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.shader.hsl_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00729:     """
 00730:     ROTATE THE HUE OF THE GAME DISPLAY OR GIVEN TEXTURE
 00731: 
 00732:     Compatible 24 - 32 bit with or without alpha layer
 00733: 
 00734:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00735:       new surface.
 00736: 
 00737:     e.g:
 00738:     hsl_effect(surface, 0.2)
 00739: 
 00740:     :param surface_: pygame.Surface; Compatible 24 - 32 bit surfaces
 00741:     :param shift_: float; float value in range [-1.0 ... 1.0]
 00742:     :return: void
 00743:     """
+00744:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 744, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00745:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 744, __pyx_L1_error)
    }
  }
  #endif
 00746: 
+00747:     assert -1.0 <= shift_ <= 1.0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (-1.0 <= __pyx_v_shift_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_shift_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_shift_must_be_in_range);
      __PYX_ERR(1, 747, __pyx_L1_error)
    }
  }
  #endif
 00748:         "Argument shift must be in range[-1.0 ... 1.0]"
 00749:     cdef unsigned char [:, :, :] rgb_array
+00750:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00751:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 751, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 751, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 751, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00752: 
+00753:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.hsl_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 753, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00754:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 754, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 754, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 754, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00755: 
+00756:     shader_hsl_surface24bit_inplace_c(rgb_array, shift_)
  __pyx_f_12PygameShader_6shader_shader_hsl_surface24bit_inplace_c(__pyx_v_rgb_array, __pyx_v_shift_);
 00757: 
 00758: @cython.binding(False)
 00759: @cython.binding(False)
 00760: @cython.binding(False)
 00761: @cython.boundscheck(False)
 00762: @cython.wraparound(False)
 00763: @cython.nonecheck(False)
 00764: @cython.cdivision(True)
 00765: @cython.profile(False)
+00766: cpdef inline void hsl_fast(
static PyObject *__pyx_pw_12PygameShader_6shader_27hsl_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_hsl_fast(PyObject *__pyx_v_surface_, float __pyx_v_shift_, __Pyx_memviewslice __pyx_v_hsl_model_, __Pyx_memviewslice __pyx_v_rgb_model_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_fast", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.hsl_fast", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_27hsl_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_26hsl_fast[] = "    \n    ROTATE THE HUE OF AN IMAGE USING STORED HSL TO RGB AND RGB TO HSL VALUES\n    \n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n\n    e.g:\n    rgb2hsl_model = hsl_to_rgb_model()\n    hsl2rgb_model = rgb_to_hsl_model()\n    hsl_fast(\n                image,\n                0.1,\n                hsl_model_=hsl2rgb_model,\n                rgb_model_=rgb2hsl_model)\n\n    :param surface_: pygame.Surface; compatible 24 - 32 bit surfaces\n    :param shift_: float; value must be in range [ -1.0 ... + 1.0]\n    :param hsl_model_: 3d numpy.ndarray shape (256, 256, 256, 3) see hsl_to_rgb_model function \n    :param rgb_model_: 3d numpy.ndarray shape (256, 256, 256, 3) see rgb_to_hsl_model function\n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_27hsl_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_shift_;
  __Pyx_memviewslice __pyx_v_hsl_model_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_rgb_model_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_fast (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_shift,&__pyx_n_s_hsl_model,&__pyx_n_s_rgb_model,0};
    PyObject* values[4] = {0,0,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  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_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_shift)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("hsl_fast", 1, 4, 4, 1); __PYX_ERR(1, 766, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_hsl_model)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("hsl_fast", 1, 4, 4, 2); __PYX_ERR(1, 766, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rgb_model)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("hsl_fast", 1, 4, 4, 3); __PYX_ERR(1, 766, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hsl_fast") < 0)) __PYX_ERR(1, 766, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_shift_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_shift_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 768, __pyx_L3_error)
    __pyx_v_hsl_model_ = __Pyx_PyObject_to_MemoryviewSlice_d_d_d_dc_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_hsl_model_.memview)) __PYX_ERR(1, 769, __pyx_L3_error)
    __pyx_v_rgb_model_ = __Pyx_PyObject_to_MemoryviewSlice_d_d_d_dc_unsigned_char(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_rgb_model_.memview)) __PYX_ERR(1, 770, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("hsl_fast", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 766, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.hsl_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_26hsl_fast(__pyx_self, __pyx_v_surface_, __pyx_v_shift_, __pyx_v_hsl_model_, __pyx_v_rgb_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_6shader_26hsl_fast(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_shift_, __Pyx_memviewslice __pyx_v_hsl_model_, __Pyx_memviewslice __pyx_v_rgb_model_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_fast", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_hsl_model_.memview)) { __Pyx_RaiseUnboundLocalError("hsl_model_"); __PYX_ERR(1, 766, __pyx_L1_error) }
  if (unlikely(!__pyx_v_rgb_model_.memview)) { __Pyx_RaiseUnboundLocalError("rgb_model_"); __PYX_ERR(1, 766, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_hsl_fast(__pyx_v_surface_, __pyx_v_shift_, __pyx_v_hsl_model_, __pyx_v_rgb_model_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 766, __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.shader.hsl_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_hsl_model_, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_model_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00767:         object surface_,
 00768:         float shift_,
 00769:         float [:, :, :, ::1] hsl_model_,
 00770:         unsigned char [:, :, :, ::1] rgb_model_
 00771: ):
 00772:     """
 00773:     ROTATE THE HUE OF AN IMAGE USING STORED HSL TO RGB AND RGB TO HSL VALUES
 00774: 
 00775:     Compatible 24 - 32 bit with or without alpha layer
 00776: 
 00777:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00778:       new surface.
 00779: 
 00780:     e.g:
 00781:     rgb2hsl_model = hsl_to_rgb_model()
 00782:     hsl2rgb_model = rgb_to_hsl_model()
 00783:     hsl_fast(
 00784:                 image,
 00785:                 0.1,
 00786:                 hsl_model_=hsl2rgb_model,
 00787:                 rgb_model_=rgb2hsl_model)
 00788: 
 00789:     :param surface_: pygame.Surface; compatible 24 - 32 bit surfaces
 00790:     :param shift_: float; value must be in range [ -1.0 ... + 1.0]
 00791:     :param hsl_model_: 3d numpy.ndarray shape (256, 256, 256, 3) see hsl_to_rgb_model function
 00792:     :param rgb_model_: 3d numpy.ndarray shape (256, 256, 256, 3) see rgb_to_hsl_model function
 00793:     :return:
 00794:     """
+00795:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 795, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00796:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 795, __pyx_L1_error)
    }
  }
  #endif
+00797:     assert -1.0 <= shift_ <= 1.0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (-1.0 <= __pyx_v_shift_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_shift_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_shift_must_be_in_range);
      __PYX_ERR(1, 797, __pyx_L1_error)
    }
  }
  #endif
 00798:         "Argument shift must be in range[-1.0 ... 1.0]"
+00799:     assert PyObject_IsInstance(hsl_model_, (numpy.ndarray, cython.view.memoryview)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_hsl_model_, 4, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_memoryview_type));
    __pyx_t_4 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_2, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 799, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00800:         "\nArgument hsl_model_ must be a numpy.ndarray or memoryview type, got %s " % type(
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_hsl_model__must_be_a_n, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 800, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 799, __pyx_L1_error)
    }
  }
  #endif
+00801:             hsl_model_)
      __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_hsl_model_, 4, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
+00802:     assert PyObject_IsInstance(rgb_model_, (numpy.ndarray, cython.view.memoryview)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_rgb_model_, 4, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_memoryview_type));
    __pyx_t_4 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_2, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 802, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00803:         "\nArgument rgb_model_ must be a numpy.ndarray or memoryview type, got %s " % type(
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_rgb_model__must_be_a_n, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 803, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 802, __pyx_L1_error)
    }
  }
  #endif
+00804:             rgb_model_)
      __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_rgb_model_, 4, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
 00805:     cdef unsigned char [:, :, :] rgb_array
+00806:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00807:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 807, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 807, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 807, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00808: 
+00809:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.hsl_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(1, 809, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00810:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 810, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 810, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 810, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00811: 
+00812:     shader_hsl_surface24bit_fast_inplace_c(rgb_array, shift_, hsl_model_, rgb_model_)
  __pyx_f_12PygameShader_6shader_shader_hsl_surface24bit_fast_inplace_c(__pyx_v_rgb_array, __pyx_v_shift_, __pyx_v_hsl_model_, __pyx_v_rgb_model_);
 00813: 
 00814: @cython.binding(False)
 00815: @cython.binding(False)
 00816: @cython.binding(False)
 00817: @cython.boundscheck(False)
 00818: @cython.wraparound(False)
 00819: @cython.nonecheck(False)
 00820: @cython.cdivision(True)
 00821: @cython.profile(False)
+00822: cpdef inline void blur(object surface_, t_=1):
static PyObject *__pyx_pw_12PygameShader_6shader_29blur(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_blur(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_blur *__pyx_optional_args) {
  PyObject *__pyx_v_t_ = ((PyObject *)__pyx_int_1);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blur", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_t_ = __pyx_optional_args->t_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.blur", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_29blur(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_28blur[] = "\n    APPLY A GAUSSIAN BLUR EFFECT TO THE GAME DISPLAY OR TO A GIVEN TEXTURE (KERNEL 5x5)\n\n    This method is using convolution property and process the image in two passes,\n    first the horizontal convolution and last the vertical convolution\n    pixels convoluted outside image edges will be set to adjacent edge value\n    \n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n\n    :param surface_: pygame.Surface; compatible 24 - 32 bit surfaces\n    :param t_      : integer; must be >0; number of passes (default 1)\n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_29blur(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  PyObject *__pyx_v_t_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blur (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_t,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_int_1);
    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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "blur") < 0)) __PYX_ERR(1, 822, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    __pyx_v_t_ = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("blur", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 822, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.blur", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_28blur(__pyx_self, __pyx_v_surface_, __pyx_v_t_);
  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_6shader_28blur(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, PyObject *__pyx_v_t_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blur", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.t_ = __pyx_v_t_;
  __pyx_f_12PygameShader_6shader_blur(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.blur", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00823:     """
 00824:     APPLY A GAUSSIAN BLUR EFFECT TO THE GAME DISPLAY OR TO A GIVEN TEXTURE (KERNEL 5x5)
 00825: 
 00826:     This method is using convolution property and process the image in two passes,
 00827:     first the horizontal convolution and last the vertical convolution
 00828:     pixels convoluted outside image edges will be set to adjacent edge value
 00829: 
 00830:     Compatible 24 - 32 bit with or without alpha layer
 00831: 
 00832:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00833:       new surface.
 00834: 
 00835:     :param surface_: pygame.Surface; compatible 24 - 32 bit surfaces
 00836:     :param t_      : integer; must be >0; number of passes (default 1)
 00837:     :return: void
 00838:     """
+00839:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 839, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00840:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 840, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 839, __pyx_L1_error)
    }
  }
  #endif
+00841:     assert t_ > 0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_t_, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 841, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(1, 841, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) {
+00842:         "\nArgument t_ must be > 0, got %s " % t_
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_t__must_be_0_got_s, __pyx_v_t_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 842, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 841, __pyx_L1_error)
    }
  }
  #endif
 00843:     cdef unsigned char [:, :, :] rgb_array
+00844:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00845:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 845, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 845, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 845, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00846: 
+00847:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.blur", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 847, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00848:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 848, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 848, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 848, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00849: 
+00850:     shader_blur5x5_array24_inplace_c(rgb_array, None, t_)
  __pyx_t_12.__pyx_n = 2;
  __pyx_t_12.mask = Py_None;
  __pyx_t_12.t = __pyx_v_t_;
  __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_v_rgb_array, &__pyx_t_12); 
 00851: 
 00852: @cython.binding(False)
 00853: @cython.binding(False)
 00854: @cython.binding(False)
 00855: @cython.boundscheck(False)
 00856: @cython.wraparound(False)
 00857: @cython.nonecheck(False)
 00858: @cython.cdivision(True)
 00859: @cython.profile(False)
+00860: cpdef inline void wave(object surface_, float rad, int size):
static PyObject *__pyx_pw_12PygameShader_6shader_31wave(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_wave(PyObject *__pyx_v_surface_, float __pyx_v_rad, int __pyx_v_size, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wave", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.wave", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_31wave(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_30wave[] = "\n    CREATE A WAVE EFFECT TO THE GAME DISPLAY OR TO A GIVEN SURFACE\n\n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n\n    e.g:\n    wave(surface, 8 * math.pi/180.0 + frame_number, 5)\n    \n    :param surface_: pygame.Surface; pygame surface compatible 24 - 32 bit  \n    :param rad     : float; angle in rad to rotate over time\n    :param size    : int; Number of sub-surfaces\n    :return        : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_31wave(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_rad;
  int __pyx_v_size;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wave (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_rad,&__pyx_n_s_size,0};
    PyObject* values[3] = {0,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  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_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_rad)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wave", 1, 3, 3, 1); __PYX_ERR(1, 860, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wave", 1, 3, 3, 2); __PYX_ERR(1, 860, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wave") < 0)) __PYX_ERR(1, 860, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_rad = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_rad == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 860, __pyx_L3_error)
    __pyx_v_size = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 860, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wave", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 860, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_30wave(__pyx_self, __pyx_v_surface_, __pyx_v_rad, __pyx_v_size);
  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_6shader_30wave(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_rad, int __pyx_v_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_wave(__pyx_v_surface_, __pyx_v_rad, __pyx_v_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 860, __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.shader.wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00861:     """
 00862:     CREATE A WAVE EFFECT TO THE GAME DISPLAY OR TO A GIVEN SURFACE
 00863: 
 00864:     Compatible 24 - 32 bit with or without alpha layer
 00865: 
 00866:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00867:       new surface.
 00868: 
 00869:     e.g:
 00870:     wave(surface, 8 * math.pi/180.0 + frame_number, 5)
 00871: 
 00872:     :param surface_: pygame.Surface; pygame surface compatible 24 - 32 bit
 00873:     :param rad     : float; angle in rad to rotate over time
 00874:     :param size    : int; Number of sub-surfaces
 00875:     :return        : void
 00876:     """
+00877:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 877, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00878:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 878, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 877, __pyx_L1_error)
    }
  }
  #endif
+00879:     assert size > 0, "Argument size must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_size > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_size_must_be_0);
      __PYX_ERR(1, 879, __pyx_L1_error)
    }
  }
  #endif
 00880:     cdef unsigned char [:, :, :] rgb_array
+00881:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00882:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 882, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 882, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 882, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00883: 
+00884:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 884, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00885:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 885, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 885, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 885, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00886: 
+00887:     shader_wave24bit_inplace_c(rgb_array, rad, size)
  __pyx_f_12PygameShader_6shader_shader_wave24bit_inplace_c(__pyx_v_rgb_array, __pyx_v_rad, __pyx_v_size);
 00888: 
 00889: @cython.binding(False)
 00890: @cython.binding(False)
 00891: @cython.binding(False)
 00892: @cython.boundscheck(False)
 00893: @cython.wraparound(False)
 00894: @cython.nonecheck(False)
 00895: @cython.cdivision(True)
 00896: @cython.profile(False)
+00897: cpdef inline void swirl(object surface_, float degrees):
static PyObject *__pyx_pw_12PygameShader_6shader_33swirl(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_swirl(PyObject *__pyx_v_surface_, float __pyx_v_degrees, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("swirl", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.swirl", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_33swirl(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_32swirl[] = "\n    SWIRL AN IMAGE (ANGLE APPROXIMATION METHOD)\n\n    This algorithm uses a table of cos and sin.\n    \n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n\n    e.g:\n    swirl(surface, 1.0)\n    \n    :param surface_: pygame.Surface, compatible 24 - 32 bit \n    :param degrees : float; angle in degrees \n    :return        : void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_33swirl(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_degrees;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("swirl (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_degrees,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_degrees)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("swirl", 1, 2, 2, 1); __PYX_ERR(1, 897, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "swirl") < 0)) __PYX_ERR(1, 897, __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_degrees = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_degrees == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 897, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("swirl", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 897, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.swirl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_32swirl(__pyx_self, __pyx_v_surface_, __pyx_v_degrees);
  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_6shader_32swirl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_degrees) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("swirl", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_swirl(__pyx_v_surface_, __pyx_v_degrees, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 897, __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.shader.swirl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00898:     """
 00899:     SWIRL AN IMAGE (ANGLE APPROXIMATION METHOD)
 00900: 
 00901:     This algorithm uses a table of cos and sin.
 00902: 
 00903:     Compatible 24 - 32 bit with or without alpha layer
 00904: 
 00905:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00906:       new surface.
 00907: 
 00908:     e.g:
 00909:     swirl(surface, 1.0)
 00910: 
 00911:     :param surface_: pygame.Surface, compatible 24 - 32 bit
 00912:     :param degrees : float; angle in degrees
 00913:     :return        : void
 00914:     """
+00915:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 915, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00916:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 916, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 915, __pyx_L1_error)
    }
  }
  #endif
 00917:     cdef unsigned char [:, :, :] rgb_array
+00918:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00919:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 919, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 919, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 919, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00920: 
+00921:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.swirl", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 921, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00922:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 922, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 922, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 922, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00923: 
+00924:     shader_swirl24bit_inplace_c(rgb_array, degrees)
  __pyx_f_12PygameShader_6shader_shader_swirl24bit_inplace_c(__pyx_v_rgb_array, __pyx_v_degrees);
 00925: 
 00926: 
 00927: @cython.binding(False)
 00928: @cython.binding(False)
 00929: @cython.boundscheck(False)
 00930: @cython.wraparound(False)
 00931: @cython.nonecheck(False)
 00932: @cython.cdivision(True)
 00933: @cython.profile(False)
+00934: cpdef inline void swirl2(object surface_, float degrees):
static PyObject *__pyx_pw_12PygameShader_6shader_35swirl2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_swirl2(PyObject *__pyx_v_surface_, float __pyx_v_degrees, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("swirl2", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.swirl2", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_35swirl2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_34swirl2[] = "\n    SWIRL AN IMAGE WITHOUT ANGLE APPROXIMATION\n\n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n      \n    e.g:\n    swirl(surface_, frame_number)\n    \n    :param surface_: pygame.Surface, compatible 24 - 32 bit \n    :param degrees : float; angle in degrees\n    :return        : void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_35swirl2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_degrees;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("swirl2 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_degrees,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_degrees)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("swirl2", 1, 2, 2, 1); __PYX_ERR(1, 934, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "swirl2") < 0)) __PYX_ERR(1, 934, __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_degrees = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_degrees == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 934, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("swirl2", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 934, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.swirl2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_34swirl2(__pyx_self, __pyx_v_surface_, __pyx_v_degrees);
  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_6shader_34swirl2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_degrees) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("swirl2", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_swirl2(__pyx_v_surface_, __pyx_v_degrees, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 934, __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.shader.swirl2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00935:     """
 00936:     SWIRL AN IMAGE WITHOUT ANGLE APPROXIMATION
 00937: 
 00938:     Compatible 24 - 32 bit with or without alpha layer
 00939: 
 00940:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00941:       new surface.
 00942: 
 00943:     e.g:
 00944:     swirl(surface_, frame_number)
 00945: 
 00946:     :param surface_: pygame.Surface, compatible 24 - 32 bit
 00947:     :param degrees : float; angle in degrees
 00948:     :return        : void
 00949:     """
+00950:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 950, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+00951:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 951, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 950, __pyx_L1_error)
    }
  }
  #endif
 00952:     cdef unsigned char [:, :, :] rgb_array
+00953:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+00954:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 954, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 954, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 954, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 00955: 
+00956:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.swirl2", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 956, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+00957:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 957, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 957, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 957, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 00958: 
+00959:     shader_swirl24bit_inplace_c1(rgb_array, degrees)
  __pyx_f_12PygameShader_6shader_shader_swirl24bit_inplace_c1(__pyx_v_rgb_array, __pyx_v_degrees);
 00960: 
 00961: 
 00962: @cython.binding(False)
 00963: @cython.boundscheck(False)
 00964: @cython.wraparound(False)
 00965: @cython.nonecheck(False)
 00966: @cython.cdivision(True)
 00967: @cython.profile(False)
+00968: cpdef inline void plasma_config(
static PyObject *__pyx_pw_12PygameShader_6shader_37plasma_config(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_plasma_config(PyObject *__pyx_v_surface_, int __pyx_v_frame, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_plasma_config *__pyx_optional_args) {
  float __pyx_v_hue_ = __pyx_k__3;
  float __pyx_v_sat_ = __pyx_k__4;
  float __pyx_v_value_ = __pyx_k__5;
  float __pyx_v_a_ = __pyx_k__6;
  float __pyx_v_b_ = __pyx_k__7;
  float __pyx_v_c_ = __pyx_k__8;
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("plasma_config", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_hue_ = __pyx_optional_args->hue_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_sat_ = __pyx_optional_args->sat_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_value_ = __pyx_optional_args->value_;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_a_ = __pyx_optional_args->a_;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_b_ = __pyx_optional_args->b_;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_c_ = __pyx_optional_args->c_;
              }
            }
          }
        }
      }
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.plasma_config", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_37plasma_config(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_36plasma_config[] = "\n\n    CREATE A BASIC PLASMA EFFECT ON THE TOP OF A PYGAME SURFACE\n\n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n\n    e.g:\n    plasma_config(surface, frame_number)\n\n    :param a_           : float; default value 1.0/255.0 control the plasma equation\n    :param b_           : float; default value 1.0/12.0 control the plasma equation\n    :param c_           : float; default value 1.0/12.0 control the plasma equation\n    :param value_       : float; default value 1.0/8.0 value factor\n    :param sat_         : float; default value 1.0/6.0 saturation value\n    :param hue_         : float; default value 1.0/6.0 hue value factor\n    :param surface_     : pygame.surface; compatible 24 - 32 bit\n    :param frame        : integer; Variable that need to change over time\n    :return             : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_37plasma_config(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_frame;
  float __pyx_v_hue_;
  float __pyx_v_sat_;
  float __pyx_v_value_;
  float __pyx_v_a_;
  float __pyx_v_b_;
  float __pyx_v_c_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("plasma_config (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_frame,&__pyx_n_s_hue,&__pyx_n_s_sat,&__pyx_n_s_value,&__pyx_n_s_a,&__pyx_n_s_b_2,&__pyx_n_s_c,0};
    PyObject* values[8] = {0,0,0,0,0,0,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  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_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_frame)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("plasma_config", 0, 2, 8, 1); __PYX_ERR(1, 968, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_hue);
          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_sat);
          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_value);
          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_a);
          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_b_2);
          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_c);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plasma_config") < 0)) __PYX_ERR(1, 968, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    __pyx_v_frame = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_frame == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 970, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_hue_ = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_hue_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 971, __pyx_L3_error)
    } else {
      __pyx_v_hue_ = __pyx_k__3;
    }
    if (values[3]) {
      __pyx_v_sat_ = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_sat_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 972, __pyx_L3_error)
    } else {
      __pyx_v_sat_ = __pyx_k__4;
    }
    if (values[4]) {
      __pyx_v_value_ = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_value_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 973, __pyx_L3_error)
    } else {
      __pyx_v_value_ = __pyx_k__5;
    }
    if (values[5]) {
      __pyx_v_a_ = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_a_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 974, __pyx_L3_error)
    } else {
      __pyx_v_a_ = __pyx_k__6;
    }
    if (values[6]) {
      __pyx_v_b_ = __pyx_PyFloat_AsFloat(values[6]); if (unlikely((__pyx_v_b_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 975, __pyx_L3_error)
    } else {
      __pyx_v_b_ = __pyx_k__7;
    }
    if (values[7]) {
      __pyx_v_c_ = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_c_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 976, __pyx_L3_error)
    } else {
      __pyx_v_c_ = __pyx_k__8;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("plasma_config", 0, 2, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 968, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.plasma_config", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_36plasma_config(__pyx_self, __pyx_v_surface_, __pyx_v_frame, __pyx_v_hue_, __pyx_v_sat_, __pyx_v_value_, __pyx_v_a_, __pyx_v_b_, __pyx_v_c_);
  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_6shader_36plasma_config(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_frame, float __pyx_v_hue_, float __pyx_v_sat_, float __pyx_v_value_, float __pyx_v_a_, float __pyx_v_b_, float __pyx_v_c_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("plasma_config", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 6;
  __pyx_t_1.hue_ = __pyx_v_hue_;
  __pyx_t_1.sat_ = __pyx_v_sat_;
  __pyx_t_1.value_ = __pyx_v_value_;
  __pyx_t_1.a_ = __pyx_v_a_;
  __pyx_t_1.b_ = __pyx_v_b_;
  __pyx_t_1.c_ = __pyx_v_c_;
  __pyx_f_12PygameShader_6shader_plasma_config(__pyx_v_surface_, __pyx_v_frame, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.plasma_config", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00969:         object surface_,
 00970:         int frame,
+00971:         float hue_=<float>1.0/<float>6.0,
  __pyx_k__3 = (((float)1.0) / ((float)6.0));
/* … */
  __pyx_k__3 = (((float)1.0) / ((float)6.0));
+00972:         float sat_=<float>1.0/<float>6.0,
  __pyx_k__4 = (((float)1.0) / ((float)6.0));
/* … */
  __pyx_k__4 = (((float)1.0) / ((float)6.0));
+00973:         float value_=<float>1.0/<float>8.0,
  __pyx_k__5 = (((float)1.0) / ((float)8.0));
/* … */
  __pyx_k__5 = (((float)1.0) / ((float)8.0));
+00974:         float a_=<float>1.0/<float>255.0,
  __pyx_k__6 = (((float)1.0) / ((float)255.0));
/* … */
  __pyx_k__6 = (((float)1.0) / ((float)255.0));
+00975:         float b_=<float>1.0/<float>12.0,
  __pyx_k__7 = (((float)1.0) / ((float)12.0));
/* … */
  __pyx_k__7 = (((float)1.0) / ((float)12.0));
+00976:         float c_=<float>1.0/<float>12.0
  __pyx_k__8 = (((float)1.0) / ((float)12.0));
/* … */
  __pyx_k__8 = (((float)1.0) / ((float)12.0));
 00977: ):
 00978:     """
 00979: 
 00980:     CREATE A BASIC PLASMA EFFECT ON THE TOP OF A PYGAME SURFACE
 00981: 
 00982:     Compatible 24 - 32 bit with or without alpha layer
 00983: 
 00984:     * The changes are automatically applied inplace to the surface, you do not need to create a
 00985:       new surface.
 00986: 
 00987:     e.g:
 00988:     plasma_config(surface, frame_number)
 00989: 
 00990:     :param a_           : float; default value 1.0/255.0 control the plasma equation
 00991:     :param b_           : float; default value 1.0/12.0 control the plasma equation
 00992:     :param c_           : float; default value 1.0/12.0 control the plasma equation
 00993:     :param value_       : float; default value 1.0/8.0 value factor
 00994:     :param sat_         : float; default value 1.0/6.0 saturation value
 00995:     :param hue_         : float; default value 1.0/6.0 hue value factor
 00996:     :param surface_     : pygame.surface; compatible 24 - 32 bit
 00997:     :param frame        : integer; Variable that need to change over time
 00998:     :return             : void
 00999:     """
+01000:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1000, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1000, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1000, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01001:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1001, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1000, __pyx_L1_error)
    }
  }
  #endif
 01002:     cdef unsigned char [:, :, :] rgb_array
+01003:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01004:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1004, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1004, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1004, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01005: 
+01006:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.plasma_config", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1006, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01007:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1007, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1007, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1007, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01008: 
+01009:     shader_plasma24bit_inplace_c(rgb_array, frame, hue_, sat_, value_, a_, b_, c_)
  __pyx_t_12.__pyx_n = 6;
  __pyx_t_12.hue_ = __pyx_v_hue_;
  __pyx_t_12.sat_ = __pyx_v_sat_;
  __pyx_t_12.value_ = __pyx_v_value_;
  __pyx_t_12.a_ = __pyx_v_a_;
  __pyx_t_12.b_ = __pyx_v_b_;
  __pyx_t_12.c_ = __pyx_v_c_;
  __pyx_f_12PygameShader_6shader_shader_plasma24bit_inplace_c(__pyx_v_rgb_array, __pyx_v_frame, &__pyx_t_12); 
 01010: 
 01011: @cython.binding(False)
 01012: @cython.boundscheck(False)
 01013: @cython.wraparound(False)
 01014: @cython.nonecheck(False)
 01015: @cython.cdivision(True)
 01016: @cython.profile(False)
+01017: cpdef inline void plasma(surface_, float frame, unsigned int [::1] palette_):
static PyObject *__pyx_pw_12PygameShader_6shader_39plasma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_plasma(PyObject *__pyx_v_surface_, float __pyx_v_frame, __Pyx_memviewslice __pyx_v_palette_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("plasma", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("PygameShader.shader.plasma", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_39plasma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_38plasma[] = "\n    CREATE A PLASMA EFFECT INPLACE\n\n    e.g:\n    plasma(surface, frame_number, palette_)\n    \n    :param surface_: pygame.Surface; compatible 24 - 32 bit \n    :param frame   : float; frame number\n    :param palette_: 1d array containing colors\n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_39plasma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_frame;
  __Pyx_memviewslice __pyx_v_palette_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("plasma (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_frame,&__pyx_n_s_palette,0};
    PyObject* values[3] = {0,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  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_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_frame)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("plasma", 1, 3, 3, 1); __PYX_ERR(1, 1017, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_palette)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("plasma", 1, 3, 3, 2); __PYX_ERR(1, 1017, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plasma") < 0)) __PYX_ERR(1, 1017, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_frame = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_frame == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1017, __pyx_L3_error)
    __pyx_v_palette_ = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_palette_.memview)) __PYX_ERR(1, 1017, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("plasma", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1017, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.plasma", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_38plasma(__pyx_self, __pyx_v_surface_, __pyx_v_frame, __pyx_v_palette_);
  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_6shader_38plasma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_frame, __Pyx_memviewslice __pyx_v_palette_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("plasma", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_palette_.memview)) { __Pyx_RaiseUnboundLocalError("palette_"); __PYX_ERR(1, 1017, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_plasma(__pyx_v_surface_, __pyx_v_frame, __pyx_v_palette_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1017, __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.shader.plasma", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_palette_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01018:     """
 01019:     CREATE A PLASMA EFFECT INPLACE
 01020: 
 01021:     e.g:
 01022:     plasma(surface, frame_number, palette_)
 01023: 
 01024:     :param surface_: pygame.Surface; compatible 24 - 32 bit
 01025:     :param frame   : float; frame number
 01026:     :param palette_: 1d array containing colors
 01027:     :return:
 01028:     """
+01029:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1029, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01030:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1030, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1029, __pyx_L1_error)
    }
  }
  #endif
+01031:     shader_plasma_c(surface_, frame, palette_)
  __pyx_f_12PygameShader_6shader_shader_plasma_c(__pyx_v_surface_, __pyx_v_frame, __pyx_v_palette_);
 01032: 
 01033: 
 01034: @cython.binding(False)
 01035: @cython.boundscheck(False)
 01036: @cython.wraparound(False)
 01037: @cython.nonecheck(False)
 01038: @cython.cdivision(True)
 01039: @cython.profile(False)
+01040: cpdef inline float [:, :, :, ::1] rgb_to_hsl_model():
static PyObject *__pyx_pw_12PygameShader_6shader_41rgb_to_hsl_model(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static CYTHON_INLINE __Pyx_memviewslice __pyx_f_12PygameShader_6shader_rgb_to_hsl_model(CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_hsl_model", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("PygameShader.shader.rgb_to_hsl_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_41rgb_to_hsl_model(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_12PygameShader_6shader_40rgb_to_hsl_model[] = "\n    Create an HSL model containing all the values\n    :return: Return a cython.view.memoryview shape (256, 256, 256, 3)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_41rgb_to_hsl_model(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_hsl_model (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_40rgb_to_hsl_model(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_40rgb_to_hsl_model(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_hsl_model", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_rgb_to_hsl_model(0); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 1040, __pyx_L1_error)
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_1, 4, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.rgb_to_hsl_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01041:     """
 01042:     Create an HSL model containing all the values
 01043:     :return: Return a cython.view.memoryview shape (256, 256, 256, 3)
 01044:     """
+01045:     return rgb_to_hsl_model_c()
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_rgb_to_hsl_model_c(); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 1045, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  goto __pyx_L0;
 01046: 
 01047: @cython.binding(False)
 01048: @cython.boundscheck(False)
 01049: @cython.wraparound(False)
 01050: @cython.nonecheck(False)
 01051: @cython.cdivision(True)
 01052: @cython.profile(False)
+01053: cpdef inline unsigned char [:, :, :, ::1] hsl_to_rgb_model():
static PyObject *__pyx_pw_12PygameShader_6shader_43hsl_to_rgb_model(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static CYTHON_INLINE __Pyx_memviewslice __pyx_f_12PygameShader_6shader_hsl_to_rgb_model(CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_to_rgb_model", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("PygameShader.shader.hsl_to_rgb_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_43hsl_to_rgb_model(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_12PygameShader_6shader_42hsl_to_rgb_model[] = "\n    Create an RGB model containing all the values\n    :return: Return a cython.view.memoryview shape (256, 256, 256, 3)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_43hsl_to_rgb_model(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_to_rgb_model (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_42hsl_to_rgb_model(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_42hsl_to_rgb_model(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_to_rgb_model", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_hsl_to_rgb_model(0); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 1053, __pyx_L1_error)
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_1, 4, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.hsl_to_rgb_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01054:     """
 01055:     Create an RGB model containing all the values
 01056:     :return: Return a cython.view.memoryview shape (256, 256, 256, 3)
 01057:     """
+01058:     return hsl_to_rgb_model_c()
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_hsl_to_rgb_model_c(); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 1058, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  goto __pyx_L0;
 01059: 
 01060: 
 01061: @cython.binding(False)
 01062: @cython.boundscheck(False)
 01063: @cython.wraparound(False)
 01064: @cython.nonecheck(False)
 01065: @cython.cdivision(True)
 01066: @cython.profile(False)
+01067: cpdef inline void brightness(object surface_, float shift_):
static PyObject *__pyx_pw_12PygameShader_6shader_45brightness(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_brightness(PyObject *__pyx_v_surface_, float __pyx_v_shift_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.brightness", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_45brightness(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_44brightness[] = "\n    SHADER BRIGHTNESS\n\n    This shader control the pygame display brightness level\n    It uses two external functions coded in C, struct_rgb_to_hsl & struct_hsl_to_rgb\n    \n    Parameter shift_ is a float value in range [ -1.0 ... 1.0]. with +1.0 for the \n    maximum brightness. A value of 0.0 will not perform any changes to the original \n    surface\n    \n    Compatible 24 - 32 bit with or without alpha layer\n    \n    * The changes are automatically applied inplace to the surface, you do not need to create a \n      new surface.  \n      \n    e.g:\n    brightness(surface, 0.2)\n    \n    :param surface_ : pygame.surface; \n    :param shift_   : float must be in range [ -1.0 ... 1.0 ]\n    :return         : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_45brightness(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_shift_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_shift,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_shift)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("brightness", 1, 2, 2, 1); __PYX_ERR(1, 1067, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "brightness") < 0)) __PYX_ERR(1, 1067, __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_shift_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_shift_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1067, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("brightness", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1067, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.brightness", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_44brightness(__pyx_self, __pyx_v_surface_, __pyx_v_shift_);
  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_6shader_44brightness(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_shift_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_brightness(__pyx_v_surface_, __pyx_v_shift_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1067, __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.shader.brightness", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01068:     """
 01069:     SHADER BRIGHTNESS
 01070: 
 01071:     This shader control the pygame display brightness level
 01072:     It uses two external functions coded in C, struct_rgb_to_hsl & struct_hsl_to_rgb
 01073: 
 01074:     Parameter shift_ is a float value in range [ -1.0 ... 1.0]. with +1.0 for the
 01075:     maximum brightness. A value of 0.0 will not perform any changes to the original
 01076:     surface
 01077: 
 01078:     Compatible 24 - 32 bit with or without alpha layer
 01079: 
 01080:     * The changes are automatically applied inplace to the surface, you do not need to create a
 01081:       new surface.
 01082: 
 01083:     e.g:
 01084:     brightness(surface, 0.2)
 01085: 
 01086:     :param surface_ : pygame.surface;
 01087:     :param shift_   : float must be in range [ -1.0 ... 1.0 ]
 01088:     :return         : void
 01089:     """
+01090:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1090, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1090, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1090, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01091:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1091, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1090, __pyx_L1_error)
    }
  }
  #endif
 01092: 
+01093:     if shift_ == 0.0:
  __pyx_t_3 = ((__pyx_v_shift_ == 0.0) != 0);
  if (__pyx_t_3) {
/* … */
  }
+01094:         return
    goto __pyx_L0;
 01095: 
+01096:     assert -1.0 <= shift_ <= 1.0, "\nArgument shift_ must be in range [-1.0 ... 1.0]"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (-1.0 <= __pyx_v_shift_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_shift_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_shift__must_be_in_rang);
      __PYX_ERR(1, 1096, __pyx_L1_error)
    }
  }
  #endif
 01097:     cdef unsigned char [:,:,:] rgb_array
+01098:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }
+01099:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1099, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1099, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1099, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01100: 
+01101:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.brightness", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1101, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01102:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1102, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1102, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1102, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;
    __pyx_L6_except_error:;
 01103: 
+01104:     shader_brightness24_inplace_c(rgb_array, shift_)
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.shift_ = __pyx_v_shift_;
  __pyx_f_12PygameShader_6shader_shader_brightness24_inplace_c(__pyx_v_rgb_array, &__pyx_t_12); 
 01105: 
 01106: @cython.binding(False)
 01107: @cython.boundscheck(False)
 01108: @cython.wraparound(False)
 01109: @cython.nonecheck(False)
 01110: @cython.cdivision(True)
 01111: @cython.profile(False)
+01112: cpdef inline void brightness_exclude(
static PyObject *__pyx_pw_12PygameShader_6shader_47brightness_exclude(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_brightness_exclude(PyObject *__pyx_v_surface_, float __pyx_v_shift_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_brightness_exclude *__pyx_optional_args) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.brightness_exclude", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_47brightness_exclude(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_46brightness_exclude[] = "\n\n    INCREASE/DECREASE A SURFACE BRIGHTNESS (OPTIONAL EXCLUDE COLOR)\n    \n    The optional setting (color_) allow you to select a color that will not \n    be included in the processing. This can be useful if you know the background \n    color RGB values and do not wish the background to undergo a change in brightness    \n    \n    Parameter shift_ is a float value in range [ -1.0 ... 1.0]. with +1.0 for the \n    maximum brightness. A value of 0.0 will not perform any changes to the original \n    surface\n   \n    Parameter color_ is a tuple of RGB colors e.g (1, 1, 1) \n\n    :param surface_ : pygame.surface; \n    :param shift_   : float must be in range [ -1.0 ... 1.0 ]\n    :param color_   : tuple RGB to be excluded from the process\n    :return         : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_47brightness_exclude(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_shift_;
  PyObject *__pyx_v_color_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_exclude (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_shift,&__pyx_n_s_color,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_46brightness_exclude(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_shift_, PyObject *__pyx_v_color_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_exclude", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.color_ = __pyx_v_color_;
  __pyx_f_12PygameShader_6shader_brightness_exclude(__pyx_v_surface_, __pyx_v_shift_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.brightness_exclude", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01113:         object surface_,
 01114:         float shift_,
+01115:         color_=(0, 0, 0)
  PyObject *__pyx_v_color_ = ((PyObject *)__pyx_tuple__9);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_exclude", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_color_ = __pyx_optional_args->color_;
    }
  }
/* … */
    values[2] = ((PyObject *)__pyx_tuple__9);
    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_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_shift)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("brightness_exclude", 0, 2, 3, 1); __PYX_ERR(1, 1112, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_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, "brightness_exclude") < 0)) __PYX_ERR(1, 1112, __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);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_shift_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_shift_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1114, __pyx_L3_error)
    __pyx_v_color_ = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("brightness_exclude", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1112, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.brightness_exclude", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_46brightness_exclude(__pyx_self, __pyx_v_surface_, __pyx_v_shift_, __pyx_v_color_);
/* … */
  __pyx_tuple__9 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 1115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
 01116: ):
 01117:     """
 01118: 
 01119:     INCREASE/DECREASE A SURFACE BRIGHTNESS (OPTIONAL EXCLUDE COLOR)
 01120: 
 01121:     The optional setting (color_) allow you to select a color that will not
 01122:     be included in the processing. This can be useful if you know the background
 01123:     color RGB values and do not wish the background to undergo a change in brightness
 01124: 
 01125:     Parameter shift_ is a float value in range [ -1.0 ... 1.0]. with +1.0 for the
 01126:     maximum brightness. A value of 0.0 will not perform any changes to the original
 01127:     surface
 01128: 
 01129:     Parameter color_ is a tuple of RGB colors e.g (1, 1, 1)
 01130: 
 01131:     :param surface_ : pygame.surface;
 01132:     :param shift_   : float must be in range [ -1.0 ... 1.0 ]
 01133:     :param color_   : tuple RGB to be excluded from the process
 01134:     :return         : void
 01135:     """
+01136:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1136, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01137:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1136, __pyx_L1_error)
    }
  }
  #endif
 01138: 
+01139:     if shift_ == 0.0:
  __pyx_t_3 = ((__pyx_v_shift_ == 0.0) != 0);
  if (__pyx_t_3) {
/* … */
  }
+01140:         return
    goto __pyx_L0;
 01141: 
+01142:     assert -1.0 <= shift_ <= 1.0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (-1.0 <= __pyx_v_shift_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_shift_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_shift__must_be_in_range);
      __PYX_ERR(1, 1142, __pyx_L1_error)
    }
  }
  #endif
 01143:         "Argument shift_ must be in range[-1.0 ... 1.0]"
 01144:     cdef unsigned char [:,:,:] rgb_array
+01145:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }
+01146:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1146, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1146, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1146, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01147: 
+01148:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.brightness_exclude", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1148, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01149:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1149, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1149, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1149, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;
    __pyx_L6_except_error:;
 01150: 
+01151:     shader_brightness24_exclude_inplace_c(rgb_array, shift_, color_)
  __pyx_t_12.__pyx_n = 2;
  __pyx_t_12.shift_ = __pyx_v_shift_;
  __pyx_t_12.color_ = __pyx_v_color_;
  __pyx_f_12PygameShader_6shader_shader_brightness24_exclude_inplace_c(__pyx_v_rgb_array, &__pyx_t_12); 
 01152: 
 01153: 
 01154: @cython.binding(False)
 01155: @cython.boundscheck(False)
 01156: @cython.wraparound(False)
 01157: @cython.nonecheck(False)
 01158: @cython.cdivision(True)
 01159: @cython.profile(False)
+01160: cpdef inline void brightness_bpf(
static PyObject *__pyx_pw_12PygameShader_6shader_49brightness_bpf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_brightness_bpf(PyObject *__pyx_v_surface_, float __pyx_v_shift_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_brightness_bpf *__pyx_optional_args) {
  unsigned char __pyx_v_bpf_threshold = ((unsigned char)64);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_bpf", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_bpf_threshold = __pyx_optional_args->bpf_threshold;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.brightness_bpf", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_49brightness_bpf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_48brightness_bpf[] = "\n\n    INCREASE/DECREASE SURFACE BRIGHTNESS \n\n    bpf_threshold is an integer value in range [0..255] that \n    determines the pixels threshold for the brightness algorithm. \n    The sum RGB below this threshold will not be included in the process  \n    R + G + B < Threshold \n\n\n    :param surface_: Pygame.Surface compatible 24 - 32 bit \n\n    :param shift_: float, must be in range [-1.00 ... +1.00]\n\n    :param bpf_threshold : integer value in range [0 ... 255].\n    threshold RGB. Values R+G+B < threshold will not be included in the process\n    :return: void \n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_49brightness_bpf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_shift_;
  unsigned char __pyx_v_bpf_threshold;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_bpf (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_shift,&__pyx_n_s_bpf_threshold,0};
    PyObject* values[3] = {0,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  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_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_shift)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("brightness_bpf", 0, 2, 3, 1); __PYX_ERR(1, 1160, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bpf_threshold);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "brightness_bpf") < 0)) __PYX_ERR(1, 1160, __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);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_shift_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_shift_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1162, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_bpf_threshold = __Pyx_PyInt_As_unsigned_char(values[2]); if (unlikely((__pyx_v_bpf_threshold == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 1163, __pyx_L3_error)
    } else {
      __pyx_v_bpf_threshold = ((unsigned char)64);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("brightness_bpf", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1160, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.brightness_bpf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_48brightness_bpf(__pyx_self, __pyx_v_surface_, __pyx_v_shift_, __pyx_v_bpf_threshold);
  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_6shader_48brightness_bpf(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_shift_, unsigned char __pyx_v_bpf_threshold) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_bpf", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.bpf_threshold = __pyx_v_bpf_threshold;
  __pyx_f_12PygameShader_6shader_brightness_bpf(__pyx_v_surface_, __pyx_v_shift_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.brightness_bpf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01161:         object surface_,
 01162:         float shift_,
 01163:         unsigned char bpf_threshold = 64):
 01164:     """
 01165: 
 01166:     INCREASE/DECREASE SURFACE BRIGHTNESS
 01167: 
 01168:     bpf_threshold is an integer value in range [0..255] that
 01169:     determines the pixels threshold for the brightness algorithm.
 01170:     The sum RGB below this threshold will not be included in the process
 01171:     R + G + B < Threshold
 01172: 
 01173: 
 01174:     :param surface_: Pygame.Surface compatible 24 - 32 bit
 01175: 
 01176:     :param shift_: float, must be in range [-1.00 ... +1.00]
 01177: 
 01178:     :param bpf_threshold : integer value in range [0 ... 255].
 01179:     threshold RGB. Values R+G+B < threshold will not be included in the process
 01180:     :return: void
 01181: 
 01182:     """
+01183:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1183, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01184:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1184, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1183, __pyx_L1_error)
    }
  }
  #endif
 01185: 
+01186:     assert -1.0 <= shift_ <= 1.0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (-1.0 <= __pyx_v_shift_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_shift_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_shift_must_be_in_range);
      __PYX_ERR(1, 1186, __pyx_L1_error)
    }
  }
  #endif
 01187:         "Argument shift must be in range[-1.0 ... 1.0]"
 01188:     cdef unsigned char [:,:,:] rgb_array
+01189:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01190:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1190, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1190, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1190, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01191: 
+01192:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.brightness_bpf", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1192, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01193:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1193, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1193, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1193, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01194: 
+01195:     shader_brightness24_bpf_c(rgb_array, shift_, bpf_threshold)
  __pyx_t_12.__pyx_n = 2;
  __pyx_t_12.shift_ = __pyx_v_shift_;
  __pyx_t_12.bpf_treshold_ = __pyx_v_bpf_threshold;
  __pyx_f_12PygameShader_6shader_shader_brightness24_bpf_c(__pyx_v_rgb_array, &__pyx_t_12); 
 01196: 
 01197: @cython.binding(False)
 01198: @cython.boundscheck(False)
 01199: @cython.wraparound(False)
 01200: @cython.nonecheck(False)
 01201: @cython.cdivision(True)
 01202: @cython.profile(False)
+01203: cpdef inline void brightness_model(
static PyObject *__pyx_pw_12PygameShader_6shader_51brightness_model(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_brightness_model(PyObject *__pyx_v_surface_, float __pyx_v_shift_, __Pyx_memviewslice __pyx_v_rgb_to_hsl_model, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_model", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.brightness_model", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_51brightness_model(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_50brightness_model[] = "\n    \n    SHADER BRIGHTNESS (EXCLUDE A SPECIFIC COLOR FROM THE PROCESS, DEFAULT BLACK COLOR)\n\n    This shader control the pygame display brightness level\n    It uses two external functions coded in C, struct_rgb_to_hsl & struct_hsl_to_rgb\n\n    e.g:\n    brightness_exclude(surface, 0.2)\n    \n    :param surface_ : pygame.surface; compatible 24 - 32 bit \n    :param shift_   : float in range [-1.0 ... 1.0 ]\n    :param rgb_to_hsl_model : numpy.ndarray shape (256, 256, 256, 3)\n    :return : void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_51brightness_model(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_shift_;
  __Pyx_memviewslice __pyx_v_rgb_to_hsl_model = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_model (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_shift,&__pyx_n_s_rgb_to_hsl_model,0};
    PyObject* values[3] = {0,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  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_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_shift)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("brightness_model", 1, 3, 3, 1); __PYX_ERR(1, 1203, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rgb_to_hsl_model)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("brightness_model", 1, 3, 3, 2); __PYX_ERR(1, 1203, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "brightness_model") < 0)) __PYX_ERR(1, 1203, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_shift_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_shift_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1205, __pyx_L3_error)
    __pyx_v_rgb_to_hsl_model = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_rgb_to_hsl_model.memview)) __PYX_ERR(1, 1206, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("brightness_model", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1203, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.brightness_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_50brightness_model(__pyx_self, __pyx_v_surface_, __pyx_v_shift_, __pyx_v_rgb_to_hsl_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_6shader_50brightness_model(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_shift_, __Pyx_memviewslice __pyx_v_rgb_to_hsl_model) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("brightness_model", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_rgb_to_hsl_model.memview)) { __Pyx_RaiseUnboundLocalError("rgb_to_hsl_model"); __PYX_ERR(1, 1203, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_brightness_model(__pyx_v_surface_, __pyx_v_shift_, __pyx_v_rgb_to_hsl_model, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1203, __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.shader.brightness_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_to_hsl_model, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01204:         object surface_,
 01205:         float shift_,
 01206:         float [:, :, :, :] rgb_to_hsl_model
 01207: ):
 01208:     """
 01209: 
 01210:     SHADER BRIGHTNESS (EXCLUDE A SPECIFIC COLOR FROM THE PROCESS, DEFAULT BLACK COLOR)
 01211: 
 01212:     This shader control the pygame display brightness level
 01213:     It uses two external functions coded in C, struct_rgb_to_hsl & struct_hsl_to_rgb
 01214: 
 01215:     e.g:
 01216:     brightness_exclude(surface, 0.2)
 01217: 
 01218:     :param surface_ : pygame.surface; compatible 24 - 32 bit
 01219:     :param shift_   : float in range [-1.0 ... 1.0 ]
 01220:     :param rgb_to_hsl_model : numpy.ndarray shape (256, 256, 256, 3)
 01221:     :return : void
 01222:     """
+01223:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1223, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01224:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1224, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1223, __pyx_L1_error)
    }
  }
  #endif
 01225: 
+01226:     warnings.warn("Deprecated version, use shader_brightness_24_inplace (fastest version)",
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_warnings); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__10 = PyTuple_Pack(2, __pyx_kp_s_Deprecated_version_use_shader_br, __pyx_builtin_DeprecationWarning); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 1226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);
 01227:                   DeprecationWarning)
+01228:     assert -1.0 <= shift_ <= 1.0, "\nArgument shift_ must be in range [-1.0 ... 1.0]"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (-1.0 <= __pyx_v_shift_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_shift_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_shift__must_be_in_rang);
      __PYX_ERR(1, 1228, __pyx_L1_error)
    }
  }
  #endif
 01229:     cdef unsigned char [:,:,:] rgb_array
+01230:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01231:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1231, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1231, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1231, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01232: 
+01233:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.brightness_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1233, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01234:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1234, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1234, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1234, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01235: 
+01236:     shader_brightness_24_inplace1_c(rgb_array, shift_, rgb_to_hsl_model)
  __pyx_f_12PygameShader_6shader_shader_brightness_24_inplace1_c(__pyx_v_rgb_array, __pyx_v_shift_, __pyx_v_rgb_to_hsl_model);
 01237: 
 01238: 
 01239: 
 01240: @cython.binding(False)
 01241: @cython.boundscheck(False)
 01242: @cython.wraparound(False)
 01243: @cython.nonecheck(False)
 01244: @cython.cdivision(True)
 01245: @cython.profile(False)
+01246: cpdef inline void saturation(object surface_, float shift_):
static PyObject *__pyx_pw_12PygameShader_6shader_53saturation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_saturation(PyObject *__pyx_v_surface_, float __pyx_v_shift_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("saturation", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.saturation", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_53saturation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_52saturation[] = "\n    SHADER SATURATION\n\n    This shader control the saturation level of the pygame display or surface/texture\n\n    e.g:\n    saturation(surface, 0.2)\n    \n    \n    :param surface_: pygame.Surface; compatible 24 - 32 bit\n    :param shift_  : float must be in range [ -1.0 ... 1.0] \n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_53saturation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_shift_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("saturation (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_shift,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_shift)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("saturation", 1, 2, 2, 1); __PYX_ERR(1, 1246, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "saturation") < 0)) __PYX_ERR(1, 1246, __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_shift_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_shift_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1246, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("saturation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1246, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.saturation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_52saturation(__pyx_self, __pyx_v_surface_, __pyx_v_shift_);
  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_6shader_52saturation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_shift_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("saturation", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_saturation(__pyx_v_surface_, __pyx_v_shift_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1246, __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.shader.saturation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01247:     """
 01248:     SHADER SATURATION
 01249: 
 01250:     This shader control the saturation level of the pygame display or surface/texture
 01251: 
 01252:     e.g:
 01253:     saturation(surface, 0.2)
 01254: 
 01255: 
 01256:     :param surface_: pygame.Surface; compatible 24 - 32 bit
 01257:     :param shift_  : float must be in range [ -1.0 ... 1.0]
 01258:     :return:
 01259:     """
+01260:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1260, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1260, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1260, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01261:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1260, __pyx_L1_error)
    }
  }
  #endif
 01262: 
+01263:     if shift_ < -1.0: shift_ = -1.0
  __pyx_t_3 = ((__pyx_v_shift_ < -1.0) != 0);
  if (__pyx_t_3) {
    __pyx_v_shift_ = -1.0;
  }
+01264:     if shift_ > 1.0: shift_ = 1.0
  __pyx_t_3 = ((__pyx_v_shift_ > 1.0) != 0);
  if (__pyx_t_3) {
    __pyx_v_shift_ = 1.0;
  }
 01265:     cdef unsigned char [:,:,:] rgb_array
+01266:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L10_try_end:;
  }
+01267:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1267, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1267, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1267, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01268: 
+01269:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.saturation", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1269, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01270:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1270, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1270, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1270, __pyx_L7_except_error)
    }
    goto __pyx_L7_except_error;
    __pyx_L7_except_error:;
 01271: 
+01272:     shader_saturation_array24_inplace_c(rgb_array, shift_)
  __pyx_f_12PygameShader_6shader_shader_saturation_array24_inplace_c(__pyx_v_rgb_array, __pyx_v_shift_);
 01273: 
 01274: 
 01275: @cython.binding(False)
 01276: @cython.boundscheck(False)
 01277: @cython.wraparound(False)
 01278: @cython.nonecheck(False)
 01279: @cython.cdivision(True)
 01280: @cython.profile(False)
+01281: cpdef inline void heatwave_vertical(
static PyObject *__pyx_pw_12PygameShader_6shader_55heatwave_vertical(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_heatwave_vertical(PyObject *__pyx_v_surface_, __Pyx_memviewslice __pyx_v_mask, float __pyx_v_factor_, float __pyx_v_center_, float __pyx_v_sigma_, float __pyx_v_mu_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatwave_vertical", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.heatwave_vertical", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_55heatwave_vertical(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_54heatwave_vertical[] = "\n\n    APPLY A GAUSSIAN TRANSFORMATION TO A SURFACE\n\n    This effect can be use to simulate air turbulence or heat flow/convection\n\n    :param surface_  : pygame.Surface; compatible 24 - 32 bit \n    :param mask      : numpy.ndarray shape (x, y) uint8, (values 255 or 0).\n                       Apply transformation to the original array\n                       if the value @(x, y) is 255 else remain unchanged.\n    :param factor_   : Control the maximum of the gaussian equation.\n                       No transformation if factor_ equal zero\n    :param center_   : Control the center of the gaussian equation (if center_ equal zero,\n                       the Gauss equation is centered\n                       at x=0 and maximum is 0.4 with amplitude_ = 1.0)\n    :param sigma_    : float; sigma value of the gauss equation\n    :param mu_       : float; mu value of the gauss equation\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_55heatwave_vertical(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  __Pyx_memviewslice __pyx_v_mask = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_factor_;
  float __pyx_v_center_;
  float __pyx_v_sigma_;
  float __pyx_v_mu_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatwave_vertical (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_mask,&__pyx_n_s_factor,&__pyx_n_s_center,&__pyx_n_s_sigma,&__pyx_n_s_mu,0};
    PyObject* values[6] = {0,0,0,0,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  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_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_mask)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("heatwave_vertical", 1, 6, 6, 1); __PYX_ERR(1, 1281, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factor)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("heatwave_vertical", 1, 6, 6, 2); __PYX_ERR(1, 1281, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_center)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("heatwave_vertical", 1, 6, 6, 3); __PYX_ERR(1, 1281, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sigma)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("heatwave_vertical", 1, 6, 6, 4); __PYX_ERR(1, 1281, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("heatwave_vertical", 1, 6, 6, 5); __PYX_ERR(1, 1281, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "heatwave_vertical") < 0)) __PYX_ERR(1, 1281, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_mask = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_char(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_mask.memview)) __PYX_ERR(1, 1283, __pyx_L3_error)
    __pyx_v_factor_ = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_factor_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1284, __pyx_L3_error)
    __pyx_v_center_ = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_center_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1285, __pyx_L3_error)
    __pyx_v_sigma_ = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_sigma_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1286, __pyx_L3_error)
    __pyx_v_mu_ = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_mu_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1287, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("heatwave_vertical", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1281, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.heatwave_vertical", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_54heatwave_vertical(__pyx_self, __pyx_v_surface_, __pyx_v_mask, __pyx_v_factor_, __pyx_v_center_, __pyx_v_sigma_, __pyx_v_mu_);
  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_6shader_54heatwave_vertical(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, __Pyx_memviewslice __pyx_v_mask, float __pyx_v_factor_, float __pyx_v_center_, float __pyx_v_sigma_, float __pyx_v_mu_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatwave_vertical", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_mask.memview)) { __Pyx_RaiseUnboundLocalError("mask"); __PYX_ERR(1, 1281, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_heatwave_vertical(__pyx_v_surface_, __pyx_v_mask, __pyx_v_factor_, __pyx_v_center_, __pyx_v_sigma_, __pyx_v_mu_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1281, __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.shader.heatwave_vertical", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_mask, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01282:         object surface_,
 01283:         unsigned char [:, :] mask,
 01284:         float factor_,
 01285:         float center_,
 01286:         float sigma_,
 01287:         float mu_):
 01288:     """
 01289: 
 01290:     APPLY A GAUSSIAN TRANSFORMATION TO A SURFACE
 01291: 
 01292:     This effect can be use to simulate air turbulence or heat flow/convection
 01293: 
 01294:     :param surface_  : pygame.Surface; compatible 24 - 32 bit
 01295:     :param mask      : numpy.ndarray shape (x, y) uint8, (values 255 or 0).
 01296:                        Apply transformation to the original array
 01297:                        if the value @(x, y) is 255 else remain unchanged.
 01298:     :param factor_   : Control the maximum of the gaussian equation.
 01299:                        No transformation if factor_ equal zero
 01300:     :param center_   : Control the center of the gaussian equation (if center_ equal zero,
 01301:                        the Gauss equation is centered
 01302:                        at x=0 and maximum is 0.4 with amplitude_ = 1.0)
 01303:     :param sigma_    : float; sigma value of the gauss equation
 01304:     :param mu_       : float; mu value of the gauss equation
 01305:     """
+01306:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1306, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01307:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1307, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1306, __pyx_L1_error)
    }
  }
  #endif
 01308: 
+01309:     assert PyObject_IsInstance(mask, (numpy.ndarray, cython.view.memoryview)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_mask, 2, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_memoryview_type));
    __pyx_t_4 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_2, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1309, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01310:         "\nArgument mask must be a numpy.array or memoryview type, got %s " % type(mask)
      __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_mask, 2, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1310, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_mask_must_be_a_numpy_a, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1310, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1309, __pyx_L1_error)
    }
  }
  #endif
 01311: 
 01312:     cdef unsigned char [:,:,:] rgb_array
+01313:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01314:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1314, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1314, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1314, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01315: 
+01316:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.heatwave_vertical", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(1, 1316, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01317:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1317, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1317, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1317, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01318: 
+01319:     shader_heatwave24_vertical_inplace_c(rgb_array, mask, factor_, center_, sigma_, mu_)
  __pyx_f_12PygameShader_6shader_shader_heatwave24_vertical_inplace_c(__pyx_v_rgb_array, __pyx_v_mask, __pyx_v_factor_, __pyx_v_center_, __pyx_v_sigma_, __pyx_v_mu_);
 01320: 
 01321: 
 01322: @cython.binding(False)
 01323: @cython.boundscheck(False)
 01324: @cython.wraparound(False)
 01325: @cython.nonecheck(False)
 01326: @cython.cdivision(True)
 01327: @cython.profile(False)
+01328: cpdef inline void horizontal_glitch(
static PyObject *__pyx_pw_12PygameShader_6shader_57horizontal_glitch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_horizontal_glitch(PyObject *__pyx_v_surface_, float __pyx_v_rad1_, float __pyx_v_frequency_, float __pyx_v_amplitude_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("horizontal_glitch", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.horizontal_glitch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_57horizontal_glitch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_56horizontal_glitch[] = "\n    SHADER GLITCH EFFECT\n\n    Deform the pygame display to create a glitch effect\n\n    :param surface_  : pygame.Surface; compatible 24 - 32 bit \n    :param rad1_     : float; Angle in radians, this value control the angle variation over the time\n    :param frequency_: float; signal frequency, factor that amplify the angle variation\n    :param amplitude_: float; cos amplitude value\n    :return: void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_57horizontal_glitch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  float __pyx_v_rad1_;
  float __pyx_v_frequency_;
  float __pyx_v_amplitude_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("horizontal_glitch (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_rad1,&__pyx_n_s_frequency,&__pyx_n_s_amplitude,0};
    PyObject* values[4] = {0,0,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  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_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_rad1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("horizontal_glitch", 1, 4, 4, 1); __PYX_ERR(1, 1328, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frequency)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("horizontal_glitch", 1, 4, 4, 2); __PYX_ERR(1, 1328, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_amplitude)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("horizontal_glitch", 1, 4, 4, 3); __PYX_ERR(1, 1328, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "horizontal_glitch") < 0)) __PYX_ERR(1, 1328, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_rad1_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_rad1_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1330, __pyx_L3_error)
    __pyx_v_frequency_ = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_frequency_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1331, __pyx_L3_error)
    __pyx_v_amplitude_ = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_amplitude_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1332, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("horizontal_glitch", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1328, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.horizontal_glitch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_56horizontal_glitch(__pyx_self, __pyx_v_surface_, __pyx_v_rad1_, __pyx_v_frequency_, __pyx_v_amplitude_);
  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_6shader_56horizontal_glitch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, float __pyx_v_rad1_, float __pyx_v_frequency_, float __pyx_v_amplitude_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("horizontal_glitch", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_horizontal_glitch(__pyx_v_surface_, __pyx_v_rad1_, __pyx_v_frequency_, __pyx_v_amplitude_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1328, __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.shader.horizontal_glitch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01329:         object surface_,
 01330:         float rad1_,
 01331:         float frequency_,
 01332:         float amplitude_
 01333: ):
 01334:     """
 01335:     SHADER GLITCH EFFECT
 01336: 
 01337:     Deform the pygame display to create a glitch effect
 01338: 
 01339:     :param surface_  : pygame.Surface; compatible 24 - 32 bit
 01340:     :param rad1_     : float; Angle in radians, this value control the angle variation over the time
 01341:     :param frequency_: float; signal frequency, factor that amplify the angle variation
 01342:     :param amplitude_: float; cos amplitude value
 01343:     :return: void
 01344:     """
+01345:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1345, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01346:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1346, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1345, __pyx_L1_error)
    }
  }
  #endif
 01347: 
 01348:     cdef unsigned char [:,:,:] rgb_array
+01349:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01350:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1350, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1350, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1350, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01351: 
+01352:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.horizontal_glitch", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1352, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01353:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1353, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1353, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1353, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01354: 
+01355:     shader_horizontal_glitch24_inplace_c(rgb_array, rad1_, frequency_, amplitude_)
  __pyx_f_12PygameShader_6shader_shader_horizontal_glitch24_inplace_c(__pyx_v_rgb_array, __pyx_v_rad1_, __pyx_v_frequency_, __pyx_v_amplitude_);
 01356: 
 01357: 
 01358: @cython.binding(False)
 01359: @cython.boundscheck(False)
 01360: @cython.wraparound(False)
 01361: @cython.nonecheck(False)
 01362: @cython.cdivision(True)
 01363: @cython.profile(False)
+01364: cpdef inline void bpf(object surface_, int threshold = 128):
static PyObject *__pyx_pw_12PygameShader_6shader_59bpf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_bpf(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_bpf *__pyx_optional_args) {
  int __pyx_v_threshold = ((int)0x80);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bpf", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_threshold = __pyx_optional_args->threshold;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.bpf", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_59bpf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_58bpf[] = "\n    \n    SHADER BRIGHT PASS FILTER (INPLACE)\n\n    Conserve only the brightest pixels in a surface\n\n    :param surface_ : pygame.Surface; compatible 24 - 32 bit \n    :param threshold: integer; Bright pass threshold default 128\n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_59bpf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_threshold;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bpf (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_threshold_2,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_threshold_2);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bpf") < 0)) __PYX_ERR(1, 1364, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_threshold = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_threshold == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1364, __pyx_L3_error)
    } else {
      __pyx_v_threshold = ((int)0x80);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bpf", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1364, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.bpf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_58bpf(__pyx_self, __pyx_v_surface_, __pyx_v_threshold);
  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_6shader_58bpf(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_threshold) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bpf", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.threshold = __pyx_v_threshold;
  __pyx_f_12PygameShader_6shader_bpf(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.bpf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01365:     """
 01366: 
 01367:     SHADER BRIGHT PASS FILTER (INPLACE)
 01368: 
 01369:     Conserve only the brightest pixels in a surface
 01370: 
 01371:     :param surface_ : pygame.Surface; compatible 24 - 32 bit
 01372:     :param threshold: integer; Bright pass threshold default 128
 01373:     :return: void
 01374:     """
+01375:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1375, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01376:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1376, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1375, __pyx_L1_error)
    }
  }
  #endif
 01377: 
 01378:     cdef unsigned char [:,:,:] rgb_array
+01379:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01380:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1380, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1380, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1380, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01381: 
+01382:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.bpf", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1382, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01383:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1383, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1383, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1383, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01384: 
+01385:     shader_bpf24_inplace_c(rgb_array, threshold)
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.threshold = __pyx_v_threshold;
  __pyx_f_12PygameShader_6shader_shader_bpf24_inplace_c(__pyx_v_rgb_array, &__pyx_t_12); 
 01386: 
 01387: 
 01388: @cython.binding(False)
 01389: @cython.boundscheck(False)
 01390: @cython.wraparound(False)
 01391: @cython.nonecheck(False)
 01392: @cython.cdivision(True)
 01393: @cython.profile(False)
+01394: cpdef inline void bloom(object surface_, int threshold_, bint fast_=False,
static PyObject *__pyx_pw_12PygameShader_6shader_61bloom(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_bloom(PyObject *__pyx_v_surface_, int __pyx_v_threshold_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_bloom *__pyx_optional_args) {
  int __pyx_v_fast_ = ((int)0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("PygameShader.shader.bloom", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_61bloom(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_60bloom[] = "\n    \n    CREATE A BLOOM EFFECT\n\n    * Surface must be a pygame Surface 24-32 bit format\n\n    :param surface_     : pygame.Surface; Game display or texture\n    :param threshold_   : integer; Threshold value uint8 in range [0 ... 255].\n                          The threshold value is used by a bright\n                          pass filter to determine the bright pixels above the given threshold.\n                          Below 128 the bloom effect will be more\n                          noticeable and above 128 a bit less.\n    :param fast_        : bool; True | False; If True the bloom effect will be approximated\n                          and only the x16 subsurface\n                          will be processed to maximize the overall processing time, \n                          default is False).\n    :param mask_        : \n    :return             : void\n    \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_61bloom(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_threshold_;
  int __pyx_v_fast_;
  PyObject *__pyx_v_mask_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bloom (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_threshold,&__pyx_n_s_fast,&__pyx_n_s_mask_2,0};
    PyObject* values[4] = {0,0,0,0};
/* … */
      __pyx_v_fast_ = ((int)0);
    }
    __pyx_v_mask_ = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bloom", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1394, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.bloom", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_60bloom(__pyx_self, __pyx_v_surface_, __pyx_v_threshold_, __pyx_v_fast_, __pyx_v_mask_);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_60bloom(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_threshold_, int __pyx_v_fast_, PyObject *__pyx_v_mask_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bloom", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 2;
  __pyx_t_1.fast_ = __pyx_v_fast_;
  __pyx_t_1.mask_ = __pyx_v_mask_;
  __pyx_f_12PygameShader_6shader_bloom(__pyx_v_surface_, __pyx_v_threshold_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.bloom", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01395:                         object mask_=None):
  PyObject *__pyx_v_mask_ = ((PyObject *)Py_None);
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bloom", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fast_ = __pyx_optional_args->fast_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_mask_ = __pyx_optional_args->mask_;
      }
    }
  }
/* … */
    values[3] = ((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  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_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_threshold)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bloom", 0, 2, 4, 1); __PYX_ERR(1, 1394, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fast);
          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_mask_2);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bloom") < 0)) __PYX_ERR(1, 1394, __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_surface_ = values[0];
    __pyx_v_threshold_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_threshold_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1394, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_fast_ = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_fast_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1394, __pyx_L3_error)
    } else {
 01396:     """
 01397: 
 01398:     CREATE A BLOOM EFFECT
 01399: 
 01400:     * Surface must be a pygame Surface 24-32 bit format
 01401: 
 01402:     :param surface_     : pygame.Surface; Game display or texture
 01403:     :param threshold_   : integer; Threshold value uint8 in range [0 ... 255].
 01404:                           The threshold value is used by a bright
 01405:                           pass filter to determine the bright pixels above the given threshold.
 01406:                           Below 128 the bloom effect will be more
 01407:                           noticeable and above 128 a bit less.
 01408:     :param fast_        : bool; True | False; If True the bloom effect will be approximated
 01409:                           and only the x16 subsurface
 01410:                           will be processed to maximize the overall processing time,
 01411:                           default is False).
 01412:     :param mask_        :
 01413:     :return             : void
 01414: 
 01415:     """
+01416:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1416, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1416, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1416, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01417:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1417, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1416, __pyx_L1_error)
    }
  }
  #endif
 01418: 
+01419:     shader_bloom_effect_array24_c(surface_, threshold_, fast_, mask_)
  __pyx_t_4.__pyx_n = 2;
  __pyx_t_4.fast_ = __pyx_v_fast_;
  __pyx_t_4.mask_ = __pyx_v_mask_;
  __pyx_f_12PygameShader_6shader_shader_bloom_effect_array24_c(__pyx_v_surface_, __pyx_v_threshold_, &__pyx_t_4); 
 01420: 
 01421: 
 01422: @cython.binding(False)
 01423: @cython.boundscheck(False)
 01424: @cython.wraparound(False)
 01425: @cython.nonecheck(False)
 01426: @cython.cdivision(True)
 01427: @cython.profile(False)
+01428: cpdef inline fisheye_footprint(
static PyObject *__pyx_pw_12PygameShader_6shader_63fisheye_footprint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_fisheye_footprint(int __pyx_v_w, int __pyx_v_h, unsigned int __pyx_v_centre_x, unsigned int __pyx_v_centre_y, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fisheye_footprint", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("PygameShader.shader.fisheye_footprint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_63fisheye_footprint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_62fisheye_footprint[] = "\n\n    :param centre_y: centre y coordinate\n    :param centre_x: centre x coordinate\n    :param w: integer; width of the fisheye model\n    :param h: integer; height of the fisheye model\n    :return: Return a numpy.ndarray type (w, h, 2) representing the fisheye model (coordinates\n    of all surface pixels passing through the fisheye lens model)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_63fisheye_footprint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_w;
  int __pyx_v_h;
  unsigned int __pyx_v_centre_x;
  unsigned int __pyx_v_centre_y;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fisheye_footprint (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_w,&__pyx_n_s_h,&__pyx_n_s_centre_x,&__pyx_n_s_centre_y,0};
    PyObject* values[4] = {0,0,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  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_w)) != 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_h)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fisheye_footprint", 1, 4, 4, 1); __PYX_ERR(1, 1428, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_centre_x)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fisheye_footprint", 1, 4, 4, 2); __PYX_ERR(1, 1428, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_centre_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fisheye_footprint", 1, 4, 4, 3); __PYX_ERR(1, 1428, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fisheye_footprint") < 0)) __PYX_ERR(1, 1428, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_w = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_w == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1429, __pyx_L3_error)
    __pyx_v_h = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_h == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1429, __pyx_L3_error)
    __pyx_v_centre_x = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_centre_x == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1430, __pyx_L3_error)
    __pyx_v_centre_y = __Pyx_PyInt_As_unsigned_int(values[3]); if (unlikely((__pyx_v_centre_y == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1431, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fisheye_footprint", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1428, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.fisheye_footprint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_62fisheye_footprint(__pyx_self, __pyx_v_w, __pyx_v_h, __pyx_v_centre_x, __pyx_v_centre_y);
  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_6shader_62fisheye_footprint(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_w, int __pyx_v_h, unsigned int __pyx_v_centre_x, unsigned int __pyx_v_centre_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fisheye_footprint", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_fisheye_footprint(__pyx_v_w, __pyx_v_h, __pyx_v_centre_x, __pyx_v_centre_y, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1428, __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.shader.fisheye_footprint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01429:         int w, int h,
 01430:         unsigned int centre_x,
 01431:         unsigned int centre_y):
 01432:     """
 01433: 
 01434:     :param centre_y: centre y coordinate
 01435:     :param centre_x: centre x coordinate
 01436:     :param w: integer; width of the fisheye model
 01437:     :param h: integer; height of the fisheye model
 01438:     :return: Return a numpy.ndarray type (w, h, 2) representing the fisheye model (coordinates
 01439:     of all surface pixels passing through the fisheye lens model)
 01440:     """
+01441:     return shader_fisheye24_footprint_c(w, h, centre_x, centre_y)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_shader_fisheye24_footprint_c(__pyx_v_w, __pyx_v_h, __pyx_v_centre_x, __pyx_v_centre_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01442: 
 01443: 
 01444: 
 01445: @cython.binding(False)
 01446: @cython.boundscheck(False)
 01447: @cython.wraparound(False)
 01448: @cython.nonecheck(False)
 01449: @cython.cdivision(True)
 01450: @cython.profile(False)
+01451: cpdef inline void fisheye(
static PyObject *__pyx_pw_12PygameShader_6shader_65fisheye(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_fisheye(PyObject *__pyx_v_surface_, __Pyx_memviewslice __pyx_v_fisheye_model, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fisheye", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.fisheye", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_65fisheye(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_64fisheye[] = "\n    THIS SHADER CAN BE USE TO DISPLAY THE GAME THROUGH A LENS EFFECT\n\n    Display a fisheye effect in real time given a surface referencing the\n    pixels RGB. In order to accomplish a real time calculation, \n    this algorithm is using a pre-calculated transformation stored\n    in the array fisheye_model.\n    \n    The function shader_fisheye24_footprint_c has to be called prior\n    shader_fisheye24_inplace_c in order to store the transformation values.\n\n    This shader can be applied directly to the pygame display\n\n    :param fisheye_model    : numpy.ndarray shape (width, height, 2) int32, fisheye model\n    containing the pixels\n    coordinates after the fisheye transformation\n    :return                 : void\n    \n    :param surface_      : pygame.Surface; compatible 24 - 32 bit \n    :param fisheye_model : numpy.ndarray or cython memoryview shape (width, height, 2) int32, \n                           fisheye model containing the pixels\n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_65fisheye(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  __Pyx_memviewslice __pyx_v_fisheye_model = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fisheye (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_fisheye_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_fisheye_model)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fisheye", 1, 2, 2, 1); __PYX_ERR(1, 1451, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fisheye") < 0)) __PYX_ERR(1, 1451, __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_fisheye_model = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_fisheye_model.memview)) __PYX_ERR(1, 1452, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fisheye", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1451, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.fisheye", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_64fisheye(__pyx_self, __pyx_v_surface_, __pyx_v_fisheye_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_6shader_64fisheye(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, __Pyx_memviewslice __pyx_v_fisheye_model) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fisheye", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_fisheye_model.memview)) { __Pyx_RaiseUnboundLocalError("fisheye_model"); __PYX_ERR(1, 1451, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_fisheye(__pyx_v_surface_, __pyx_v_fisheye_model, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1451, __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.shader.fisheye", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_fisheye_model, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01452:         object surface_, unsigned int [:, :, :] fisheye_model):
 01453:     """
 01454:     THIS SHADER CAN BE USE TO DISPLAY THE GAME THROUGH A LENS EFFECT
 01455: 
 01456:     Display a fisheye effect in real time given a surface referencing the
 01457:     pixels RGB. In order to accomplish a real time calculation,
 01458:     this algorithm is using a pre-calculated transformation stored
 01459:     in the array fisheye_model.
 01460: 
 01461:     The function shader_fisheye24_footprint_c has to be called prior
 01462:     shader_fisheye24_inplace_c in order to store the transformation values.
 01463: 
 01464:     This shader can be applied directly to the pygame display
 01465: 
 01466:     :param fisheye_model    : numpy.ndarray shape (width, height, 2) int32, fisheye model
 01467:     containing the pixels
 01468:     coordinates after the fisheye transformation
 01469:     :return                 : void
 01470: 
 01471:     :param surface_      : pygame.Surface; compatible 24 - 32 bit
 01472:     :param fisheye_model : numpy.ndarray or cython memoryview shape (width, height, 2) int32,
 01473:                            fisheye model containing the pixels
 01474:     :return: void
 01475:     """
 01476: 
 01477:     # TODO EXPERIMENT WITH ORDER = 'C'
+01478:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1478, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01479:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1479, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1478, __pyx_L1_error)
    }
  }
  #endif
 01480: 
+01481:     assert PyObject_IsInstance(fisheye_model, (cython.view.memoryview, numpy.ndarray)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_fisheye_model, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_2, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1481, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
 01482:         "\nArgument fisheye_model must be a numpy.ndarray or a cython.view.memoryview  type, " \
+01483:         "got %s " % type(fisheye_model)
      __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_fisheye_model, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1483, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_fisheye_model_must_be, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1483, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1481, __pyx_L1_error)
    }
  }
  #endif
 01484: 
 01485:     cdef unsigned char [:,:,:] rgb_array
+01486:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01487:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1487, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1487, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1487, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01488: 
+01489:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.fisheye", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(1, 1489, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01490:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1490, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1490, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1490, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01491: 
+01492:     shader_fisheye24_inplace_c(rgb_array, fisheye_model)
  __pyx_f_12PygameShader_6shader_shader_fisheye24_inplace_c(__pyx_v_rgb_array, __pyx_v_fisheye_model);
 01493: 
 01494: 
 01495: @cython.binding(False)
 01496: @cython.boundscheck(False)
 01497: @cython.wraparound(False)
 01498: @cython.nonecheck(False)
 01499: @cython.cdivision(True)
 01500: @cython.profile(False)
 01501: # TODO DOC
+01502: cpdef inline tuple rain_footprint(int w, int h):
static PyObject *__pyx_pw_12PygameShader_6shader_67rain_footprint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_rain_footprint(int __pyx_v_w, int __pyx_v_h, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rain_footprint", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("PygameShader.shader.rain_footprint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_67rain_footprint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_66rain_footprint[] = "\n    \n    CREATE A FISH EYE LENS DEFORMATION MAP/TEXTURE\n\n    * This function create a texture and its equivalent numpy.ndarray containing the coordinates\n      for each pixels after deformation.\n    * This method must be called once outside of your game main loop\n    * The model can be re-use to display your video game animation without being re-calculated for\n      each frame. This method allow a high FPS rate\n\n    :param w    : integer; Width of the fish eye effect\n    :param h    : integer; height of the fish eye effect\n    :return     : Pygame Surface representing the fish-eye effect and its\n                  equivalent numpy.ndarray\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_67rain_footprint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_w;
  int __pyx_v_h;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rain_footprint (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_w,&__pyx_n_s_h,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_w)) != 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_h)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rain_footprint", 1, 2, 2, 1); __PYX_ERR(1, 1502, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rain_footprint") < 0)) __PYX_ERR(1, 1502, __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_w = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_w == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1502, __pyx_L3_error)
    __pyx_v_h = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_h == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1502, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rain_footprint", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1502, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.rain_footprint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_66rain_footprint(__pyx_self, __pyx_v_w, __pyx_v_h);
  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_6shader_66rain_footprint(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_w, int __pyx_v_h) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rain_footprint", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_rain_footprint(__pyx_v_w, __pyx_v_h, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1502, __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.shader.rain_footprint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01503:     """
 01504: 
 01505:     CREATE A FISH EYE LENS DEFORMATION MAP/TEXTURE
 01506: 
 01507:     * This function create a texture and its equivalent numpy.ndarray containing the coordinates
 01508:       for each pixels after deformation.
 01509:     * This method must be called once outside of your game main loop
 01510:     * The model can be re-use to display your video game animation without being re-calculated for
 01511:       each frame. This method allow a high FPS rate
 01512: 
 01513:     :param w    : integer; Width of the fish eye effect
 01514:     :param h    : integer; height of the fish eye effect
 01515:     :return     : Pygame Surface representing the fish-eye effect and its
 01516:                   equivalent numpy.ndarray
 01517:     """
+01518:     return shader_rain_footprint_inplace_c(w, h)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_shader_rain_footprint_inplace_c(__pyx_v_w, __pyx_v_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01519: 
 01520: 
 01521: 
 01522: @cython.binding(False)
 01523: @cython.boundscheck(False)
 01524: @cython.wraparound(False)
 01525: @cython.nonecheck(False)
 01526: @cython.cdivision(True)
 01527: @cython.profile(False)
 01528: # TODO DOC
+01529: cpdef inline void rain_fisheye(
static PyObject *__pyx_pw_12PygameShader_6shader_69rain_fisheye(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_rain_fisheye(PyObject *__pyx_v_surface_, __Pyx_memviewslice __pyx_v_rain_fisheye_model, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rain_fisheye", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.rain_fisheye", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_69rain_fisheye(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_68rain_fisheye[] = "\n    THIS SHADER CAN BE USED TO SIMULATE RAIN DROPLET OR BUBBLE DISPLAYED ON THE TOP OF\n    THE SCREEN SURFACE.\n\n    Both surface and rain_fisheye_model must have the exact same size\n\n    1) Always call the method shader_rain_footprint_inplace_c before the main loop.\n       The transformation model doesn't have to be calculated every frames.\n       The above method will generate a pygame texture (24bit) containing the location\n       of each pixels after deformation. It does also return a numpy.ndarray equivalent\n       pixel format that can be used instead of the surface if needed.\n\n    It uses a fish eye lens deformation to reproduce the deformed background image onto\n    the final image. The operation apply inplace and the surface referenced by the rgb_array_\n    will be modified directly.\n    The fish-eye lens deformation will recreate you game scene into the rain droplet or bubble\n    and create the illusion of animation inside the bubble.\n\n    * This shader cannot be applied directly to the pygame display as the array passed to the\n    function is a scaled format of the pygame.display (copy not referencing directly the\n    surface pixels)\n\n    * This algorithm use a pre-calculated fish-eye lens deformation model to boost the overall\n    FPS performances, the texture pixel is then transformed with the model without any intensive\n    math calculation.\n\n    :param surface_             : pygame.Surface compatible 24 - 32 bit \n    :param rain_fisheye_model   : numpy.ndarray or memoryview type (w, h, 3) unsigned int \n                                  containing the the coordinate for each pixels\n    :return                     : void\n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_69rain_fisheye(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  __Pyx_memviewslice __pyx_v_rain_fisheye_model = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rain_fisheye (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_rain_fisheye_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_rain_fisheye_model)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rain_fisheye", 1, 2, 2, 1); __PYX_ERR(1, 1529, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rain_fisheye") < 0)) __PYX_ERR(1, 1529, __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_rain_fisheye_model = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_rain_fisheye_model.memview)) __PYX_ERR(1, 1531, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rain_fisheye", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1529, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.rain_fisheye", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_68rain_fisheye(__pyx_self, __pyx_v_surface_, __pyx_v_rain_fisheye_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_6shader_68rain_fisheye(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, __Pyx_memviewslice __pyx_v_rain_fisheye_model) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rain_fisheye", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_rain_fisheye_model.memview)) { __Pyx_RaiseUnboundLocalError("rain_fisheye_model"); __PYX_ERR(1, 1529, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_rain_fisheye(__pyx_v_surface_, __pyx_v_rain_fisheye_model, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1529, __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.shader.rain_fisheye", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rain_fisheye_model, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01530:         object surface_,
 01531:         unsigned int [:, :, ::1] rain_fisheye_model
 01532: ):
 01533:     """
 01534:     THIS SHADER CAN BE USED TO SIMULATE RAIN DROPLET OR BUBBLE DISPLAYED ON THE TOP OF
 01535:     THE SCREEN SURFACE.
 01536: 
 01537:     Both surface and rain_fisheye_model must have the exact same size
 01538: 
 01539:     1) Always call the method shader_rain_footprint_inplace_c before the main loop.
 01540:        The transformation model doesn't have to be calculated every frames.
 01541:        The above method will generate a pygame texture (24bit) containing the location
 01542:        of each pixels after deformation. It does also return a numpy.ndarray equivalent
 01543:        pixel format that can be used instead of the surface if needed.
 01544: 
 01545:     It uses a fish eye lens deformation to reproduce the deformed background image onto
 01546:     the final image. The operation apply inplace and the surface referenced by the rgb_array_
 01547:     will be modified directly.
 01548:     The fish-eye lens deformation will recreate you game scene into the rain droplet or bubble
 01549:     and create the illusion of animation inside the bubble.
 01550: 
 01551:     * This shader cannot be applied directly to the pygame display as the array passed to the
 01552:     function is a scaled format of the pygame.display (copy not referencing directly the
 01553:     surface pixels)
 01554: 
 01555:     * This algorithm use a pre-calculated fish-eye lens deformation model to boost the overall
 01556:     FPS performances, the texture pixel is then transformed with the model without any intensive
 01557:     math calculation.
 01558: 
 01559:     :param surface_             : pygame.Surface compatible 24 - 32 bit
 01560:     :param rain_fisheye_model   : numpy.ndarray or memoryview type (w, h, 3) unsigned int
 01561:                                   containing the the coordinate for each pixels
 01562:     :return                     : void
 01563: 
 01564:     """
+01565:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1565, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1565, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1565, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01566:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1566, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1565, __pyx_L1_error)
    }
  }
  #endif
 01567: 
+01568:     assert PyObject_IsInstance(rain_fisheye_model, (numpy.ndarray, cython.view.memoryview)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_rain_fisheye_model, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_memoryview_type));
    __pyx_t_4 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_2, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1568, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
 01569:         "\nArgument rain_fisheye_model must be a " \
+01570:         "numpy.ndarray or a cython memoryview type, got %s " % type(rain_fisheye_model)
      __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_rain_fisheye_model, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1570, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_rain_fisheye_model_mus, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1570, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1568, __pyx_L1_error)
    }
  }
  #endif
 01571:     cdef unsigned char [:, :, :] rgb_array
+01572:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01573:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1573, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1573, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1573, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01574: 
+01575:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.rain_fisheye", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(1, 1575, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01576:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1576, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1576, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1576, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01577: 
+01578:     shader_rain_fisheye24_inplace_c(rgb_array, rain_fisheye_model)
  __pyx_f_12PygameShader_6shader_shader_rain_fisheye24_inplace_c(__pyx_v_rgb_array, __pyx_v_rain_fisheye_model);
 01579: 
 01580: 
 01581: 
 01582: @cython.binding(False)
 01583: @cython.boundscheck(False)
 01584: @cython.wraparound(False)
 01585: @cython.nonecheck(False)
 01586: @cython.cdivision(True)
 01587: @cython.profile(False)
+01588: cpdef inline void tv_scan(surface_, int space=5):
static PyObject *__pyx_pw_12PygameShader_6shader_71tv_scan(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_tv_scan(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_tv_scan *__pyx_optional_args) {
  int __pyx_v_space = ((int)5);
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tv_scan", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_space = __pyx_optional_args->space;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.tv_scan", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_71tv_scan(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_70tv_scan[] = "\n    \n    SHADER CREATING A TV SCANLINE EFFECT ON PYGAME SURFACE\n\n    The space between each scanline can by adjusted with the space value.\n    The scanline intensity/colors is lower that the original image\n\n    :param surface_     : pygame.Surface compatible 24-32 bit \n    :param space        : integer; space between the lines\n    :return             : void\n    \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_71tv_scan(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_space;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tv_scan (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_space,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_space);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tv_scan") < 0)) __PYX_ERR(1, 1588, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_space = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_space == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1588, __pyx_L3_error)
    } else {
      __pyx_v_space = ((int)5);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("tv_scan", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1588, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.tv_scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_70tv_scan(__pyx_self, __pyx_v_surface_, __pyx_v_space);
  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_6shader_70tv_scan(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_space) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tv_scan", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.space = __pyx_v_space;
  __pyx_f_12PygameShader_6shader_tv_scan(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.tv_scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01589:     """
 01590: 
 01591:     SHADER CREATING A TV SCANLINE EFFECT ON PYGAME SURFACE
 01592: 
 01593:     The space between each scanline can by adjusted with the space value.
 01594:     The scanline intensity/colors is lower that the original image
 01595: 
 01596:     :param surface_     : pygame.Surface compatible 24-32 bit
 01597:     :param space        : integer; space between the lines
 01598:     :return             : void
 01599: 
 01600:     """
 01601:     # TODO SCANLINE VERTICAL | HORIZONTAL
 01602: 
+01603:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1603, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01604:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1604, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1603, __pyx_L1_error)
    }
  }
  #endif
 01605: 
+01606:     assert space > 0, "Argument space cannot be <=0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_space > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_space_cannot_be_0);
      __PYX_ERR(1, 1606, __pyx_L1_error)
    }
  }
  #endif
 01607:     cdef unsigned char [:, :, :] rgb_array
+01608:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+01609:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1609, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1609, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 1609, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 01610: 
+01611:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.tv_scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 1611, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+01612:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1612, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1612, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1612, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 01613: 
+01614:     shader_tv_scanline_inplace_c(rgb_array, space)
  __pyx_f_12PygameShader_6shader_shader_tv_scanline_inplace_c(__pyx_v_rgb_array, __pyx_v_space);
 01615: 
 01616: 
 01617: 
 01618: @cython.binding(False)
 01619: @cython.boundscheck(False)
 01620: @cython.wraparound(False)
 01621: @cython.nonecheck(False)
 01622: @cython.cdivision(True)
 01623: @cython.profile(False)
+01624: cpdef inline void rgb_split(object surface_, int offset_=10):
static PyObject *__pyx_pw_12PygameShader_6shader_73rgb_split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_rgb_split(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_rgb_split *__pyx_optional_args) {
  int __pyx_v_offset_ = ((int)10);
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_split", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset_ = __pyx_optional_args->offset_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("PygameShader.shader.rgb_split", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_73rgb_split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_72rgb_split[] = "\n    \n    THIS SHADER CREATE AN RGB SPLIT EFFECT (SUPERPOSED CHANNEL R, G, B WITH GIVEN OFFSET)\n    The transformation apply inplace\n\n    The original surface will be used and used for the subsurface blit operation.\n    Each channels will be blit sequentially in the following order RGB\n    Note that channel green and blue will be blit with an additional flag BLEND_RGB_ADD, to mix\n    the channel with the lower layers.\n\n    * FPS BOOST\n    In order to boost the fps frame rate the original surface to process can be downscale x2\n    and rescale after processing.\n\n\n    :param surface_ : pygame Surface to process (24bit format)\n    :param offset_  : integer; offset for (x, y) to add to each channels RGB\n    :return         : void\n    \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_73rgb_split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_offset_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_split (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_offset,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rgb_split") < 0)) __PYX_ERR(1, 1624, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_offset_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_offset_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1624, __pyx_L3_error)
    } else {
      __pyx_v_offset_ = ((int)10);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rgb_split", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1624, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.rgb_split", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_72rgb_split(__pyx_self, __pyx_v_surface_, __pyx_v_offset_);
  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_6shader_72rgb_split(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_offset_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_split", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.offset_ = __pyx_v_offset_;
  __pyx_f_12PygameShader_6shader_rgb_split(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.rgb_split", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01625:     """
 01626: 
 01627:     THIS SHADER CREATE AN RGB SPLIT EFFECT (SUPERPOSED CHANNEL R, G, B WITH GIVEN OFFSET)
 01628:     The transformation apply inplace
 01629: 
 01630:     The original surface will be used and used for the subsurface blit operation.
 01631:     Each channels will be blit sequentially in the following order RGB
 01632:     Note that channel green and blue will be blit with an additional flag BLEND_RGB_ADD, to mix
 01633:     the channel with the lower layers.
 01634: 
 01635:     * FPS BOOST
 01636:     In order to boost the fps frame rate the original surface to process can be downscale x2
 01637:     and rescale after processing.
 01638: 
 01639: 
 01640:     :param surface_ : pygame Surface to process (24bit format)
 01641:     :param offset_  : integer; offset for (x, y) to add to each channels RGB
 01642:     :return         : void
 01643: 
 01644:     """
+01645:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1645, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01646:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1646, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1645, __pyx_L1_error)
    }
  }
  #endif
 01647: 
+01648:     shader_rgb_split_inplace_c(surface_, offset_)
  __pyx_f_12PygameShader_6shader_shader_rgb_split_inplace_c(__pyx_v_surface_, __pyx_v_offset_);
 01649: 
 01650: 
 01651: @cython.binding(False)
 01652: @cython.boundscheck(False)
 01653: @cython.wraparound(False)
 01654: @cython.nonecheck(False)
 01655: @cython.cdivision(True)
 01656: @cython.profile(False)
+01657: cpdef object rgb_split_clean(object surface_, int offset_=10):
static PyObject *__pyx_pw_12PygameShader_6shader_75rgb_split_clean(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_rgb_split_clean(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_rgb_split_clean *__pyx_optional_args) {
  int __pyx_v_offset_ = ((int)10);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_split_clean", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset_ = __pyx_optional_args->offset_;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.rgb_split_clean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_75rgb_split_clean(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_74rgb_split_clean[] = "\n\n    THIS SHADER CREATE AN RGB SPLIT EFFECT (SUPERPOSED CHANNEL R, G, B WITH GIVEN OFFSET)\n    The final image has a different width and height since the offset value is removed to keep only \n    the overlapping R, G, B channels \n    Setting the Offset_ to zero will have no effect to the original image.\n\n    :param surface_ : pygame Surface to process (24bit format)\n    :param offset_  : integer; offset for (x, y) to add to each channels RGB\n    :return         : pygame Surface\n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_75rgb_split_clean(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_offset_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_split_clean (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_offset,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rgb_split_clean") < 0)) __PYX_ERR(1, 1657, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_offset_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_offset_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1657, __pyx_L3_error)
    } else {
      __pyx_v_offset_ = ((int)10);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rgb_split_clean", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1657, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.rgb_split_clean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_74rgb_split_clean(__pyx_self, __pyx_v_surface_, __pyx_v_offset_);
  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_6shader_74rgb_split_clean(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_offset_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_split_clean", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.offset_ = __pyx_v_offset_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_rgb_split_clean(__pyx_v_surface_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1657, __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.shader.rgb_split_clean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01658:     """
 01659: 
 01660:     THIS SHADER CREATE AN RGB SPLIT EFFECT (SUPERPOSED CHANNEL R, G, B WITH GIVEN OFFSET)
 01661:     The final image has a different width and height since the offset value is removed to keep only
 01662:     the overlapping R, G, B channels
 01663:     Setting the Offset_ to zero will have no effect to the original image.
 01664: 
 01665:     :param surface_ : pygame Surface to process (24bit format)
 01666:     :param offset_  : integer; offset for (x, y) to add to each channels RGB
 01667:     :return         : pygame Surface
 01668: 
 01669:     """
+01670:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1670, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01671:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1671, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1670, __pyx_L1_error)
    }
  }
  #endif
 01672: 
+01673:     assert isinstance(offset_, int), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_offset_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyInt_Check(__pyx_t_2); 
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01674:         "\nArgument offset_ must be an int type, got %s" % type(offset_)
      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_offset_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1674, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_offset__must_be_an_int, ((PyObject *)Py_TYPE(__pyx_t_2))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1674, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 1673, __pyx_L1_error)
    }
  }
  #endif
 01675: 
+01676:     if offset_==0:
  __pyx_t_3 = ((__pyx_v_offset_ == 0) != 0);
  if (__pyx_t_3) {
/* … */
  }
+01677:         return surface_
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_surface_);
    __pyx_r = __pyx_v_surface_;
    goto __pyx_L0;
 01678: 
+01679:     return shader_rgb_split_c(surface_, offset_)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_shader_rgb_split_c(__pyx_v_surface_, __pyx_v_offset_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1679, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01680: 
 01681: 
 01682: 
 01683: @cython.binding(False)
 01684: @cython.boundscheck(False)
 01685: @cython.wraparound(False)
 01686: @cython.nonecheck(False)
 01687: @cython.cdivision(True)
 01688: @cython.profile(False)
+01689: cpdef inline tuple ripple(
static PyObject *__pyx_pw_12PygameShader_6shader_77ripple(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_ripple(int __pyx_v_rows_, int __pyx_v_cols_, __Pyx_memviewslice __pyx_v_previous_, __Pyx_memviewslice __pyx_v_current_, __Pyx_memviewslice __pyx_v_array_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_prev_w;
  Py_ssize_t __pyx_v_prev_h;
  Py_ssize_t __pyx_v_curr_w;
  Py_ssize_t __pyx_v_curr_h;
  Py_ssize_t __pyx_v_arr_w;
  Py_ssize_t __pyx_v_arr_h;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ripple", 0);
/* … */
  /* 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_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("PygameShader.shader.ripple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_77ripple(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_76ripple[] = "\n    \n    THIS SHADER CREATE A WATER EFFECT ON A PYGAME SURFACE\n    This version does not include any background deformation to keep a reasonable FPS rate\n\n    * NOTE this shader cannot be apply to the screen directly (screen referencing\n    pygame.display.get_surface()),\n\n    :param rows_        : integer; Array width\n    :param cols_        : integer; Array height\n    :param previous_    : numpy.ndarray type (w, h) type float; array use for the transformation\n    :param current_     : numpy.ndarray type (w, h) type float; array use for the transformation\n    :param array_       : numpy.ndarray type (w, h, 3) type unsigned char\n    :return             : void\n    \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_77ripple(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rows_;
  int __pyx_v_cols_;
  __Pyx_memviewslice __pyx_v_previous_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_current_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ripple (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rows,&__pyx_n_s_cols,&__pyx_n_s_previous,&__pyx_n_s_current,&__pyx_n_s_array,0};
    PyObject* values[5] = {0,0,0,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  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_rows)) != 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_cols)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ripple", 1, 5, 5, 1); __PYX_ERR(1, 1689, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_previous)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ripple", 1, 5, 5, 2); __PYX_ERR(1, 1689, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_current)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ripple", 1, 5, 5, 3); __PYX_ERR(1, 1689, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_array)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ripple", 1, 5, 5, 4); __PYX_ERR(1, 1689, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ripple") < 0)) __PYX_ERR(1, 1689, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_rows_ = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rows_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1690, __pyx_L3_error)
    __pyx_v_cols_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_cols_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1691, __pyx_L3_error)
    __pyx_v_previous_ = __Pyx_PyObject_to_MemoryviewSlice_d_dc_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_previous_.memview)) __PYX_ERR(1, 1692, __pyx_L3_error)
    __pyx_v_current_ = __Pyx_PyObject_to_MemoryviewSlice_d_dc_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_current_.memview)) __PYX_ERR(1, 1693, __pyx_L3_error)
    __pyx_v_array_ = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_array_.memview)) __PYX_ERR(1, 1694, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ripple", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1689, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.ripple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_76ripple(__pyx_self, __pyx_v_rows_, __pyx_v_cols_, __pyx_v_previous_, __pyx_v_current_, __pyx_v_array_);
  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_6shader_76ripple(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_rows_, int __pyx_v_cols_, __Pyx_memviewslice __pyx_v_previous_, __Pyx_memviewslice __pyx_v_current_, __Pyx_memviewslice __pyx_v_array_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ripple", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_previous_.memview)) { __Pyx_RaiseUnboundLocalError("previous_"); __PYX_ERR(1, 1689, __pyx_L1_error) }
  if (unlikely(!__pyx_v_current_.memview)) { __Pyx_RaiseUnboundLocalError("current_"); __PYX_ERR(1, 1689, __pyx_L1_error) }
  if (unlikely(!__pyx_v_array_.memview)) { __Pyx_RaiseUnboundLocalError("array_"); __PYX_ERR(1, 1689, __pyx_L1_error) }
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_ripple(__pyx_v_rows_, __pyx_v_cols_, __pyx_v_previous_, __pyx_v_current_, __pyx_v_array_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1689, __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.shader.ripple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_previous_, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_current_, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_array_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01690:         int rows_,
 01691:         int cols_,
 01692:         float [:, ::1] previous_,
 01693:         float [:, ::1] current_,
 01694:         unsigned char [:, :, ::1] array_
 01695: ):
 01696:     """
 01697: 
 01698:     THIS SHADER CREATE A WATER EFFECT ON A PYGAME SURFACE
 01699:     This version does not include any background deformation to keep a reasonable FPS rate
 01700: 
 01701:     * NOTE this shader cannot be apply to the screen directly (screen referencing
 01702:     pygame.display.get_surface()),
 01703: 
 01704:     :param rows_        : integer; Array width
 01705:     :param cols_        : integer; Array height
 01706:     :param previous_    : numpy.ndarray type (w, h) type float; array use for the transformation
 01707:     :param current_     : numpy.ndarray type (w, h) type float; array use for the transformation
 01708:     :param array_       : numpy.ndarray type (w, h, 3) type unsigned char
 01709:     :return             : void
 01710: 
 01711:     """
+01712:     assert PyObject_IsInstance(previous_, (numpy.ndarray, cython.view.memoryview)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_previous_, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1712, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1712, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1712, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1712, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_memoryview_type));
    __pyx_t_3 = 0;
    __pyx_t_4 = PyObject_IsInstance(__pyx_t_1, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1712, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_4 != 0))) {
+01713:         "\nArgument previous must be a numpy.ndarray type got %s " % type(previous_)
      __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_previous_, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1713, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_previous_must_be_a_num, ((PyObject *)Py_TYPE(__pyx_t_2))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1713, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 1712, __pyx_L1_error)
    }
  }
  #endif
 01714: 
+01715:     assert PyObject_IsInstance(current_, (numpy.ndarray, cython.view.memoryview)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_current_, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1715, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1715, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1715, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1715, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_memoryview_type));
    __pyx_t_3 = 0;
    __pyx_t_4 = PyObject_IsInstance(__pyx_t_1, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1715, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_4 != 0))) {
+01716:         "\nArgument current must be a numpy.ndarray type got %s " % type(current_)
      __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_current_, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1716, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_current_must_be_a_nump, ((PyObject *)Py_TYPE(__pyx_t_2))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1716, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 1715, __pyx_L1_error)
    }
  }
  #endif
 01717: 
+01718:     assert PyObject_IsInstance(array_, (numpy.ndarray, cython.view.memoryview)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_array_, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_memoryview_type));
    __pyx_t_3 = 0;
    __pyx_t_4 = PyObject_IsInstance(__pyx_t_1, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1718, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_4 != 0))) {
+01719:         "\nArgument array must be a numpy.ndarray type got %s " % type(array_)
      __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_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(1, 1719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_array_must_be_a_numpy, ((PyObject *)Py_TYPE(__pyx_t_2))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 1718, __pyx_L1_error)
    }
  }
  #endif
 01720: 
 01721:     cdef Py_ssize_t prev_w, prev_h
+01722:     prev_w, prev_h = previous_.shape[:2]
  __pyx_t_5 = __pyx_v_previous_.shape;
  __pyx_t_6 = (__pyx_t_5[0]);
  __pyx_t_7 = (__pyx_t_5[1]);
  __pyx_v_prev_w = __pyx_t_6;
  __pyx_v_prev_h = __pyx_t_7;
 01723: 
 01724:     cdef Py_ssize_t curr_w, curr_h
+01725:     curr_w, curr_h = current_.shape[:2]
  __pyx_t_5 = __pyx_v_current_.shape;
  __pyx_t_7 = (__pyx_t_5[0]);
  __pyx_t_6 = (__pyx_t_5[1]);
  __pyx_v_curr_w = __pyx_t_7;
  __pyx_v_curr_h = __pyx_t_6;
 01726: 
 01727:     cdef Py_ssize_t arr_w, arr_h
+01728:     arr_w, arr_h = array_.shape[:2]
  __pyx_t_5 = __pyx_v_array_.shape;
  __pyx_t_6 = (__pyx_t_5[0]);
  __pyx_t_7 = (__pyx_t_5[1]);
  __pyx_v_arr_w = __pyx_t_6;
  __pyx_v_arr_h = __pyx_t_7;
 01729: 
+01730:     assert prev_w == curr_w and prev_w == arr_w \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_8 = ((__pyx_v_prev_w == __pyx_v_curr_w) != 0);
    if (__pyx_t_8) {
    } else {
      __pyx_t_4 = __pyx_t_8;
      goto __pyx_L3_bool_binop_done;
    }
/* … */
    __pyx_t_8 = ((__pyx_v_prev_w == __pyx_v_arr_w) != 0);
    if (__pyx_t_8) {
    } else {
      __pyx_t_4 = __pyx_t_8;
      goto __pyx_L3_bool_binop_done;
    }
+01731:            and prev_h == curr_h and prev_h == arr_h, \
    __pyx_t_8 = ((__pyx_v_prev_h == __pyx_v_curr_h) != 0);
    if (__pyx_t_8) {
    } else {
      __pyx_t_4 = __pyx_t_8;
      goto __pyx_L3_bool_binop_done;
    }
    __pyx_t_8 = ((__pyx_v_prev_h == __pyx_v_arr_h) != 0);
    __pyx_t_4 = __pyx_t_8;
    __pyx_L3_bool_binop_done:;
    if (unlikely(!__pyx_t_4)) {
 01732:         "\n Array sizes mismatch (previous w: %s, h: %s; " \
+01733:         "current w: %s, h: %s; array_ w: %s, h: %s " % (prev_w, prev_h, curr_w, curr_h,
      __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_prev_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_prev_h); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_curr_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_curr_h); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
/* … */
      __pyx_t_12 = PyTuple_New(6); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 1733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_12, 4, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_12, 5, __pyx_t_11);
      __pyx_t_1 = 0;
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_9 = 0;
      __pyx_t_10 = 0;
      __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyString_Format(__pyx_kp_s_Array_sizes_mismatch_previous_w, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_11);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 1730, __pyx_L1_error)
    }
  }
  #endif
+01734:         arr_w, arr_h)
      __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_arr_w); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1734, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_arr_h); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1734, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
 01735: 
+01736:     return shader_ripple_c(rows_, cols_, previous_, current_, array_)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_11 = __pyx_f_12PygameShader_6shader_shader_ripple_c(__pyx_v_rows_, __pyx_v_cols_, __pyx_v_previous_, __pyx_v_current_, __pyx_v_array_); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_r = ((PyObject*)__pyx_t_11);
  __pyx_t_11 = 0;
  goto __pyx_L0;
 01737: 
 01738: 
 01739: 
 01740: @cython.binding(False)
 01741: @cython.boundscheck(False)
 01742: @cython.wraparound(False)
 01743: @cython.nonecheck(False)
 01744: @cython.cdivision(True)
 01745: @cython.profile(False)
+01746: cpdef inline void heatmap(object surface_, bint rgb_=True):
static PyObject *__pyx_pw_12PygameShader_6shader_79heatmap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_heatmap(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_heatmap *__pyx_optional_args) {
  int __pyx_v_rgb_ = ((int)1);
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatmap", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_rgb_ = __pyx_optional_args->rgb_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("PygameShader.shader.heatmap", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_79heatmap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_78heatmap[] = "\n    TRANSFORM AN IMAGE INTO A HEATMAP EQUIVALENT\n\n    :param surface_ : pygame.Surface\n    :param rgb_     : boolean; True transformed the image into a RGB heatmap model of False (BGR)\n    :return         : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_79heatmap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_rgb_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatmap (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_rgb,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rgb);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "heatmap") < 0)) __PYX_ERR(1, 1746, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_rgb_ = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_rgb_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1746, __pyx_L3_error)
    } else {
      __pyx_v_rgb_ = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("heatmap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1746, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.heatmap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_78heatmap(__pyx_self, __pyx_v_surface_, __pyx_v_rgb_);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_78heatmap(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_rgb_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatmap", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.rgb_ = __pyx_v_rgb_;
  __pyx_f_12PygameShader_6shader_heatmap(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1746, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.heatmap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01747:     """
 01748:     TRANSFORM AN IMAGE INTO A HEATMAP EQUIVALENT
 01749: 
 01750:     :param surface_ : pygame.Surface
 01751:     :param rgb_     : boolean; True transformed the image into a RGB heatmap model of False (BGR)
 01752:     :return         : void
 01753:     """
+01754:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1754, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01755:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1755, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1754, __pyx_L1_error)
    }
  }
  #endif
 01756: 
+01757:     heatmap_convert(surface_, rgb_)
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.rgb_ = __pyx_v_rgb_;
  __pyx_f_12PygameShader_6shader_heatmap_convert(__pyx_v_surface_, 0, &__pyx_t_4); 
 01758: 
 01759: 
 01760: 
 01761: 
 01762: @cython.binding(False)
 01763: @cython.boundscheck(False)
 01764: @cython.wraparound(False)
 01765: @cython.nonecheck(False)
 01766: @cython.cdivision(True)
 01767: @cython.profile(False)
+01768: cpdef inline predator_vision(
static PyObject *__pyx_pw_12PygameShader_6shader_81predator_vision(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_predator_vision(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_predator_vision *__pyx_optional_args) {
  unsigned int __pyx_v_sobel_threshold = ((unsigned int)12);
  unsigned int __pyx_v_bpf_threshold = ((unsigned int)50);
  unsigned int __pyx_v_bloom_threshold = ((unsigned int)50);
/* … */
  /* 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_10);
  __Pyx_AddTraceback("PygameShader.shader.predator_vision", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_surface_copy);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_81predator_vision(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_80predator_vision[] = "\n    CONVERT A SURFACE OR DISPLAY TO AN EQUIVALENT PREDATOR MODE \n\n    :param surface_        : pygame.Surface; compatible 24 - 32 bit \n    :param sobel_threshold : integer; value for sobel edge detection, default is 12 \n    :param bpf_threshold   : integer; value for the bright pass filter pixel detection, \n                             default is 50\n    :param bloom_threshold : integer; Value for the bloom effect intensity default is 50\n    :param inv_colormap    : boolean True | False inverse the colormap aspect, default is False\n    :param fast            : boolean True | False for a fast process, default is False\n    :param blend           : boolean True | False; final blending mode (New in version 1.0.4)  \n    :return                : Return a pygame surface  \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_81predator_vision(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  unsigned int __pyx_v_sobel_threshold;
  unsigned int __pyx_v_bpf_threshold;
  unsigned int __pyx_v_bloom_threshold;
  int __pyx_v_inv_colormap;
  int __pyx_v_fast;
  int __pyx_v_blend;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("predator_vision (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_sobel_threshold,&__pyx_n_s_bpf_threshold,&__pyx_n_s_bloom_threshold,&__pyx_n_s_inv_colormap,&__pyx_n_s_fast_2,&__pyx_n_s_blend,0};
    PyObject* values[7] = {0,0,0,0,0,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  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_surface)) != 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_sobel_threshold);
          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_bpf_threshold);
          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_bloom_threshold);
          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_inv_colormap);
          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_fast_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_blend);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "predator_vision") < 0)) __PYX_ERR(1, 1768, __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);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_surface_ = values[0];
    if (values[1]) {
      __pyx_v_sobel_threshold = __Pyx_PyInt_As_unsigned_int(values[1]); if (unlikely((__pyx_v_sobel_threshold == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1770, __pyx_L3_error)
    } else {
      __pyx_v_sobel_threshold = ((unsigned int)12);
    }
    if (values[2]) {
      __pyx_v_bpf_threshold = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_bpf_threshold == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1771, __pyx_L3_error)
    } else {
      __pyx_v_bpf_threshold = ((unsigned int)50);
    }
    if (values[3]) {
      __pyx_v_bloom_threshold = __Pyx_PyInt_As_unsigned_int(values[3]); if (unlikely((__pyx_v_bloom_threshold == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1772, __pyx_L3_error)
    } else {
      __pyx_v_bloom_threshold = ((unsigned int)50);
    }
    if (values[4]) {
      __pyx_v_inv_colormap = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_inv_colormap == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1773, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_80predator_vision(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, unsigned int __pyx_v_sobel_threshold, unsigned int __pyx_v_bpf_threshold, unsigned int __pyx_v_bloom_threshold, int __pyx_v_inv_colormap, int __pyx_v_fast, int __pyx_v_blend) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("predator_vision", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 6;
  __pyx_t_2.sobel_threshold = __pyx_v_sobel_threshold;
  __pyx_t_2.bpf_threshold = __pyx_v_bpf_threshold;
  __pyx_t_2.bloom_threshold = __pyx_v_bloom_threshold;
  __pyx_t_2.inv_colormap = __pyx_v_inv_colormap;
  __pyx_t_2.fast = __pyx_v_fast;
  __pyx_t_2.blend = __pyx_v_blend;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_predator_vision(__pyx_v_surface_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1768, __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.shader.predator_vision", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01769:         object surface_,
 01770:         unsigned int sobel_threshold=12,
 01771:         unsigned int bpf_threshold=50,
 01772:         unsigned int bloom_threshold=50,
+01773:         bint inv_colormap=False,
  int __pyx_v_inv_colormap = ((int)0);
/* … */
      __pyx_v_inv_colormap = ((int)0);
    }
    if (values[5]) {
      __pyx_v_fast = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_fast == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1774, __pyx_L3_error)
    } else {
+01774:         bint fast=False,
  int __pyx_v_fast = ((int)0);
  int __pyx_v_blend = __pyx_k__11;
  PyObject *__pyx_v_surface_copy = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("predator_vision", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_sobel_threshold = __pyx_optional_args->sobel_threshold;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_bpf_threshold = __pyx_optional_args->bpf_threshold;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_bloom_threshold = __pyx_optional_args->bloom_threshold;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_inv_colormap = __pyx_optional_args->inv_colormap;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_fast = __pyx_optional_args->fast;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_blend = __pyx_optional_args->blend;
              }
            }
          }
        }
      }
    }
  }
/* … */
      __pyx_v_fast = ((int)0);
    }
    if (values[6]) {
      __pyx_v_blend = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_blend == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1775, __pyx_L3_error)
    } else {
      __pyx_v_blend = __pyx_k__11;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("predator_vision", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1768, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.predator_vision", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_80predator_vision(__pyx_self, __pyx_v_surface_, __pyx_v_sobel_threshold, __pyx_v_bpf_threshold, __pyx_v_bloom_threshold, __pyx_v_inv_colormap, __pyx_v_fast, __pyx_v_blend);
+01775:         int blend=pygame.BLEND_RGB_ADD
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_pygame); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 1775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __pyx_t_32 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 1775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_32); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1775, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __pyx_k__11 = __pyx_t_7;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_32, __pyx_n_s_pygame); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 1775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
/* … */
  __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_32, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 1775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_33); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1775, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __pyx_k__11 = __pyx_t_7;
 01776: ):
 01777:     """
 01778:     CONVERT A SURFACE OR DISPLAY TO AN EQUIVALENT PREDATOR MODE
 01779: 
 01780:     :param surface_        : pygame.Surface; compatible 24 - 32 bit
 01781:     :param sobel_threshold : integer; value for sobel edge detection, default is 12
 01782:     :param bpf_threshold   : integer; value for the bright pass filter pixel detection,
 01783:                              default is 50
 01784:     :param bloom_threshold : integer; Value for the bloom effect intensity default is 50
 01785:     :param inv_colormap    : boolean True | False inverse the colormap aspect, default is False
 01786:     :param fast            : boolean True | False for a fast process, default is False
 01787:     :param blend           : boolean True | False; final blending mode (New in version 1.0.4)
 01788:     :return                : Return a pygame surface
 01789:     """
 01790: 
+01791:     surface_copy = surface_.copy()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 1791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_surface_copy = __pyx_t_1;
  __pyx_t_1 = 0;
 01792: 
+01793:     if fast:
  __pyx_t_4 = (__pyx_v_fast != 0);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
+01794:         sobel_fast(surface_copy, sobel_threshold, factor_=1)
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.threshold_ = __pyx_v_sobel_threshold;
    __pyx_t_5.factor_ = 1;
    __pyx_f_12PygameShader_6shader_sobel_fast(__pyx_v_surface_copy, 0, &__pyx_t_5); 
 01795:     else:
+01796:         sobel(surface_copy, sobel_threshold)
  /*else*/ {
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.threshold_ = __pyx_v_sobel_threshold;
    __pyx_f_12PygameShader_6shader_sobel(__pyx_v_surface_copy, 0, &__pyx_t_6); 
  }
  __pyx_L3:;
 01797: 
+01798:     bpf(surface_, bpf_threshold)
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.threshold = __pyx_v_bpf_threshold;
  __pyx_f_12PygameShader_6shader_bpf(__pyx_v_surface_, 0, &__pyx_t_7); 
+01799:     shader_bloom_fast1(surface_, bloom_threshold)
  __pyx_t_8.__pyx_n = 1;
  __pyx_t_8.smooth_ = __pyx_v_bloom_threshold;
  __pyx_f_12PygameShader_6shader_shader_bloom_fast1(__pyx_v_surface_, 0, &__pyx_t_8); 
+01800:     heatmap_convert(surface_, inv_colormap)
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.rgb_ = __pyx_v_inv_colormap;
  __pyx_f_12PygameShader_6shader_heatmap_convert(__pyx_v_surface_, 0, &__pyx_t_9); 
+01801:     surface_.blit(surface_copy, (0, 0), special_flags=blend)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_surface_copy);
  __Pyx_GIVEREF(__pyx_v_surface_copy);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_surface_copy);
  __Pyx_INCREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_tuple__12);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_blend); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_special_flags, __pyx_t_10) < 0) __PYX_ERR(1, 1801, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
  __pyx_tuple__12 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 1801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
 01802: 
+01803:     return surface_.convert()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_convert); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1803, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_10 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1803, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_10;
  __pyx_t_10 = 0;
  goto __pyx_L0;
 01804: 
 01805: 
 01806: 
 01807: @cython.binding(False)
 01808: @cython.boundscheck(False)
 01809: @cython.wraparound(False)
 01810: @cython.nonecheck(False)
 01811: @cython.cdivision(True)
 01812: @cython.profile(False)
+01813: cpdef inline blood(object surface_, float [:, :] mask_, float perc_):
static PyObject *__pyx_pw_12PygameShader_6shader_83blood(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_blood(PyObject *__pyx_v_surface_, __Pyx_memviewslice __pyx_v_mask_, float __pyx_v_perc_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  Py_ssize_t __pyx_v_mask_w;
  Py_ssize_t __pyx_v_mask_h;
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blood", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("PygameShader.shader.blood", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_83blood(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_82blood[] = "\n    SHADER 2D GAME \"HURT EFFECT\"\n    \n    This effect is used in 2D game when the player is being hurt\n    THE MASK DETERMINE THE CONTOUR USED FOR THE BLOOD EFFECT.\n\n    :param surface_ : pygame.Surface; compatible surface 24 - 32 bit\n    :param mask_    : numpy.ndarray shape (w, h) of float values in range [0.0...1.0]\n    :param perc_    : Percentage value in range [0.0 ... 1.0] with 1.0 being 100%\n    :return         : void\n    \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_83blood(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  __Pyx_memviewslice __pyx_v_mask_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_perc_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blood (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_mask_2,&__pyx_n_s_perc,0};
    PyObject* values[3] = {0,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  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_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_mask_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("blood", 1, 3, 3, 1); __PYX_ERR(1, 1813, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_perc)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("blood", 1, 3, 3, 2); __PYX_ERR(1, 1813, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "blood") < 0)) __PYX_ERR(1, 1813, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_surface_ = values[0];
    __pyx_v_mask_ = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_mask_.memview)) __PYX_ERR(1, 1813, __pyx_L3_error)
    __pyx_v_perc_ = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_perc_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1813, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("blood", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1813, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.blood", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_82blood(__pyx_self, __pyx_v_surface_, __pyx_v_mask_, __pyx_v_perc_);
  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_6shader_82blood(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, __Pyx_memviewslice __pyx_v_mask_, float __pyx_v_perc_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blood", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_mask_.memview)) { __Pyx_RaiseUnboundLocalError("mask_"); __PYX_ERR(1, 1813, __pyx_L1_error) }
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_blood(__pyx_v_surface_, __pyx_v_mask_, __pyx_v_perc_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1813, __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.shader.blood", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_mask_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01814:     """
 01815:     SHADER 2D GAME "HURT EFFECT"
 01816: 
 01817:     This effect is used in 2D game when the player is being hurt
 01818:     THE MASK DETERMINE THE CONTOUR USED FOR THE BLOOD EFFECT.
 01819: 
 01820:     :param surface_ : pygame.Surface; compatible surface 24 - 32 bit
 01821:     :param mask_    : numpy.ndarray shape (w, h) of float values in range [0.0...1.0]
 01822:     :param perc_    : Percentage value in range [0.0 ... 1.0] with 1.0 being 100%
 01823:     :return         : void
 01824: 
 01825:     """
+01826:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1826, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01827:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1826, __pyx_L1_error)
    }
  }
  #endif
 01828: 
+01829:     assert PyObject_IsInstance(mask_, (numpy.ndarray, cython.view.memoryview)), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_mask_, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
    __Pyx_INCREF(((PyObject *)__pyx_memoryview_type));
    __Pyx_GIVEREF(((PyObject *)__pyx_memoryview_type));
    PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_memoryview_type));
    __pyx_t_4 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_2, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1829, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+01830:         "\nArgument mask_ must be a numpy.ndarray or cython memoryview types got %s " % type(mask_)
      __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_mask_, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_mask__must_be_a_numpy, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1829, __pyx_L1_error)
    }
  }
  #endif
 01831: 
 01832:     cdef Py_ssize_t w, h
+01833:     w, h = surface_.get_size()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    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(1, 1833, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 1833, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 1833, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_w = __pyx_t_7;
  __pyx_v_h = __pyx_t_8;
 01834: 
 01835:     cdef Py_ssize_t mask_w, mask_h
+01836:     mask_w, mask_h = mask_.shape[:2]
  __pyx_t_9 = __pyx_v_mask_.shape;
  __pyx_t_8 = (__pyx_t_9[0]);
  __pyx_t_7 = (__pyx_t_9[1]);
  __pyx_v_mask_w = __pyx_t_8;
  __pyx_v_mask_h = __pyx_t_7;
 01837: 
+01838:     assert w == mask_w and h == mask_h, "\nSurface size and mask size mismatch"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_10 = ((__pyx_v_w == __pyx_v_mask_w) != 0);
    if (__pyx_t_10) {
    } else {
      __pyx_t_3 = __pyx_t_10;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_10 = ((__pyx_v_h == __pyx_v_mask_h) != 0);
    __pyx_t_3 = __pyx_t_10;
    __pyx_L5_bool_binop_done:;
    if (unlikely(!__pyx_t_3)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Surface_size_and_mask_size_mism);
      __PYX_ERR(1, 1838, __pyx_L1_error)
    }
  }
  #endif
 01839:     cdef unsigned char [:, :, :] rgb_array
+01840:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    goto __pyx_L12_try_end;
    __pyx_L7_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
    goto __pyx_L1_error;
    __pyx_L12_try_end:;
  }
+01841:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1841, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1841, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(1, 1841, __pyx_L7_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_14;
      __pyx_t_14.memview = NULL;
      __pyx_t_14.data = NULL;
 01842: 
+01843:     except Exception as e:
    __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_15) {
      __Pyx_AddTraceback("PygameShader.shader.blood", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_1) < 0) __PYX_ERR(1, 1843, __pyx_L9_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_e = __pyx_t_4;
+01844:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_5 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1844, __pyx_L9_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_16 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1844, __pyx_L9_except_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_16, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __PYX_ERR(1, 1844, __pyx_L9_except_error)
    }
    goto __pyx_L9_except_error;
    __pyx_L9_except_error:;
 01845: 
+01846:     shader_blood_inplace_c(rgb_array, mask_, perc_)
  __pyx_f_12PygameShader_6shader_shader_blood_inplace_c(__pyx_v_rgb_array, __pyx_v_mask_, __pyx_v_perc_);
 01847: 
 01848: @cython.binding(False)
 01849: @cython.boundscheck(False)
 01850: @cython.wraparound(False)
 01851: @cython.nonecheck(False)
 01852: @cython.cdivision(True)
 01853: @cython.profile(False)
 01854: # TODO DOC
+01855: cpdef inline object make_palette(int width, float fh, float fs, float fl):
static PyObject *__pyx_pw_12PygameShader_6shader_85make_palette(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_make_palette(int __pyx_v_width, float __pyx_v_fh, float __pyx_v_fs, float __pyx_v_fl, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_palette", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("PygameShader.shader.make_palette", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_85make_palette(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_84make_palette[] = "\n    \n    CREATE A PALETTE OF RGB COLORS\n\n    e.g:\n        # below: palette of 256 colors & surface (width=256, height=50).\n        # hue * 6, saturation = 255.0, lightness * 2.0\n        palette, surf = make_palette(256, 50, 6, 255, 2)\n        palette, surf = make_palette(256, 50, 4, 255, 2)\n\n    :param width  : integer, Palette width\n    :param fh     : float, hue factor\n    :param fs     : float, saturation factor\n    :param fl     : float, lightness factor\n    :return       : Return a 1D array palette\n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_85make_palette(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_width;
  float __pyx_v_fh;
  float __pyx_v_fs;
  float __pyx_v_fl;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_palette (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width,&__pyx_n_s_fh,&__pyx_n_s_fs,&__pyx_n_s_fl,0};
    PyObject* values[4] = {0,0,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  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_fh)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_palette", 1, 4, 4, 1); __PYX_ERR(1, 1855, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_palette", 1, 4, 4, 2); __PYX_ERR(1, 1855, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fl)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_palette", 1, 4, 4, 3); __PYX_ERR(1, 1855, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "make_palette") < 0)) __PYX_ERR(1, 1855, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_width = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1855, __pyx_L3_error)
    __pyx_v_fh = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_fh == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1855, __pyx_L3_error)
    __pyx_v_fs = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fs == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1855, __pyx_L3_error)
    __pyx_v_fl = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_fl == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1855, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_palette", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1855, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.make_palette", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_84make_palette(__pyx_self, __pyx_v_width, __pyx_v_fh, __pyx_v_fs, __pyx_v_fl);
  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_6shader_84make_palette(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width, float __pyx_v_fh, float __pyx_v_fs, float __pyx_v_fl) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_palette", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_make_palette(__pyx_v_width, __pyx_v_fh, __pyx_v_fs, __pyx_v_fl, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1855, __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.shader.make_palette", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01856:     """
 01857: 
 01858:     CREATE A PALETTE OF RGB COLORS
 01859: 
 01860:     e.g:
 01861:         # below: palette of 256 colors & surface (width=256, height=50).
 01862:         # hue * 6, saturation = 255.0, lightness * 2.0
 01863:         palette, surf = make_palette(256, 50, 6, 255, 2)
 01864:         palette, surf = make_palette(256, 50, 4, 255, 2)
 01865: 
 01866:     :param width  : integer, Palette width
 01867:     :param fh     : float, hue factor
 01868:     :param fs     : float, saturation factor
 01869:     :param fl     : float, lightness factor
 01870:     :return       : Return a 1D array palette
 01871: 
 01872:     """
 01873: 
+01874:     return make_palette_c(width, fh, fs, fl)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_make_palette_c(__pyx_v_width, __pyx_v_fh, __pyx_v_fs, __pyx_v_fl); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01875: 
 01876: 
 01877: @cython.binding(False)
 01878: @cython.boundscheck(False)
 01879: @cython.wraparound(False)
 01880: @cython.nonecheck(False)
 01881: @cython.cdivision(True)
 01882: @cython.profile(False)
+01883: cpdef inline fire_sub(
static PyObject *__pyx_pw_12PygameShader_6shader_87fire_sub(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_fire_sub(int __pyx_v_width, int __pyx_v_height, float __pyx_v_factor, __Pyx_memviewslice __pyx_v_palette, __Pyx_memviewslice __pyx_v_fire, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fire_sub", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("PygameShader.shader.fire_sub", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_87fire_sub(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_86fire_sub[] = "\n\n    CREATE A FIRE EFFECT\n\n    :param width    : integer; max width of the effect\n    :param height   : integer; max height of the effect\n    :param factor   : float; factor to reduce the flame effect\n    :param palette  : ndarray; Color palette 1d numpy array (colors buffer unsigned int values)\n    :param fire     : ndarray; 2d array (x, y) (contiguous) containing float values\n    :return         : Return a numpy array containing the fire effect array shape\n     (w, h, 3) of RGB pixels\n     \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_87fire_sub(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_width;
  int __pyx_v_height;
  float __pyx_v_factor;
  __Pyx_memviewslice __pyx_v_palette = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fire = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fire_sub (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width,&__pyx_n_s_height,&__pyx_n_s_factor_2,&__pyx_n_s_palette_2,&__pyx_n_s_fire,0};
    PyObject* values[5] = {0,0,0,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  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)) != 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("fire_sub", 1, 5, 5, 1); __PYX_ERR(1, 1883, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factor_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fire_sub", 1, 5, 5, 2); __PYX_ERR(1, 1883, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_palette_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fire_sub", 1, 5, 5, 3); __PYX_ERR(1, 1883, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fire)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fire_sub", 1, 5, 5, 4); __PYX_ERR(1, 1883, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fire_sub") < 0)) __PYX_ERR(1, 1883, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_width = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1884, __pyx_L3_error)
    __pyx_v_height = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1885, __pyx_L3_error)
    __pyx_v_factor = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_factor == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1886, __pyx_L3_error)
    __pyx_v_palette = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_palette.memview)) __PYX_ERR(1, 1887, __pyx_L3_error)
    __pyx_v_fire = __Pyx_PyObject_to_MemoryviewSlice_d_dc_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_fire.memview)) __PYX_ERR(1, 1888, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fire_sub", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1883, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.fire_sub", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_86fire_sub(__pyx_self, __pyx_v_width, __pyx_v_height, __pyx_v_factor, __pyx_v_palette, __pyx_v_fire);
  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_6shader_86fire_sub(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width, int __pyx_v_height, float __pyx_v_factor, __Pyx_memviewslice __pyx_v_palette, __Pyx_memviewslice __pyx_v_fire) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fire_sub", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_palette.memview)) { __Pyx_RaiseUnboundLocalError("palette"); __PYX_ERR(1, 1883, __pyx_L1_error) }
  if (unlikely(!__pyx_v_fire.memview)) { __Pyx_RaiseUnboundLocalError("fire"); __PYX_ERR(1, 1883, __pyx_L1_error) }
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_fire_sub(__pyx_v_width, __pyx_v_height, __pyx_v_factor, __pyx_v_palette, __pyx_v_fire, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1883, __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.shader.fire_sub", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_palette, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fire, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01884:         int width,
 01885:         int height,
 01886:         float factor,
 01887:         unsigned int [::1] palette,
 01888:         float [:, ::1] fire
 01889: ):
 01890:     """
 01891: 
 01892:     CREATE A FIRE EFFECT
 01893: 
 01894:     :param width    : integer; max width of the effect
 01895:     :param height   : integer; max height of the effect
 01896:     :param factor   : float; factor to reduce the flame effect
 01897:     :param palette  : ndarray; Color palette 1d numpy array (colors buffer unsigned int values)
 01898:     :param fire     : ndarray; 2d array (x, y) (contiguous) containing float values
 01899:     :return         : Return a numpy array containing the fire effect array shape
 01900:      (w, h, 3) of RGB pixels
 01901: 
 01902:     """
 01903: 
+01904:     return fire_surface24_c(width, height, factor, palette, fire)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_fire_surface24_c(__pyx_v_width, __pyx_v_height, __pyx_v_factor, __pyx_v_palette, __pyx_v_fire, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01905: 
 01906: 
 01907: 
 01908: @cython.binding(False)
 01909: @cython.boundscheck(False)
 01910: @cython.wraparound(False)
 01911: @cython.nonecheck(False)
 01912: @cython.cdivision(True)
 01913: @cython.profile(False)
+01914: cpdef inline fire_effect(
static PyObject *__pyx_pw_12PygameShader_6shader_89fire_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_fire_effect(int __pyx_v_width_, int __pyx_v_height_, float __pyx_v_factor_, __Pyx_memviewslice __pyx_v_palette_, __Pyx_memviewslice __pyx_v_fire_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_fire_effect *__pyx_optional_args) {
  unsigned short __pyx_v_reduce_factor_ = ((unsigned short)3);
  unsigned short __pyx_v_fire_intensity_ = ((unsigned short)32);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("PygameShader.shader.fire_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_89fire_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_88fire_effect[] = "\n    FIRE SHADER EFFECT \n\n    * FIRE TEXTURE SIZES \n    \n    input width_  : integer,  \n    input height_ : integer\n    \n    width_ and height_ values define the size of the texture e.g Surface(width x height)\n\n    * FIRE ASPECT (CONTROL OVER THE WIDTH): \n    \n    inputs low_ : integer  \n    input high_ : integer \n    \n    Optional arguments low_ & high_ (integer values) define the width 's limits of the fire effect. \n    low_ for the starting point and high_ for the ending of the effect.\n    e.g low_ = 10 and high_ = 200. The fire effect will be contain within width = 10 and 200\n    low_ & high_ values must be in range [0 ... width_]  \n        \n    * FIRE HEIGHT:\n    \n    input factor_ : float\n    \n    The fire maximum height can be adjust with the variable factor_ (float value)\n    value > 3.95 will contain the effect within the display \n    value < 3.95 will enlarge the effect over the display height  \n    Recommended value is 3.95 with reduce_factor_ = 3 otherwise adjust the value manually \n    to contain the fire effect within the display\n        \n    * SPEED CONSIDERATION\n    \n    input reduce_factor_ : integer\n    \n    The argument reduce_factor_ control the size of the texture to be processed \n    e.g : a value of 2, divide by 4 the pygame surface define by the values (width_ & height_)\n    Smaller texture improve the overall performances but will slightly degrade the fire aspect, \n    especially if the blur and smooth option are not enabled.\n    Recommended value for reduce_factor_ is 3 (fast process)   \n    reduce_factor_ values must be an integer in range [ 0 ... 4] \n    The reduce_factor_ value will have a significant impact on the fire effect maximum height, \n    adjust the argument factor_ accordingly\n\n    * FIRE INTENSITY AT THE SOURCE\n    \n    input fire_intensity_: integer\n    \n    Set the fire intensity with the variable fire_intensity_, 0 low flame,\n    32 maximum flame effect\n    Values must be an ""int in range [0 ... 32] \n\n    * SMOOTHING THE EFFECT\n    \n    input smooth_: True | False\n    \n    When smooth_ is True the algorithm will use the pygame function smoothscale (bi-linear \n    filtering) or False the final texture will be adjust with the scale function.\n    Set this variable to False if you need the best performance for the effect or if you require\n    a pixelated fire effect. Otherwise set the variable to True for a more realistic effect. \n\n    \n    * BLOOM EFFECT \n    \n    input bloom_         : True | False\n    input fast_bloom_    : True | False\n    input bpf_threshold_ : integer\n       \n    Fire effect produce a bright and smooth light effect to the background texture where the fire \n    intensity is at its maximum.\n    Use the flag fast_bloom_ for a compromise between a realistic effect and the best performances\n    The flag fast_bloom_ define a very fast bloom algo using only the smallest texture \n    to create a bloom effect (all the intermediate textures will be bypassed). See the bloom effect \n    project for more details.\n    When fast_bloom is False, all the sub-surfaces will be blit to the final effect and will \n    produce a more realistic fire effect (this will slightly degrade the overall performances). \n    If the fire effect is too bright, you can always adjust the bright pass filter value\n    bpf_threshold_(this will adjust the bloom intensity)\n    bpf_threshold_ value must be in range [ 0 ... 255]   \n    Below 128 the bloom effect will be more noticeable and above 128 only the brightest\n    area will be enhanced.\n\n    * LIGHT EFFECT INTENSITY\n\n    input brightness_            : True | False\n    input brightness_intensity_  : float\n\n    When the flag is set to True, the algorithm will use an external function, \n    <shader_brightness24_exclude_inplace_c> to increase the brightness of the effect / texture\n    A custom color can be passed to the function defining the pixels to be ignored during t""he \n    process (default is black color).\n    the value must be in range [-1.0 ... 1.0]. Values below zero will decrease the brightness \n    of the flame effect and positive values will increase the brightness of the effect (causing\n    bright white patches on the fire texture). \n    Values below -0.4 will cause the fire effect to be translucent and this effect can also be \n    used for simulating ascending heat convection effects on a background texture.\n    \n    \n    * OPTIONAL SURFACE\n      \n    input surface_ : pygame.Surface\n      \n    This is an optional surface that can be passed to the shader to improve the performances \n    and to avoid a new surface to be generated every iterations. The surface size must match \n    exactly the reduce texture dimensions otherwise an exception will be raise. \n    see reduce_factor_ option to determine the fire texture size that will be processed.\n    \n    * COLOR PALETTE ADJUSTMENT  \n    \n    input adjust_palette_ : True | False\n    input hsl_            : (10, 80, 1.8)\n\n    Set this flag to True to modify the color palette of the fire texture. \n    This allow the HSL color model to be apply to the palette values\n    You can redefine the palette when the flag is True and by customizing a tuple of 3 float \n    values, default is (10, 80, 1.8). \n    The first value control the palette hue value, the second is for the saturation and last, \n    the palette color lightness. \n    With the variable hsl_ you can rotate the palette colors and define a new flame\n    aspect/color/intensity\n    If adjust_palette_ is True the original palette define by the argument palette_, will \n    be disregarded.Instead a new palette will be created with the hsl values\n\n    * FLAME ORIENTATION / DIRECTION & BORDER FLAME EFFECT\n     \n    input transpose_ = True | False,\n    input border_    = True | False,\n    \n    transpose_ = True, this will transpose the final array \n    for e.g :  \n    If the final fire tex""ture is (w, h) after setting the transpose flag, the final \n    fire texture will become (h, w). As a result the fire effect will be transversal (starting \n    from the right of the display to the left side). \n    You can always transpose / flip the texture to get the right flame orientation  \n    BORDER FLAME EFFECT \n    border_ = True to create a flame effect burning the edge of the display. This version is only\n    compatible with symmetrical display or textures (same width & height). If the display \n    is asymmetric, the final border fire effect will be shown within the display and not neccessary \n    on the frame border \n    \n    * FINAL TOUCH\n    \n    input blur_ : True | False\n    \n    This will will blur the fire effect for a more realistic appearance, remove all the jagged \n    edge when and pixelated effect\n    \n    \n    :param width_           : integer; Size (width) of the surface or display in pixels\n    :param height_          : integer; size (height) of the surface or display in pixels\n    :param factor_          : float; Value controlling the fire height value\n                              must be in range [3.95 ... 4.2].\n                              The value 3.95 gives the highest flame effect\n    :param palette_         : numpy.ndarray, buffer containing mapped RGB colors (uint values)\n    :param fire_            : numpy.ndarray shape (w, h) containing float values (fire intensity).\n                              For better performance it is advised to set the array to the size \n                              of the texture after applying the reduction_factor_.\n                              For example if the reduction_factor_ is 2, the texture would have \n                              width >> 1 and height >> 1 and the fire_array should be set to \n                              numpy.empty((height >> 1, width >> 1), float32)\n    :param reduce_factor_   : unsigned short int ; Can be either 0, 1, 2, 3, 4. \n            ""                  2 and 3 provide the best performance and the best looking effect.\n    :param fire_intensity_  : Integer; Control the original amount of energy at the\n                              bottom of the fire, must be in range of [0 ... 32]. \n                              32 being the maximum value and the maximum fire intensity\n    :param smooth_          : boolean; True smoothscale (bi-linear filtering) or\n                              scale algorithm jagged edges (mush faster)\n    :param bloom_           : boolean; True or False, True apply a bloom effect to the fire effect\n    :param fast_bloom_      : boolean; Fastest bloom. This reduce the amount of calculation\n    :param bpf_threshold_   : integer; control the bright pass filter threshold\n                              value, must be in range [0 ... 255].\n                              Maximum brightness amplification with threshold = 0, \n                              when bpf_threshold_ = 255, no change.\n    :param low_             : integer; Starting position x for the fire effect\n    :param high_            : integer; Ending position x for the fire effect\n    :param brightness_      : boolean; True apply a bright filter shader to the array.\n                              Increase overall brightness of the effect\n    :param brightness_intensity_: float; must be in range [-1.0 ... 1.0] control\n                              the brightness intensity\n                              of the effect\n    :param surface_         : pygame.Surface. Pass a surface to the shader for\n                              better performance, otherwise a new surface will be created each \n                              calls.\n    :param adjust_palette_  : boolean; True adjust the palette setting HSL\n                              (hue, saturation, luminescence).\n                              Be aware that if adjust_palette is True, the optional palette \n                              passed to the Shader wil""l be disregarded\n    :param hsl_             : tuple; float values of hue, saturation and luminescence.\n                              Hue in range [0.0 ... 100],  saturation [0...100], \n                              luminescence [0.0 ... 2.0]\n    :param transpose_       : boolean; Transpose the array (w, h) become (h, w).\n                              The fire effect will start from the left and move to the right\n    :param border_          : boolean; Flame effect affect the border of the texture\n    :param blur_            : boolean; Blur the fire effect\n    :return                 : Return a pygame surface that can be blit directly to the game display\n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_89fire_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_width_;
  int __pyx_v_height_;
  float __pyx_v_factor_;
  __Pyx_memviewslice __pyx_v_palette_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fire_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned short __pyx_v_reduce_factor_;
  unsigned short __pyx_v_fire_intensity_;
  int __pyx_v_smooth_;
  int __pyx_v_bloom_;
  int __pyx_v_fast_bloom_;
  unsigned char __pyx_v_bpf_threshold_;
  unsigned int __pyx_v_low_;
  unsigned int __pyx_v_high_;
  int __pyx_v_brightness_;
  float __pyx_v_brightness_intensity_;
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_adjust_palette_;
  PyObject *__pyx_v_hsl_ = 0;
  int __pyx_v_transpose_;
  int __pyx_v_border_;
  int __pyx_v_blur_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fire_effect (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width_2,&__pyx_n_s_height_2,&__pyx_n_s_factor,&__pyx_n_s_palette,&__pyx_n_s_fire_2,&__pyx_n_s_reduce_factor,&__pyx_n_s_fire_intensity,&__pyx_n_s_smooth,&__pyx_n_s_bloom,&__pyx_n_s_fast_bloom,&__pyx_n_s_bpf_threshold_2,&__pyx_n_s_low,&__pyx_n_s_high,&__pyx_n_s_brightness,&__pyx_n_s_brightness_intensity,&__pyx_n_s_surface,&__pyx_n_s_adjust_palette,&__pyx_n_s_hsl,&__pyx_n_s_transpose,&__pyx_n_s_border,&__pyx_n_s_blur,0};
    PyObject* values[21] = {0,0,0,0,0,0,0,0,0,0,0,0,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_6shader_88fire_effect(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width_, int __pyx_v_height_, float __pyx_v_factor_, __Pyx_memviewslice __pyx_v_palette_, __Pyx_memviewslice __pyx_v_fire_, unsigned short __pyx_v_reduce_factor_, unsigned short __pyx_v_fire_intensity_, int __pyx_v_smooth_, int __pyx_v_bloom_, int __pyx_v_fast_bloom_, unsigned char __pyx_v_bpf_threshold_, unsigned int __pyx_v_low_, unsigned int __pyx_v_high_, int __pyx_v_brightness_, float __pyx_v_brightness_intensity_, PyObject *__pyx_v_surface_, int __pyx_v_adjust_palette_, PyObject *__pyx_v_hsl_, int __pyx_v_transpose_, int __pyx_v_border_, int __pyx_v_blur_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fire_effect", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_palette_.memview)) { __Pyx_RaiseUnboundLocalError("palette_"); __PYX_ERR(1, 1914, __pyx_L1_error) }
  if (unlikely(!__pyx_v_fire_.memview)) { __Pyx_RaiseUnboundLocalError("fire_"); __PYX_ERR(1, 1914, __pyx_L1_error) }
  __pyx_t_2.__pyx_n = 16;
  __pyx_t_2.reduce_factor_ = __pyx_v_reduce_factor_;
  __pyx_t_2.fire_intensity_ = __pyx_v_fire_intensity_;
  __pyx_t_2.smooth_ = __pyx_v_smooth_;
  __pyx_t_2.bloom_ = __pyx_v_bloom_;
  __pyx_t_2.fast_bloom_ = __pyx_v_fast_bloom_;
  __pyx_t_2.bpf_threshold_ = __pyx_v_bpf_threshold_;
  __pyx_t_2.low_ = __pyx_v_low_;
  __pyx_t_2.high_ = __pyx_v_high_;
  __pyx_t_2.brightness_ = __pyx_v_brightness_;
  __pyx_t_2.brightness_intensity_ = __pyx_v_brightness_intensity_;
  __pyx_t_2.surface_ = __pyx_v_surface_;
  __pyx_t_2.adjust_palette_ = __pyx_v_adjust_palette_;
  __pyx_t_2.hsl_ = __pyx_v_hsl_;
  __pyx_t_2.transpose_ = __pyx_v_transpose_;
  __pyx_t_2.border_ = __pyx_v_border_;
  __pyx_t_2.blur_ = __pyx_v_blur_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_fire_effect(__pyx_v_width_, __pyx_v_height_, __pyx_v_factor_, __pyx_v_palette_, __pyx_v_fire_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1914, __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.shader.fire_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_palette_, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fire_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01915:         int width_,
 01916:         int height_,
 01917:         float factor_,
 01918:         unsigned int [::1] palette_,
 01919:         float [:, ::1] fire_,
 01920: 
 01921:         # OPTIONAL
 01922:         unsigned short int reduce_factor_ = 3,
 01923:         unsigned short int fire_intensity_= 32,
+01924:         bint smooth_                      = True,
  int __pyx_v_smooth_ = ((int)1);
/* … */
      __pyx_v_smooth_ = ((int)1);
    }
    if (values[8]) {
      __pyx_v_bloom_ = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_bloom_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1925, __pyx_L3_error)
    } else {
+01925:         bint bloom_                       = True,
  int __pyx_v_bloom_ = ((int)1);
/* … */
      __pyx_v_bloom_ = ((int)1);
    }
    if (values[9]) {
      __pyx_v_fast_bloom_ = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_fast_bloom_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1926, __pyx_L3_error)
    } else {
+01926:         bint fast_bloom_                  = True,
  int __pyx_v_fast_bloom_ = ((int)1);
  unsigned char __pyx_v_bpf_threshold_ = ((unsigned char)0);
  unsigned int __pyx_v_low_ = ((unsigned int)0);
  unsigned int __pyx_v_high_ = ((unsigned int)0x258);
/* … */
      __pyx_v_fast_bloom_ = ((int)1);
    }
    if (values[10]) {
      __pyx_v_bpf_threshold_ = __Pyx_PyInt_As_unsigned_char(values[10]); if (unlikely((__pyx_v_bpf_threshold_ == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 1927, __pyx_L3_error)
    } else {
      __pyx_v_bpf_threshold_ = ((unsigned char)0);
    }
    if (values[11]) {
      __pyx_v_low_ = __Pyx_PyInt_As_unsigned_int(values[11]); if (unlikely((__pyx_v_low_ == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1928, __pyx_L3_error)
    } else {
      __pyx_v_low_ = ((unsigned int)0);
    }
    if (values[12]) {
      __pyx_v_high_ = __Pyx_PyInt_As_unsigned_int(values[12]); if (unlikely((__pyx_v_high_ == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1929, __pyx_L3_error)
    } else {
      __pyx_v_high_ = ((unsigned int)0x258);
    }
    if (values[13]) {
      __pyx_v_brightness_ = __Pyx_PyObject_IsTrue(values[13]); if (unlikely((__pyx_v_brightness_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1930, __pyx_L3_error)
    } else {
 01927:         unsigned char bpf_threshold_      = 0,
 01928:         unsigned int low_                 = 0,
 01929:         unsigned int high_                = 600,
+01930:         bint brightness_                  = True,
  int __pyx_v_brightness_ = ((int)1);
  float __pyx_v_brightness_intensity_ = ((float)0.15);
/* … */
      __pyx_v_brightness_ = ((int)1);
    }
    if (values[14]) {
      __pyx_v_brightness_intensity_ = __pyx_PyFloat_AsFloat(values[14]); if (unlikely((__pyx_v_brightness_intensity_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1931, __pyx_L3_error)
    } else {
      __pyx_v_brightness_intensity_ = ((float)0.15);
    }
    __pyx_v_surface_ = values[15];
    if (values[16]) {
      __pyx_v_adjust_palette_ = __Pyx_PyObject_IsTrue(values[16]); if (unlikely((__pyx_v_adjust_palette_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1933, __pyx_L3_error)
    } else {
 01931:         float brightness_intensity_       = 0.15,
+01932:         object surface_                   = None,
  PyObject *__pyx_v_surface_ = ((PyObject *)Py_None);
/* … */
    values[15] = ((PyObject *)Py_None);
+01933:         bint adjust_palette_              = False,
  int __pyx_v_adjust_palette_ = ((int)0);
/* … */
      __pyx_v_adjust_palette_ = ((int)0);
    }
    __pyx_v_hsl_ = ((PyObject*)values[17]);
    if (values[18]) {
      __pyx_v_transpose_ = __Pyx_PyObject_IsTrue(values[18]); if (unlikely((__pyx_v_transpose_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1935, __pyx_L3_error)
    } else {
+01934:         tuple hsl_                        = (10, 80, 1.8),
  PyObject *__pyx_v_hsl_ = ((PyObject*)__pyx_tuple__13);
/* … */
  __pyx_tuple__13 = PyTuple_Pack(3, __pyx_int_10, __pyx_int_80, __pyx_float_1_8); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 1934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__13);
  __Pyx_GIVEREF(__pyx_tuple__13);
/* … */
    values[17] = ((PyObject*)__pyx_tuple__14);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
        CYTHON_FALLTHROUGH;
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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("fire_effect", 0, 5, 21, 1); __PYX_ERR(1, 1914, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factor)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fire_effect", 0, 5, 21, 2); __PYX_ERR(1, 1914, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_palette)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fire_effect", 0, 5, 21, 3); __PYX_ERR(1, 1914, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fire_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fire_effect", 0, 5, 21, 4); __PYX_ERR(1, 1914, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduce_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_fire_intensity);
          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_smooth);
          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_bloom);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fast_bloom);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bpf_threshold_2);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_low);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_high);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_brightness);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_brightness_intensity);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_surface);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_adjust_palette);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_hsl);
          if (value) { values[17] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_transpose);
          if (value) { values[18] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 19:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_border);
          if (value) { values[19] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 20:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blur);
          if (value) { values[20] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fire_effect") < 0)) __PYX_ERR(1, 1914, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
        CYTHON_FALLTHROUGH;
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 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(1, 1915, __pyx_L3_error)
    __pyx_v_height_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1916, __pyx_L3_error)
    __pyx_v_factor_ = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_factor_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 1917, __pyx_L3_error)
    __pyx_v_palette_ = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_palette_.memview)) __PYX_ERR(1, 1918, __pyx_L3_error)
    __pyx_v_fire_ = __Pyx_PyObject_to_MemoryviewSlice_d_dc_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_fire_.memview)) __PYX_ERR(1, 1919, __pyx_L3_error)
    if (values[5]) {
      __pyx_v_reduce_factor_ = __Pyx_PyInt_As_unsigned_short(values[5]); if (unlikely((__pyx_v_reduce_factor_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 1922, __pyx_L3_error)
    } else {
      __pyx_v_reduce_factor_ = ((unsigned short)3);
    }
    if (values[6]) {
      __pyx_v_fire_intensity_ = __Pyx_PyInt_As_unsigned_short(values[6]); if (unlikely((__pyx_v_fire_intensity_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 1923, __pyx_L3_error)
    } else {
      __pyx_v_fire_intensity_ = ((unsigned short)32);
    }
    if (values[7]) {
      __pyx_v_smooth_ = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_smooth_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1924, __pyx_L3_error)
    } else {
  __pyx_tuple__14 = PyTuple_Pack(3, __pyx_int_10, __pyx_int_80, __pyx_float_1_8); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 1934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);
+01935:         bint transpose_                   = False,
  int __pyx_v_transpose_ = ((int)0);
/* … */
      __pyx_v_transpose_ = ((int)0);
    }
    if (values[19]) {
      __pyx_v_border_ = __Pyx_PyObject_IsTrue(values[19]); if (unlikely((__pyx_v_border_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1936, __pyx_L3_error)
    } else {
+01936:         bint border_                      = False,
  int __pyx_v_border_ = ((int)0);
/* … */
      __pyx_v_border_ = ((int)0);
    }
    if (values[20]) {
      __pyx_v_blur_ = __Pyx_PyObject_IsTrue(values[20]); if (unlikely((__pyx_v_blur_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1937, __pyx_L3_error)
    } else {
+01937:         bint blur_                        = True
  int __pyx_v_blur_ = ((int)1);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fire_effect", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_reduce_factor_ = __pyx_optional_args->reduce_factor_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_fire_intensity_ = __pyx_optional_args->fire_intensity_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_smooth_ = __pyx_optional_args->smooth_;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_bloom_ = __pyx_optional_args->bloom_;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_fast_bloom_ = __pyx_optional_args->fast_bloom_;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_bpf_threshold_ = __pyx_optional_args->bpf_threshold_;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_low_ = __pyx_optional_args->low_;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_high_ = __pyx_optional_args->high_;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_brightness_ = __pyx_optional_args->brightness_;
                      if (__pyx_optional_args->__pyx_n > 9) {
                        __pyx_v_brightness_intensity_ = __pyx_optional_args->brightness_intensity_;
                        if (__pyx_optional_args->__pyx_n > 10) {
                          __pyx_v_surface_ = __pyx_optional_args->surface_;
                          if (__pyx_optional_args->__pyx_n > 11) {
                            __pyx_v_adjust_palette_ = __pyx_optional_args->adjust_palette_;
                            if (__pyx_optional_args->__pyx_n > 12) {
                              __pyx_v_hsl_ = __pyx_optional_args->hsl_;
                              if (__pyx_optional_args->__pyx_n > 13) {
                                __pyx_v_transpose_ = __pyx_optional_args->transpose_;
                                if (__pyx_optional_args->__pyx_n > 14) {
                                  __pyx_v_border_ = __pyx_optional_args->border_;
                                  if (__pyx_optional_args->__pyx_n > 15) {
                                    __pyx_v_blur_ = __pyx_optional_args->blur_;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
/* … */
      __pyx_v_blur_ = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fire_effect", 0, 5, 21, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1914, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.fire_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_hsl_), (&PyTuple_Type), 1, "hsl_", 1))) __PYX_ERR(1, 1934, __pyx_L1_error)
  __pyx_r = __pyx_pf_12PygameShader_6shader_88fire_effect(__pyx_self, __pyx_v_width_, __pyx_v_height_, __pyx_v_factor_, __pyx_v_palette_, __pyx_v_fire_, __pyx_v_reduce_factor_, __pyx_v_fire_intensity_, __pyx_v_smooth_, __pyx_v_bloom_, __pyx_v_fast_bloom_, __pyx_v_bpf_threshold_, __pyx_v_low_, __pyx_v_high_, __pyx_v_brightness_, __pyx_v_brightness_intensity_, __pyx_v_surface_, __pyx_v_adjust_palette_, __pyx_v_hsl_, __pyx_v_transpose_, __pyx_v_border_, __pyx_v_blur_);
 01938:         ):
 01939:     """
 01940:     FIRE SHADER EFFECT
 01941: 
 01942:     * FIRE TEXTURE SIZES
 01943: 
 01944:     input width_  : integer,
 01945:     input height_ : integer
 01946: 
 01947:     width_ and height_ values define the size of the texture e.g Surface(width x height)
 01948: 
 01949:     * FIRE ASPECT (CONTROL OVER THE WIDTH):
 01950: 
 01951:     inputs low_ : integer
 01952:     input high_ : integer
 01953: 
 01954:     Optional arguments low_ & high_ (integer values) define the width 's limits of the fire effect.
 01955:     low_ for the starting point and high_ for the ending of the effect.
 01956:     e.g low_ = 10 and high_ = 200. The fire effect will be contain within width = 10 and 200
 01957:     low_ & high_ values must be in range [0 ... width_]
 01958: 
 01959:     * FIRE HEIGHT:
 01960: 
 01961:     input factor_ : float
 01962: 
 01963:     The fire maximum height can be adjust with the variable factor_ (float value)
 01964:     value > 3.95 will contain the effect within the display
 01965:     value < 3.95 will enlarge the effect over the display height
 01966:     Recommended value is 3.95 with reduce_factor_ = 3 otherwise adjust the value manually
 01967:     to contain the fire effect within the display
 01968: 
 01969:     * SPEED CONSIDERATION
 01970: 
 01971:     input reduce_factor_ : integer
 01972: 
 01973:     The argument reduce_factor_ control the size of the texture to be processed
 01974:     e.g : a value of 2, divide by 4 the pygame surface define by the values (width_ & height_)
 01975:     Smaller texture improve the overall performances but will slightly degrade the fire aspect,
 01976:     especially if the blur and smooth option are not enabled.
 01977:     Recommended value for reduce_factor_ is 3 (fast process)
 01978:     reduce_factor_ values must be an integer in range [ 0 ... 4]
 01979:     The reduce_factor_ value will have a significant impact on the fire effect maximum height,
 01980:     adjust the argument factor_ accordingly
 01981: 
 01982:     * FIRE INTENSITY AT THE SOURCE
 01983: 
 01984:     input fire_intensity_: integer
 01985: 
 01986:     Set the fire intensity with the variable fire_intensity_, 0 low flame,
 01987:     32 maximum flame effect
 01988:     Values must be an int in range [0 ... 32]
 01989: 
 01990:     * SMOOTHING THE EFFECT
 01991: 
 01992:     input smooth_: True | False
 01993: 
 01994:     When smooth_ is True the algorithm will use the pygame function smoothscale (bi-linear
 01995:     filtering) or False the final texture will be adjust with the scale function.
 01996:     Set this variable to False if you need the best performance for the effect or if you require
 01997:     a pixelated fire effect. Otherwise set the variable to True for a more realistic effect.
 01998: 
 01999: 
 02000:     * BLOOM EFFECT
 02001: 
 02002:     input bloom_         : True | False
 02003:     input fast_bloom_    : True | False
 02004:     input bpf_threshold_ : integer
 02005: 
 02006:     Fire effect produce a bright and smooth light effect to the background texture where the fire
 02007:     intensity is at its maximum.
 02008:     Use the flag fast_bloom_ for a compromise between a realistic effect and the best performances
 02009:     The flag fast_bloom_ define a very fast bloom algo using only the smallest texture
 02010:     to create a bloom effect (all the intermediate textures will be bypassed). See the bloom effect
 02011:     project for more details.
 02012:     When fast_bloom is False, all the sub-surfaces will be blit to the final effect and will
 02013:     produce a more realistic fire effect (this will slightly degrade the overall performances).
 02014:     If the fire effect is too bright, you can always adjust the bright pass filter value
 02015:     bpf_threshold_(this will adjust the bloom intensity)
 02016:     bpf_threshold_ value must be in range [ 0 ... 255]
 02017:     Below 128 the bloom effect will be more noticeable and above 128 only the brightest
 02018:     area will be enhanced.
 02019: 
 02020:     * LIGHT EFFECT INTENSITY
 02021: 
 02022:     input brightness_            : True | False
 02023:     input brightness_intensity_  : float
 02024: 
 02025:     When the flag is set to True, the algorithm will use an external function,
 02026:     <shader_brightness24_exclude_inplace_c> to increase the brightness of the effect / texture
 02027:     A custom color can be passed to the function defining the pixels to be ignored during the
 02028:     process (default is black color).
 02029:     the value must be in range [-1.0 ... 1.0]. Values below zero will decrease the brightness
 02030:     of the flame effect and positive values will increase the brightness of the effect (causing
 02031:     bright white patches on the fire texture).
 02032:     Values below -0.4 will cause the fire effect to be translucent and this effect can also be
 02033:     used for simulating ascending heat convection effects on a background texture.
 02034: 
 02035: 
 02036:     * OPTIONAL SURFACE
 02037: 
 02038:     input surface_ : pygame.Surface
 02039: 
 02040:     This is an optional surface that can be passed to the shader to improve the performances
 02041:     and to avoid a new surface to be generated every iterations. The surface size must match
 02042:     exactly the reduce texture dimensions otherwise an exception will be raise.
 02043:     see reduce_factor_ option to determine the fire texture size that will be processed.
 02044: 
 02045:     * COLOR PALETTE ADJUSTMENT
 02046: 
 02047:     input adjust_palette_ : True | False
 02048:     input hsl_            : (10, 80, 1.8)
 02049: 
 02050:     Set this flag to True to modify the color palette of the fire texture.
 02051:     This allow the HSL color model to be apply to the palette values
 02052:     You can redefine the palette when the flag is True and by customizing a tuple of 3 float
 02053:     values, default is (10, 80, 1.8).
 02054:     The first value control the palette hue value, the second is for the saturation and last,
 02055:     the palette color lightness.
 02056:     With the variable hsl_ you can rotate the palette colors and define a new flame
 02057:     aspect/color/intensity
 02058:     If adjust_palette_ is True the original palette define by the argument palette_, will
 02059:     be disregarded.Instead a new palette will be created with the hsl values
 02060: 
 02061:     * FLAME ORIENTATION / DIRECTION & BORDER FLAME EFFECT
 02062: 
 02063:     input transpose_ = True | False,
 02064:     input border_    = True | False,
 02065: 
 02066:     transpose_ = True, this will transpose the final array
 02067:     for e.g :
 02068:     If the final fire texture is (w, h) after setting the transpose flag, the final
 02069:     fire texture will become (h, w). As a result the fire effect will be transversal (starting
 02070:     from the right of the display to the left side).
 02071:     You can always transpose / flip the texture to get the right flame orientation
 02072:     BORDER FLAME EFFECT
 02073:     border_ = True to create a flame effect burning the edge of the display. This version is only
 02074:     compatible with symmetrical display or textures (same width & height). If the display
 02075:     is asymmetric, the final border fire effect will be shown within the display and not neccessary
 02076:     on the frame border
 02077: 
 02078:     * FINAL TOUCH
 02079: 
 02080:     input blur_ : True | False
 02081: 
 02082:     This will will blur the fire effect for a more realistic appearance, remove all the jagged
 02083:     edge when and pixelated effect
 02084: 
 02085: 
 02086:     :param width_           : integer; Size (width) of the surface or display in pixels
 02087:     :param height_          : integer; size (height) of the surface or display in pixels
 02088:     :param factor_          : float; Value controlling the fire height value
 02089:                               must be in range [3.95 ... 4.2].
 02090:                               The value 3.95 gives the highest flame effect
 02091:     :param palette_         : numpy.ndarray, buffer containing mapped RGB colors (uint values)
 02092:     :param fire_            : numpy.ndarray shape (w, h) containing float values (fire intensity).
 02093:                               For better performance it is advised to set the array to the size
 02094:                               of the texture after applying the reduction_factor_.
 02095:                               For example if the reduction_factor_ is 2, the texture would have
 02096:                               width >> 1 and height >> 1 and the fire_array should be set to
 02097:                               numpy.empty((height >> 1, width >> 1), float32)
 02098:     :param reduce_factor_   : unsigned short int ; Can be either 0, 1, 2, 3, 4.
 02099:                               2 and 3 provide the best performance and the best looking effect.
 02100:     :param fire_intensity_  : Integer; Control the original amount of energy at the
 02101:                               bottom of the fire, must be in range of [0 ... 32].
 02102:                               32 being the maximum value and the maximum fire intensity
 02103:     :param smooth_          : boolean; True smoothscale (bi-linear filtering) or
 02104:                               scale algorithm jagged edges (mush faster)
 02105:     :param bloom_           : boolean; True or False, True apply a bloom effect to the fire effect
 02106:     :param fast_bloom_      : boolean; Fastest bloom. This reduce the amount of calculation
 02107:     :param bpf_threshold_   : integer; control the bright pass filter threshold
 02108:                               value, must be in range [0 ... 255].
 02109:                               Maximum brightness amplification with threshold = 0,
 02110:                               when bpf_threshold_ = 255, no change.
 02111:     :param low_             : integer; Starting position x for the fire effect
 02112:     :param high_            : integer; Ending position x for the fire effect
 02113:     :param brightness_      : boolean; True apply a bright filter shader to the array.
 02114:                               Increase overall brightness of the effect
 02115:     :param brightness_intensity_: float; must be in range [-1.0 ... 1.0] control
 02116:                               the brightness intensity
 02117:                               of the effect
 02118:     :param surface_         : pygame.Surface. Pass a surface to the shader for
 02119:                               better performance, otherwise a new surface will be created each
 02120:                               calls.
 02121:     :param adjust_palette_  : boolean; True adjust the palette setting HSL
 02122:                               (hue, saturation, luminescence).
 02123:                               Be aware that if adjust_palette is True, the optional palette
 02124:                               passed to the Shader will be disregarded
 02125:     :param hsl_             : tuple; float values of hue, saturation and luminescence.
 02126:                               Hue in range [0.0 ... 100],  saturation [0...100],
 02127:                               luminescence [0.0 ... 2.0]
 02128:     :param transpose_       : boolean; Transpose the array (w, h) become (h, w).
 02129:                               The fire effect will start from the left and move to the right
 02130:     :param border_          : boolean; Flame effect affect the border of the texture
 02131:     :param blur_            : boolean; Blur the fire effect
 02132:     :return                 : Return a pygame surface that can be blit directly to the game display
 02133: 
 02134:     """
 02135:     # todo reduce_factor=0 and border = True crash
 02136: 
+02137:     assert reduce_factor_ in (0, 1, 2, 3, 4), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    switch (__pyx_v_reduce_factor_) {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
      __pyx_t_1 = 1;
      break;
      default:
      __pyx_t_1 = 0;
      break;
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_reduce_factor_must_be_i);
      __PYX_ERR(1, 2137, __pyx_L1_error)
    }
  }
  #endif
 02138:         "Argument reduce factor must be in range 0 ... 4 " \
 02139:         "\n reduce_factor_ = 1 correspond to dividing the image size by 2" \
 02140:         "\n reduce_factor_ = 2 correspond to dividing the image size by 4"
+02141:     assert 0 <= fire_intensity_ < 33, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = (0 <= __pyx_v_fire_intensity_);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_fire_intensity_ < 33);
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
+02142:         "Argument fire_intensity_ must be in range [0 ... 32] got %s" % fire_intensity_
      __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_fire_intensity_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Argument_fire_intensity__must_be, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 2141, __pyx_L1_error)
    }
  }
  #endif
 02143: 
+02144:     assert width_ > 0 and height_ > 0, "Argument width or height cannot be null or < 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_4 = ((__pyx_v_width_ > 0) != 0);
    if (__pyx_t_4) {
    } else {
      __pyx_t_1 = __pyx_t_4;
      goto __pyx_L3_bool_binop_done;
    }
    __pyx_t_4 = ((__pyx_v_height_ > 0) != 0);
    __pyx_t_1 = __pyx_t_4;
    __pyx_L3_bool_binop_done:;
    if (unlikely(!__pyx_t_1)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_width_or_height_cannot);
      __PYX_ERR(1, 2144, __pyx_L1_error)
    }
  }
  #endif
+02145:     assert factor_ > 0, "Argument factor_ cannot be null or < 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_factor_ > 0.0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_factor__cannot_be_null);
      __PYX_ERR(1, 2145, __pyx_L1_error)
    }
  }
  #endif
 02146: 
+02147:     return shader_fire_effect_c(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_5.__pyx_n = 16;
  __pyx_t_5.reduce_factor_ = __pyx_v_reduce_factor_;
  __pyx_t_5.fire_intensity_ = __pyx_v_fire_intensity_;
  __pyx_t_5.smooth_ = __pyx_v_smooth_;
  __pyx_t_5.bloom_ = __pyx_v_bloom_;
  __pyx_t_5.fast_bloom_ = __pyx_v_fast_bloom_;
  __pyx_t_5.bpf_threshold_ = __pyx_v_bpf_threshold_;
  __pyx_t_5.low_ = __pyx_v_low_;
  __pyx_t_5.high_ = __pyx_v_high_;
  __pyx_t_5.brightness_ = __pyx_v_brightness_;
  __pyx_t_5.brightness_intensity_ = __pyx_v_brightness_intensity_;
  __pyx_t_5.surface_ = __pyx_v_surface_;
  __pyx_t_5.adjust_palette_ = __pyx_v_adjust_palette_;
  __pyx_t_5.hsl_ = __pyx_v_hsl_;
  __pyx_t_5.transpose_ = __pyx_v_transpose_;
  __pyx_t_5.border_ = __pyx_v_border_;
  __pyx_t_5.blur_ = __pyx_v_blur_;
  __pyx_t_3 = __pyx_f_12PygameShader_6shader_shader_fire_effect_c(__pyx_v_width_, __pyx_v_height_, __pyx_v_factor_, __pyx_v_palette_, __pyx_v_fire_, &__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 02148:         width_, height_, factor_, palette_, fire_,
 02149:         reduce_factor_, fire_intensity_, smooth_,
 02150:         bloom_, fast_bloom_, bpf_threshold_, low_, high_, brightness_,
 02151:         brightness_intensity_, surface_, adjust_palette_,
 02152:         hsl_, transpose_, border_, blur_
 02153:     )
 02154: 
 02155: 
 02156: @cython.binding(False)
 02157: @cython.boundscheck(False)
 02158: @cython.wraparound(False)
 02159: @cython.nonecheck(False)
 02160: @cython.cdivision(True)
 02161: @cython.profile(False)
+02162: cpdef inline cloud_effect(
static PyObject *__pyx_pw_12PygameShader_6shader_91cloud_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_cloud_effect(int __pyx_v_width_, int __pyx_v_height_, float __pyx_v_factor_, __Pyx_memviewslice __pyx_v_palette_, __Pyx_memviewslice __pyx_v_cloud_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_cloud_effect *__pyx_optional_args) {
  unsigned short __pyx_v_reduce_factor_ = ((unsigned short)2);
  unsigned short __pyx_v_cloud_intensity_ = ((unsigned short)16);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("PygameShader.shader.cloud_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_91cloud_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_90cloud_effect[] = "\n    GENERATE CLOUD /SMOKE ON THE GAME DISPLAY \n    \n    * CLOUD TEXTURE SIZES \n    \n    input width_  : integer,  \n    input height_ : integer\n    \n    width_ and height_ values define the size of the texture e.g Surface(width x height)\n\n    * CLOUD ASPECT (CONTROL OVER THE WIDTH): \n    \n    inputs low_ : integer  \n    input high_ : integer \n    \n    Optional arguments low_ & high_ (integer values) define the width 's limits of the cloud \n    effect. low_ for the starting point and high_ for the ending of the effect.\n    e.g low_ = 10 and high_ = 200. The cloud effect will be contain within width = 10 and 200\n    low_ & high_ values must be in range [0 ... width_]  \n        \n    * CLOUD HEIGHT:\n    \n    input factor_ : float\n    \n    The cloud maximum height can be adjust with the variable factor_ (float value)\n    value > 3.95 will contain the effect within the display \n    value < 3.95 will enlarge the effect over the display height  \n    Recommended value is 3.95 with reduce_factor_ = 3 otherwise adjust the value manually \n    to contain the cloud effect within the display\n        \n    * SPEED CONSIDERATION\n    \n    input reduce_factor_ : integer\n    \n    The argument reduce_factor_ control the size of the texture to be processed \n    e.g : a value of 2, divide by 4 the pygame surface define by the values (width_ & height_)\n    Smaller texture improve the overall performances but will slightly degrade the cloud aspect, \n    especially if the blur and smooth option are not enabled.\n    Recommended value for reduce_factor_ is 3 (fast process)   \n    reduce_factor_ values must be an integer in range [ 0 ... 4] \n    The reduce_factor_ value will have a significant impact on the cloud effect maximum height, \n    adjust the argument factor_ accordingly\n\n    * CLOUD INTENSITY AT THE SOURCE\n    \n    input cloud_intensity_: integer\n    \n    Set the cloud intensity with the variable cloud_intensity_, 0 low flame,\n    32 maxi""mum flame effect\n    Values must be an int in range [0 ... 32] \n\n    * SMOOTHING THE EFFECT\n    \n    input smooth_: True | False\n    \n    When smooth_ is True the algorithm will use the pygame function smoothscale (bi-linear \n    filtering) or False the final texture will be adjust with the scale function.\n    Set this variable to False if you need the best performance for the effect or if you require\n    a pixelated cloud effect. Otherwise set the variable to True for a more realistic effect. \n   \n    * BLOOM EFFECT \n    \n    input bloom_         : True | False\n    input fast_bloom_    : True | False\n    input bpf_threshold_ : integer\n       \n    Bloom effect produce a bright and smooth light effect to the background texture where the cloud \n    intensity is at its maximum.\n    Use the flag fast_bloom_ for a compromise between a realistic effect and the best performances\n    The flag fast_bloom_ define a very fast bloom algo using only the smallest texture \n    to create a bloom effect (all the intermediate textures will be bypassed). See the bloom effect \n    project for more details.\n    When fast_bloom is False, all the sub-surfaces will be blit to the final effect and will \n    produce a more realistic cloud effect (this will slightly degrade the overall performances). \n    If the cloud effect is too bright, you can always adjust the bright pass filter value\n    bpf_threshold_(this will adjust the bloom intensity)\n    bpf_threshold_ value must be in range [ 0 ... 255]   \n    Below 128 the bloom effect will be more noticeable and above 128 only the brightest\n    area will be enhanced.\n\n    * LIGHT EFFECT INTENSITY\n\n    input brightness_            : True | False\n    input brightness_intensity_  : float\n\n    When the flag is set to True, the algorithm will use an external function, \n    <shader_brightness24_exclude_inplace_c> to increase the brightness of the effect / texture\n    A custom color can be passed to the function ""defining the pixels to be ignored during the \n    process (default is black color).\n    the value must be in range [-1.0 ... 1.0]. Values below zero will decrease the brightness \n    of the cloud effect and positive values will increase the brightness of the effect (causing\n    bright white patches on the cloud texture). \n    Values below -0.4 will cause the cloud effect to be translucent \n    \n    \n    * OPTIONAL SURFACE\n      \n    input surface_ : pygame.Surface\n      \n    This is an optional surface that can be passed to the shader to improve the performances \n    and to avoid a new surface to be generated every iterations. The surface size must match \n    exactly the reduce texture dimensions otherwise an exception will be raise. \n    see reduce_factor_ option to determine the cloud texture size that will be processed.\n    \n\n    * CLOUD ORIENTATION / DIRECTION \n     \n    input transpose_ = True | False,\n    \n    transpose_ = True, this will transpose the final array \n    for e.g :  \n    If the final cloud texture is (w, h) after setting the transpose flag, the final \n    cloud texture will become (h, w). As a result the cloud effect will be transversal (starting \n    from the right of the display to the left side). \n    You can always transpose / flip the texture to get the right cloud orientation  \n    \n    * FINAL TOUCH\n    \n    input blur_ : True | False\n    \n    This will will blur the cloud effect for a more realistic appearance, remove all the jagged \n    edge when and pixelated effect\n    \n    :param width_               : integer; Texture size (width) \n    :param height_              : integer; Texture size (height)\n    :param factor_              : float; Floating value used to control the size of the cloud\n                                  effect. Value must be in range [3.95 ... 4.2]. Value > 3.95 \n                                  will contain the smoke/ cloud effect within the display. \n                      ""            Values < 3.95 will enlarge the smoke effect.                              \n    :param palette_             : numpy.ndarray or cython memoryview containing the color for the \n                                  cloud effect (buffer containing mapped RGB colors (uint values))\n    :param cloud_               : numpy.ndarray shape (w, h) containing float values \n                                  (cloud intensity). For better performance it is advised to set the\n                                  array to the size of the texture after applying the \n                                  reduction_factor_. For example if the reduction_factor_ is 2, \n                                  the texture would have to be width >> 1 and height >> 1 and the \n                                  cloud_ array should be equivalent to numpy.empty((height >> 1, \n                                  width >> 1), float32)\n    :param reduce_factor_       : integer; unsigned short int ; Can be either 0, 1, 2, 3, 4. \n                                  2 and 3 provide the best performance and the best looking effect.\n    :param cloud_intensity_     : integer; Determine the amount of smoke the cloud\n                                  effect will generate at the base of the effect (value must be in \n                                  range [0 .. 260]). If you provide zero a random value between \n                                  0 ... 260 will be assigned. If you provide 250, a random value \n                                  between 250 and 260 will be set for the amount of smoke. \n                                  The highest the value, the more dense the cloud effect will be\n    :param smooth_              : boolean; True use a smoothscale (bi-linear filtering) or\n                                  False -> scale algorithm jagged edges (mush faster)\n    :param bloom_               : True | False, Add a bloom effect when the flag is set to True\n                                  Th""e bloom effect will smooth the cloud and create a dense smoke \n                                  areas where the cloud is the brightest.  \n    :param fast_bloom_          : True | False; This set a fast algorithm for the bloom effect (the \n                                  bloom effect will use the smallest texture)\n    :param bpf_threshold_       : integer; Bright pass filter value must be in range [ 0 ... 255]\n                                  0 produce the maximum bloom effect\n    :param low_                 : integer; must be in range [ 0 ... width_], left position of the \n                                  cloud effect \n    :param high_                : integer; must be in range [ 0 ... height_], right position of the\n                                  cloud effect\n    :param brightness_          : True | False; Increase the brightness of the cloud effect when \n                                  True\n    :param brightness_intensity_: float; Set the brightness intensity of the cloud. The value must \n                                  be in range [-1.0 ... +1.0]. Changing the value overtime will \n                                  generate a realistic cloud effect. Negative value will generate \n                                  translucent patch of smoke on the background image\n    :param surface_             : Pygame.Surface; Pass a surface to the shader for\n                                  better performance, otherwise a new surface will be created each \n                                  calls.\n    :param transpose_           : boolean; Transpose the array (w, h) become (h, w).\n                                  The cloud effect will start from the left and move to the right\n    :param blur_                : boolean; Blur the cloud effect\n    :return                     : Return a pygame surface that can be blit directly to the game \n                                  display\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_91cloud_effect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_width_;
  int __pyx_v_height_;
  float __pyx_v_factor_;
  __Pyx_memviewslice __pyx_v_palette_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_cloud_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned short __pyx_v_reduce_factor_;
  unsigned short __pyx_v_cloud_intensity_;
  int __pyx_v_smooth_;
  int __pyx_v_bloom_;
  int __pyx_v_fast_bloom_;
  unsigned char __pyx_v_bpf_threshold_;
  unsigned int __pyx_v_low_;
  unsigned int __pyx_v_high_;
  int __pyx_v_brightness_;
  float __pyx_v_brightness_intensity_;
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_transpose_;
  int __pyx_v_blur_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cloud_effect (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width_2,&__pyx_n_s_height_2,&__pyx_n_s_factor,&__pyx_n_s_palette,&__pyx_n_s_cloud,&__pyx_n_s_reduce_factor,&__pyx_n_s_cloud_intensity,&__pyx_n_s_smooth,&__pyx_n_s_bloom,&__pyx_n_s_fast_bloom,&__pyx_n_s_bpf_threshold_2,&__pyx_n_s_low,&__pyx_n_s_high,&__pyx_n_s_brightness,&__pyx_n_s_brightness_intensity,&__pyx_n_s_surface,&__pyx_n_s_transpose,&__pyx_n_s_blur,0};
    PyObject* values[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_90cloud_effect(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width_, int __pyx_v_height_, float __pyx_v_factor_, __Pyx_memviewslice __pyx_v_palette_, __Pyx_memviewslice __pyx_v_cloud_, unsigned short __pyx_v_reduce_factor_, unsigned short __pyx_v_cloud_intensity_, int __pyx_v_smooth_, int __pyx_v_bloom_, int __pyx_v_fast_bloom_, unsigned char __pyx_v_bpf_threshold_, unsigned int __pyx_v_low_, unsigned int __pyx_v_high_, int __pyx_v_brightness_, float __pyx_v_brightness_intensity_, PyObject *__pyx_v_surface_, int __pyx_v_transpose_, int __pyx_v_blur_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cloud_effect", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_palette_.memview)) { __Pyx_RaiseUnboundLocalError("palette_"); __PYX_ERR(1, 2162, __pyx_L1_error) }
  if (unlikely(!__pyx_v_cloud_.memview)) { __Pyx_RaiseUnboundLocalError("cloud_"); __PYX_ERR(1, 2162, __pyx_L1_error) }
  __pyx_t_2.__pyx_n = 13;
  __pyx_t_2.reduce_factor_ = __pyx_v_reduce_factor_;
  __pyx_t_2.cloud_intensity_ = __pyx_v_cloud_intensity_;
  __pyx_t_2.smooth_ = __pyx_v_smooth_;
  __pyx_t_2.bloom_ = __pyx_v_bloom_;
  __pyx_t_2.fast_bloom_ = __pyx_v_fast_bloom_;
  __pyx_t_2.bpf_threshold_ = __pyx_v_bpf_threshold_;
  __pyx_t_2.low_ = __pyx_v_low_;
  __pyx_t_2.high_ = __pyx_v_high_;
  __pyx_t_2.brightness_ = __pyx_v_brightness_;
  __pyx_t_2.brightness_intensity_ = __pyx_v_brightness_intensity_;
  __pyx_t_2.surface_ = __pyx_v_surface_;
  __pyx_t_2.transpose_ = __pyx_v_transpose_;
  __pyx_t_2.blur_ = __pyx_v_blur_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_cloud_effect(__pyx_v_width_, __pyx_v_height_, __pyx_v_factor_, __pyx_v_palette_, __pyx_v_cloud_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2162, __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.shader.cloud_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_palette_, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_cloud_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02163:         int width_,
 02164:         int height_,
 02165:         float factor_,
 02166:         unsigned int [::1] palette_,
 02167:         float [:, ::1] cloud_,
 02168: 
 02169:         # OPTIONAL
 02170:         unsigned short int reduce_factor_   = 2,
 02171:         unsigned short int cloud_intensity_ = 16,
+02172:         bint smooth_                        = True,
  int __pyx_v_smooth_ = ((int)1);
/* … */
      __pyx_v_smooth_ = ((int)1);
    }
    if (values[8]) {
      __pyx_v_bloom_ = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_bloom_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2173, __pyx_L3_error)
    } else {
+02173:         bint bloom_                         = False,
  int __pyx_v_bloom_ = ((int)0);
/* … */
      __pyx_v_bloom_ = ((int)0);
    }
    if (values[9]) {
      __pyx_v_fast_bloom_ = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_fast_bloom_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2174, __pyx_L3_error)
    } else {
+02174:         bint fast_bloom_                    = True,
  int __pyx_v_fast_bloom_ = ((int)1);
  unsigned char __pyx_v_bpf_threshold_ = ((unsigned char)0x80);
  unsigned int __pyx_v_low_ = ((unsigned int)0);
  unsigned int __pyx_v_high_ = ((unsigned int)0);
/* … */
      __pyx_v_fast_bloom_ = ((int)1);
    }
    if (values[10]) {
      __pyx_v_bpf_threshold_ = __Pyx_PyInt_As_unsigned_char(values[10]); if (unlikely((__pyx_v_bpf_threshold_ == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 2175, __pyx_L3_error)
    } else {
      __pyx_v_bpf_threshold_ = ((unsigned char)0x80);
    }
    if (values[11]) {
      __pyx_v_low_ = __Pyx_PyInt_As_unsigned_int(values[11]); if (unlikely((__pyx_v_low_ == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2176, __pyx_L3_error)
    } else {
      __pyx_v_low_ = ((unsigned int)0);
    }
    if (values[12]) {
      __pyx_v_high_ = __Pyx_PyInt_As_unsigned_int(values[12]); if (unlikely((__pyx_v_high_ == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2177, __pyx_L3_error)
    } else {
      __pyx_v_high_ = ((unsigned int)0);
    }
    if (values[13]) {
      __pyx_v_brightness_ = __Pyx_PyObject_IsTrue(values[13]); if (unlikely((__pyx_v_brightness_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2178, __pyx_L3_error)
    } else {
 02175:         unsigned char bpf_threshold_        = 128,
 02176:         unsigned int low_                   = 0,
 02177:         unsigned int high_                  = 0,
+02178:         bint brightness_                    = False,
  int __pyx_v_brightness_ = ((int)0);
  float __pyx_v_brightness_intensity_ = ((float)0.0);
/* … */
      __pyx_v_brightness_ = ((int)0);
    }
    if (values[14]) {
      __pyx_v_brightness_intensity_ = __pyx_PyFloat_AsFloat(values[14]); if (unlikely((__pyx_v_brightness_intensity_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 2179, __pyx_L3_error)
    } else {
      __pyx_v_brightness_intensity_ = ((float)0.0);
    }
    __pyx_v_surface_ = values[15];
    if (values[16]) {
      __pyx_v_transpose_ = __Pyx_PyObject_IsTrue(values[16]); if (unlikely((__pyx_v_transpose_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2181, __pyx_L3_error)
    } else {
 02179:         float brightness_intensity_         = 0.0,
+02180:         object surface_                     = None,
  PyObject *__pyx_v_surface_ = ((PyObject *)Py_None);
/* … */
    values[15] = ((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 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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("cloud_effect", 0, 5, 18, 1); __PYX_ERR(1, 2162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factor)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("cloud_effect", 0, 5, 18, 2); __PYX_ERR(1, 2162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_palette)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("cloud_effect", 0, 5, 18, 3); __PYX_ERR(1, 2162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cloud)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("cloud_effect", 0, 5, 18, 4); __PYX_ERR(1, 2162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduce_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_cloud_intensity);
          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_smooth);
          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_bloom);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fast_bloom);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bpf_threshold_2);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_low);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_high);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_brightness);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_brightness_intensity);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_surface);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_transpose);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blur);
          if (value) { values[17] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cloud_effect") < 0)) __PYX_ERR(1, 2162, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 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(1, 2163, __pyx_L3_error)
    __pyx_v_height_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2164, __pyx_L3_error)
    __pyx_v_factor_ = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_factor_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 2165, __pyx_L3_error)
    __pyx_v_palette_ = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_palette_.memview)) __PYX_ERR(1, 2166, __pyx_L3_error)
    __pyx_v_cloud_ = __Pyx_PyObject_to_MemoryviewSlice_d_dc_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_cloud_.memview)) __PYX_ERR(1, 2167, __pyx_L3_error)
    if (values[5]) {
      __pyx_v_reduce_factor_ = __Pyx_PyInt_As_unsigned_short(values[5]); if (unlikely((__pyx_v_reduce_factor_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 2170, __pyx_L3_error)
    } else {
      __pyx_v_reduce_factor_ = ((unsigned short)2);
    }
    if (values[6]) {
      __pyx_v_cloud_intensity_ = __Pyx_PyInt_As_unsigned_short(values[6]); if (unlikely((__pyx_v_cloud_intensity_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 2171, __pyx_L3_error)
    } else {
      __pyx_v_cloud_intensity_ = ((unsigned short)16);
    }
    if (values[7]) {
      __pyx_v_smooth_ = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_smooth_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2172, __pyx_L3_error)
    } else {
+02181:         bint transpose_                     = False,
  int __pyx_v_transpose_ = ((int)0);
/* … */
      __pyx_v_transpose_ = ((int)0);
    }
    if (values[17]) {
      __pyx_v_blur_ = __Pyx_PyObject_IsTrue(values[17]); if (unlikely((__pyx_v_blur_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2182, __pyx_L3_error)
    } else {
+02182:         bint blur_                          = True
  int __pyx_v_blur_ = ((int)1);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cloud_effect", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_reduce_factor_ = __pyx_optional_args->reduce_factor_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_cloud_intensity_ = __pyx_optional_args->cloud_intensity_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_smooth_ = __pyx_optional_args->smooth_;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_bloom_ = __pyx_optional_args->bloom_;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_fast_bloom_ = __pyx_optional_args->fast_bloom_;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_bpf_threshold_ = __pyx_optional_args->bpf_threshold_;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_low_ = __pyx_optional_args->low_;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_high_ = __pyx_optional_args->high_;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_brightness_ = __pyx_optional_args->brightness_;
                      if (__pyx_optional_args->__pyx_n > 9) {
                        __pyx_v_brightness_intensity_ = __pyx_optional_args->brightness_intensity_;
                        if (__pyx_optional_args->__pyx_n > 10) {
                          __pyx_v_surface_ = __pyx_optional_args->surface_;
                          if (__pyx_optional_args->__pyx_n > 11) {
                            __pyx_v_transpose_ = __pyx_optional_args->transpose_;
                            if (__pyx_optional_args->__pyx_n > 12) {
                              __pyx_v_blur_ = __pyx_optional_args->blur_;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
/* … */
      __pyx_v_blur_ = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cloud_effect", 0, 5, 18, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2162, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.cloud_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_90cloud_effect(__pyx_self, __pyx_v_width_, __pyx_v_height_, __pyx_v_factor_, __pyx_v_palette_, __pyx_v_cloud_, __pyx_v_reduce_factor_, __pyx_v_cloud_intensity_, __pyx_v_smooth_, __pyx_v_bloom_, __pyx_v_fast_bloom_, __pyx_v_bpf_threshold_, __pyx_v_low_, __pyx_v_high_, __pyx_v_brightness_, __pyx_v_brightness_intensity_, __pyx_v_surface_, __pyx_v_transpose_, __pyx_v_blur_);
 02183:         ):
 02184:     """
 02185:     GENERATE CLOUD /SMOKE ON THE GAME DISPLAY
 02186: 
 02187:     * CLOUD TEXTURE SIZES
 02188: 
 02189:     input width_  : integer,
 02190:     input height_ : integer
 02191: 
 02192:     width_ and height_ values define the size of the texture e.g Surface(width x height)
 02193: 
 02194:     * CLOUD ASPECT (CONTROL OVER THE WIDTH):
 02195: 
 02196:     inputs low_ : integer
 02197:     input high_ : integer
 02198: 
 02199:     Optional arguments low_ & high_ (integer values) define the width 's limits of the cloud
 02200:     effect. low_ for the starting point and high_ for the ending of the effect.
 02201:     e.g low_ = 10 and high_ = 200. The cloud effect will be contain within width = 10 and 200
 02202:     low_ & high_ values must be in range [0 ... width_]
 02203: 
 02204:     * CLOUD HEIGHT:
 02205: 
 02206:     input factor_ : float
 02207: 
 02208:     The cloud maximum height can be adjust with the variable factor_ (float value)
 02209:     value > 3.95 will contain the effect within the display
 02210:     value < 3.95 will enlarge the effect over the display height
 02211:     Recommended value is 3.95 with reduce_factor_ = 3 otherwise adjust the value manually
 02212:     to contain the cloud effect within the display
 02213: 
 02214:     * SPEED CONSIDERATION
 02215: 
 02216:     input reduce_factor_ : integer
 02217: 
 02218:     The argument reduce_factor_ control the size of the texture to be processed
 02219:     e.g : a value of 2, divide by 4 the pygame surface define by the values (width_ & height_)
 02220:     Smaller texture improve the overall performances but will slightly degrade the cloud aspect,
 02221:     especially if the blur and smooth option are not enabled.
 02222:     Recommended value for reduce_factor_ is 3 (fast process)
 02223:     reduce_factor_ values must be an integer in range [ 0 ... 4]
 02224:     The reduce_factor_ value will have a significant impact on the cloud effect maximum height,
 02225:     adjust the argument factor_ accordingly
 02226: 
 02227:     * CLOUD INTENSITY AT THE SOURCE
 02228: 
 02229:     input cloud_intensity_: integer
 02230: 
 02231:     Set the cloud intensity with the variable cloud_intensity_, 0 low flame,
 02232:     32 maximum flame effect
 02233:     Values must be an int in range [0 ... 32]
 02234: 
 02235:     * SMOOTHING THE EFFECT
 02236: 
 02237:     input smooth_: True | False
 02238: 
 02239:     When smooth_ is True the algorithm will use the pygame function smoothscale (bi-linear
 02240:     filtering) or False the final texture will be adjust with the scale function.
 02241:     Set this variable to False if you need the best performance for the effect or if you require
 02242:     a pixelated cloud effect. Otherwise set the variable to True for a more realistic effect.
 02243: 
 02244:     * BLOOM EFFECT
 02245: 
 02246:     input bloom_         : True | False
 02247:     input fast_bloom_    : True | False
 02248:     input bpf_threshold_ : integer
 02249: 
 02250:     Bloom effect produce a bright and smooth light effect to the background texture where the cloud
 02251:     intensity is at its maximum.
 02252:     Use the flag fast_bloom_ for a compromise between a realistic effect and the best performances
 02253:     The flag fast_bloom_ define a very fast bloom algo using only the smallest texture
 02254:     to create a bloom effect (all the intermediate textures will be bypassed). See the bloom effect
 02255:     project for more details.
 02256:     When fast_bloom is False, all the sub-surfaces will be blit to the final effect and will
 02257:     produce a more realistic cloud effect (this will slightly degrade the overall performances).
 02258:     If the cloud effect is too bright, you can always adjust the bright pass filter value
 02259:     bpf_threshold_(this will adjust the bloom intensity)
 02260:     bpf_threshold_ value must be in range [ 0 ... 255]
 02261:     Below 128 the bloom effect will be more noticeable and above 128 only the brightest
 02262:     area will be enhanced.
 02263: 
 02264:     * LIGHT EFFECT INTENSITY
 02265: 
 02266:     input brightness_            : True | False
 02267:     input brightness_intensity_  : float
 02268: 
 02269:     When the flag is set to True, the algorithm will use an external function,
 02270:     <shader_brightness24_exclude_inplace_c> to increase the brightness of the effect / texture
 02271:     A custom color can be passed to the function defining the pixels to be ignored during the
 02272:     process (default is black color).
 02273:     the value must be in range [-1.0 ... 1.0]. Values below zero will decrease the brightness
 02274:     of the cloud effect and positive values will increase the brightness of the effect (causing
 02275:     bright white patches on the cloud texture).
 02276:     Values below -0.4 will cause the cloud effect to be translucent
 02277: 
 02278: 
 02279:     * OPTIONAL SURFACE
 02280: 
 02281:     input surface_ : pygame.Surface
 02282: 
 02283:     This is an optional surface that can be passed to the shader to improve the performances
 02284:     and to avoid a new surface to be generated every iterations. The surface size must match
 02285:     exactly the reduce texture dimensions otherwise an exception will be raise.
 02286:     see reduce_factor_ option to determine the cloud texture size that will be processed.
 02287: 
 02288: 
 02289:     * CLOUD ORIENTATION / DIRECTION
 02290: 
 02291:     input transpose_ = True | False,
 02292: 
 02293:     transpose_ = True, this will transpose the final array
 02294:     for e.g :
 02295:     If the final cloud texture is (w, h) after setting the transpose flag, the final
 02296:     cloud texture will become (h, w). As a result the cloud effect will be transversal (starting
 02297:     from the right of the display to the left side).
 02298:     You can always transpose / flip the texture to get the right cloud orientation
 02299: 
 02300:     * FINAL TOUCH
 02301: 
 02302:     input blur_ : True | False
 02303: 
 02304:     This will will blur the cloud effect for a more realistic appearance, remove all the jagged
 02305:     edge when and pixelated effect
 02306: 
 02307:     :param width_               : integer; Texture size (width)
 02308:     :param height_              : integer; Texture size (height)
 02309:     :param factor_              : float; Floating value used to control the size of the cloud
 02310:                                   effect. Value must be in range [3.95 ... 4.2]. Value > 3.95
 02311:                                   will contain the smoke/ cloud effect within the display.
 02312:                                   Values < 3.95 will enlarge the smoke effect.
 02313:     :param palette_             : numpy.ndarray or cython memoryview containing the color for the
 02314:                                   cloud effect (buffer containing mapped RGB colors (uint values))
 02315:     :param cloud_               : numpy.ndarray shape (w, h) containing float values
 02316:                                   (cloud intensity). For better performance it is advised to set the
 02317:                                   array to the size of the texture after applying the
 02318:                                   reduction_factor_. For example if the reduction_factor_ is 2,
 02319:                                   the texture would have to be width >> 1 and height >> 1 and the
 02320:                                   cloud_ array should be equivalent to numpy.empty((height >> 1,
 02321:                                   width >> 1), float32)
 02322:     :param reduce_factor_       : integer; unsigned short int ; Can be either 0, 1, 2, 3, 4.
 02323:                                   2 and 3 provide the best performance and the best looking effect.
 02324:     :param cloud_intensity_     : integer; Determine the amount of smoke the cloud
 02325:                                   effect will generate at the base of the effect (value must be in
 02326:                                   range [0 .. 260]). If you provide zero a random value between
 02327:                                   0 ... 260 will be assigned. If you provide 250, a random value
 02328:                                   between 250 and 260 will be set for the amount of smoke.
 02329:                                   The highest the value, the more dense the cloud effect will be
 02330:     :param smooth_              : boolean; True use a smoothscale (bi-linear filtering) or
 02331:                                   False -> scale algorithm jagged edges (mush faster)
 02332:     :param bloom_               : True | False, Add a bloom effect when the flag is set to True
 02333:                                   The bloom effect will smooth the cloud and create a dense smoke
 02334:                                   areas where the cloud is the brightest.
 02335:     :param fast_bloom_          : True | False; This set a fast algorithm for the bloom effect (the
 02336:                                   bloom effect will use the smallest texture)
 02337:     :param bpf_threshold_       : integer; Bright pass filter value must be in range [ 0 ... 255]
 02338:                                   0 produce the maximum bloom effect
 02339:     :param low_                 : integer; must be in range [ 0 ... width_], left position of the
 02340:                                   cloud effect
 02341:     :param high_                : integer; must be in range [ 0 ... height_], right position of the
 02342:                                   cloud effect
 02343:     :param brightness_          : True | False; Increase the brightness of the cloud effect when
 02344:                                   True
 02345:     :param brightness_intensity_: float; Set the brightness intensity of the cloud. The value must
 02346:                                   be in range [-1.0 ... +1.0]. Changing the value overtime will
 02347:                                   generate a realistic cloud effect. Negative value will generate
 02348:                                   translucent patch of smoke on the background image
 02349:     :param surface_             : Pygame.Surface; Pass a surface to the shader for
 02350:                                   better performance, otherwise a new surface will be created each
 02351:                                   calls.
 02352:     :param transpose_           : boolean; Transpose the array (w, h) become (h, w).
 02353:                                   The cloud effect will start from the left and move to the right
 02354:     :param blur_                : boolean; Blur the cloud effect
 02355:     :return                     : Return a pygame surface that can be blit directly to the game
 02356:                                   display
 02357:     """
 02358: 
+02359:     assert reduce_factor_ in (0, 1, 2, 3, 4), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    switch (__pyx_v_reduce_factor_) {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
      __pyx_t_1 = 1;
      break;
      default:
      __pyx_t_1 = 0;
      break;
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_reduce_factor_must_be_i);
      __PYX_ERR(1, 2359, __pyx_L1_error)
    }
  }
  #endif
 02360:         "Argument reduce factor must be in range 0 ... 4 " \
 02361:         "\n reduce_factor_ = 1 correspond to dividing the image size by 2" \
 02362:         "\n reduce_factor_ = 2 correspond to dividing the image size by 4"
 02363: 
+02364:     assert width_ > 0 and height_ > 0, "Argument width or height cannot be null or < 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = ((__pyx_v_width_ > 0) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L3_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_height_ > 0) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L3_bool_binop_done:;
    if (unlikely(!__pyx_t_1)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_width_or_height_cannot);
      __PYX_ERR(1, 2364, __pyx_L1_error)
    }
  }
  #endif
+02365:     assert factor_ > 0, "Argument factor_ cannot be null or < 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_factor_ > 0.0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_factor__cannot_be_null);
      __PYX_ERR(1, 2365, __pyx_L1_error)
    }
  }
  #endif
 02366: 
+02367:     return shader_cloud_effect_c(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_4.__pyx_n = 13;
  __pyx_t_4.reduce_factor_ = __pyx_v_reduce_factor_;
  __pyx_t_4.cloud_intensity_ = __pyx_v_cloud_intensity_;
  __pyx_t_4.smooth_ = __pyx_v_smooth_;
  __pyx_t_4.bloom_ = __pyx_v_bloom_;
  __pyx_t_4.fast_bloom_ = __pyx_v_fast_bloom_;
  __pyx_t_4.bpf_threshold_ = __pyx_v_bpf_threshold_;
  __pyx_t_4.low_ = __pyx_v_low_;
  __pyx_t_4.high_ = __pyx_v_high_;
  __pyx_t_4.brightness_ = __pyx_v_brightness_;
  __pyx_t_4.brightness_intensity_ = __pyx_v_brightness_intensity_;
  __pyx_t_4.surface_ = __pyx_v_surface_;
  __pyx_t_4.transpose_ = __pyx_v_transpose_;
  __pyx_t_4.blur_ = __pyx_v_blur_;
  __pyx_t_3 = __pyx_f_12PygameShader_6shader_shader_cloud_effect_c(__pyx_v_width_, __pyx_v_height_, __pyx_v_factor_, __pyx_v_palette_, __pyx_v_cloud_, &__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 02368:         width_, height_, factor_, palette_, cloud_,
 02369:         reduce_factor_, cloud_intensity_, smooth_,
 02370:         bloom_, fast_bloom_, bpf_threshold_, low_, high_, brightness_,
 02371:         brightness_intensity_, surface_, transpose_, blur_
 02372:     )
 02373: 
 02374: 
 02375: @cython.binding(False)
 02376: @cython.boundscheck(False)
 02377: @cython.wraparound(False)
 02378: @cython.nonecheck(False)
 02379: @cython.cdivision(True)
 02380: @cython.profile(False)
+02381: cpdef inline mirroring_array(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_93mirroring_array(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_mirroring_array(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mirroring_array", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("PygameShader.shader.mirroring_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_93mirroring_array(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_92mirroring_array[] = "\n    \n    SHADER MIRRORING\n\n    This method create a mirror image \n    \n    Compatible 24 - 32 bit image / surface\n    \n    :param surface_ : pygame.Surface; compatible 24 - 32 bit \n    :return         : returns a numpy ndarray shape (w, h, 3) \n    \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_93mirroring_array(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mirroring_array (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_92mirroring_array(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_92mirroring_array(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mirroring_array", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_mirroring_array(__pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2381, __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.shader.mirroring_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02382:     """
 02383: 
 02384:     SHADER MIRRORING
 02385: 
 02386:     This method create a mirror image
 02387: 
 02388:     Compatible 24 - 32 bit image / surface
 02389: 
 02390:     :param surface_ : pygame.Surface; compatible 24 - 32 bit
 02391:     :return         : returns a numpy ndarray shape (w, h, 3)
 02392: 
 02393:     """
+02394:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2394, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2394, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2394, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02395:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2394, __pyx_L1_error)
    }
  }
  #endif
 02396:     cdef unsigned char [:, :, :] rgb_array
+02397:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+02398:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2398, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2398, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 2398, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 02399: 
+02400:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.mirroring_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 2400, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+02401:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2401, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2401, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 2401, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 02402: 
+02403:     return mirroring_c(rgb_array)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = __pyx_f_12PygameShader_6shader_mirroring_c(__pyx_v_rgb_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 2403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;
 02404: 
 02405: 
 02406: 
 02407: @cython.binding(False)
 02408: @cython.boundscheck(False)
 02409: @cython.wraparound(False)
 02410: @cython.nonecheck(False)
 02411: @cython.cdivision(True)
 02412: @cython.profile(False)
+02413: cpdef inline void mirroring(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_95mirroring(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_mirroring(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mirroring", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.mirroring", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_95mirroring(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_94mirroring[] = "\n    SHADER MIRRORING (INPLACE)\n\n    This method create a mirror image \n\n    :param surface_ : pygame.Surface; compatible 24 - 32 bit \n    :return : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_95mirroring(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mirroring (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_94mirroring(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_94mirroring(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mirroring", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_mirroring(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2413, __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.shader.mirroring", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02414:     """
 02415:     SHADER MIRRORING (INPLACE)
 02416: 
 02417:     This method create a mirror image
 02418: 
 02419:     :param surface_ : pygame.Surface; compatible 24 - 32 bit
 02420:     :return : void
 02421:     """
+02422:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2422, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02423:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2423, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2422, __pyx_L1_error)
    }
  }
  #endif
 02424:     cdef unsigned char [:, :, :] rgb_array
+02425:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+02426:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2426, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2426, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 2426, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 02427: 
+02428:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.mirroring", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 2428, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+02429:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2429, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2429, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 2429, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 02430: 
+02431:     mirroring_inplace_c(rgb_array)
  __pyx_t_7 = __pyx_f_12PygameShader_6shader_mirroring_inplace_c(__pyx_v_rgb_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 2431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 02432: 
 02433: # cpdef inline transpose_inplace(object surface_):
 02434: #     return tranpose_c(pixels3d(surface_))
 02435: 
 02436: 
 02437: 
 02438: @cython.binding(False)
 02439: @cython.boundscheck(False)
 02440: @cython.wraparound(False)
 02441: @cython.nonecheck(False)
 02442: @cython.cdivision(True)
 02443: @cython.profile(False)
+02444: cpdef inline void sharpen(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_97sharpen(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_sharpen(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sharpen", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.sharpen", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_97sharpen(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_96sharpen[] = "\n    \n    SHARPEN IMAGE APPLYING THE BELOW 3 X 3 KERNEL OVER EVERY PIXELS.\n\n    :param surface_ : pygame.Surface; compatible 24 - 32 bit \n    :return         : void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_97sharpen(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sharpen (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_96sharpen(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_96sharpen(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sharpen", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_sharpen(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2444, __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.shader.sharpen", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02445:     """
 02446: 
 02447:     SHARPEN IMAGE APPLYING THE BELOW 3 X 3 KERNEL OVER EVERY PIXELS.
 02448: 
 02449:     :param surface_ : pygame.Surface; compatible 24 - 32 bit
 02450:     :return         : void
 02451:     """
+02452:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2452, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02453:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2453, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2452, __pyx_L1_error)
    }
  }
  #endif
 02454:     cdef unsigned char [:, :, :] rgb_array
+02455:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+02456:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2456, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2456, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 2456, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 02457: 
+02458:     except Exception as e:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("PygameShader.shader.sharpen", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(1, 2458, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+02459:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_10 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2459, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2459, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 2459, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 02460: 
+02461:     shader_sharpen_filter_inplace_c(rgb_array)
  __pyx_f_12PygameShader_6shader_shader_sharpen_filter_inplace_c(__pyx_v_rgb_array);
 02462: 
 02463: @cython.binding(False)
 02464: @cython.boundscheck(False)
 02465: @cython.wraparound(False)
 02466: @cython.nonecheck(False)
 02467: @cython.cdivision(True)
 02468: @cython.profile(False)
+02469: cpdef inline void dirt_lens(
static PyObject *__pyx_pw_12PygameShader_6shader_99dirt_lens(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_dirt_lens(PyObject *__pyx_v_surface_, PyObject *__pyx_v_lens_model_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_dirt_lens *__pyx_optional_args) {
  int __pyx_v_flag_ = __pyx_k__15;
  float __pyx_v_light_ = ((float)0.0);
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dirt_lens", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_flag_ = __pyx_optional_args->flag_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_light_ = __pyx_optional_args->light_;
      }
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("PygameShader.shader.dirt_lens", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_99dirt_lens(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_98dirt_lens[] = "\n    DIRT LENS EFFECT \n    \n    This function display a dirt lens texture on the top of your game display to \n    simulate a camera artefact or realistic camera effect when the light from the\n    scene is oriented directly toward the camera. \n    \n    Choose a lens texture from the Assets directory (free textures provided in Assets directory \n    of this project). All textures are sizes 5184x3456 and would have to be re-sized to  \n    your game display and used by function `dirt_lens`. \n    The function dirt_lens will not resize the texture for you.\n    \n    The setting light_ is a float values cap between -1.0 to 0.2 and allow you to increase the \n    light source oriented toward the camera. Values <0.0 will decrease the lens dirt \n    effect and values >0.0 will increase the brightness of the display and increase the \n    amount of dirt on the camera lens (your display).\n    \n    Optionally the setting flag_ can be changed from BLEND_RGB_ADD to any other pygame optional \n    flags value. BLEND_RGB_ADD is the default setting and allow the pixels from the dirt lens \n    texture to be blended (added) to the display and provide the brightest and better looking \n    effect. \n    \n    This effect can be used for real time rendering for surfaces resolution 1024x768  \n    \n    Assets/Bokeh__Lens_Dirt_9.jpg\n    Assets/Bokeh__Lens_Dirt_38.jpg\n    Assets/Bokeh__Lens_Dirt_46.jpg\n    Assets/Bokeh__Lens_Dirt_50.jpg\n    Assets/Bokeh__Lens_Dirt_54.jpg\n    Assets/Bokeh__Lens_Dirt_67.jpg\n    \n    :param surface_   : Surface 24 - 32 bit represent the surface or the display \n    \n    :param lens_model_: Surface The Lens model is a pygame Surface. PygameShader provide a 6 \n     different surfaces that can be used as a layer to generate a dirt lens effect on your game \n     display. See above for the name of the free dirt lens textures. \n     The texture has to be loaded prior calling this effect and passed as an argument. By default \n     the textu""res sizes are 5184x3456 (width & height). The texture would have also to be re-scale \n     once to the game display dimensions (e.g 1027x768) or to the size of your texture.\n     \n    :param flag_      : integer; pygame flags such as BLEND_RGB_ADD, BLEND_RGB_MAX etc. These flags \n     will change the overall appearance of the effect blending the dirt lens\n     image with a different mathematical expression. BLEND_RGB_ADD is the \n     default flag and blend together the dirt_lens and the game display \n     providing a very bright aspect and vivid effect.\n    \n    :param light_     : float; Float value cap between [-1.0 ... 0.2] to increase or decrease \n     the overall brightness of the dirt lens texture. Tis setting can be used to simulate a \n     texture transition when sweeping the values from -1.0 toward 0.2 by a small increment.\n     Values < 0 will tend to diminish the effect and values > 0 will increase the brightness \n     and the dirt lens effect. \n     \n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_99dirt_lens(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  PyObject *__pyx_v_lens_model_ = 0;
  int __pyx_v_flag_;
  float __pyx_v_light_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dirt_lens (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_lens_model,&__pyx_n_s_flag,&__pyx_n_s_light,0};
    PyObject* values[4] = {0,0,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  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_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_lens_model)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("dirt_lens", 0, 2, 4, 1); __PYX_ERR(1, 2469, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag);
          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_light);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dirt_lens") < 0)) __PYX_ERR(1, 2469, __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_surface_ = values[0];
    __pyx_v_lens_model_ = values[1];
    if (values[2]) {
      __pyx_v_flag_ = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_flag_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2472, __pyx_L3_error)
    } else {
      __pyx_v_flag_ = __pyx_k__15;
    }
    if (values[3]) {
      __pyx_v_light_ = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_light_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 2473, __pyx_L3_error)
    } else {
      __pyx_v_light_ = ((float)0.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dirt_lens", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2469, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.dirt_lens", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_98dirt_lens(__pyx_self, __pyx_v_surface_, __pyx_v_lens_model_, __pyx_v_flag_, __pyx_v_light_);
  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_6shader_98dirt_lens(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, PyObject *__pyx_v_lens_model_, int __pyx_v_flag_, float __pyx_v_light_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dirt_lens", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 2;
  __pyx_t_1.flag_ = __pyx_v_flag_;
  __pyx_t_1.light_ = __pyx_v_light_;
  __pyx_f_12PygameShader_6shader_dirt_lens(__pyx_v_surface_, __pyx_v_lens_model_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.dirt_lens", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02470:         object surface_,
 02471:         object lens_model_,
+02472:         int flag_=BLEND_RGB_ADD,
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 2472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_33); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __pyx_k__15 = __pyx_t_7;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 2472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
/* … */
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_33); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __pyx_k__15 = __pyx_t_7;
 02473:         float light_ = 0.0
 02474: ):
 02475:     """
 02476:     DIRT LENS EFFECT
 02477: 
 02478:     This function display a dirt lens texture on the top of your game display to
 02479:     simulate a camera artefact or realistic camera effect when the light from the
 02480:     scene is oriented directly toward the camera.
 02481: 
 02482:     Choose a lens texture from the Assets directory (free textures provided in Assets directory
 02483:     of this project). All textures are sizes 5184x3456 and would have to be re-sized to
 02484:     your game display and used by function `dirt_lens`.
 02485:     The function dirt_lens will not resize the texture for you.
 02486: 
 02487:     The setting light_ is a float values cap between -1.0 to 0.2 and allow you to increase the
 02488:     light source oriented toward the camera. Values <0.0 will decrease the lens dirt
 02489:     effect and values >0.0 will increase the brightness of the display and increase the
 02490:     amount of dirt on the camera lens (your display).
 02491: 
 02492:     Optionally the setting flag_ can be changed from BLEND_RGB_ADD to any other pygame optional
 02493:     flags value. BLEND_RGB_ADD is the default setting and allow the pixels from the dirt lens
 02494:     texture to be blended (added) to the display and provide the brightest and better looking
 02495:     effect.
 02496: 
 02497:     This effect can be used for real time rendering for surfaces resolution 1024x768
 02498: 
 02499:     Assets/Bokeh__Lens_Dirt_9.jpg
 02500:     Assets/Bokeh__Lens_Dirt_38.jpg
 02501:     Assets/Bokeh__Lens_Dirt_46.jpg
 02502:     Assets/Bokeh__Lens_Dirt_50.jpg
 02503:     Assets/Bokeh__Lens_Dirt_54.jpg
 02504:     Assets/Bokeh__Lens_Dirt_67.jpg
 02505: 
 02506:     :param surface_   : Surface 24 - 32 bit represent the surface or the display
 02507: 
 02508:     :param lens_model_: Surface The Lens model is a pygame Surface. PygameShader provide a 6
 02509:      different surfaces that can be used as a layer to generate a dirt lens effect on your game
 02510:      display. See above for the name of the free dirt lens textures.
 02511:      The texture has to be loaded prior calling this effect and passed as an argument. By default
 02512:      the textures sizes are 5184x3456 (width & height). The texture would have also to be re-scale
 02513:      once to the game display dimensions (e.g 1027x768) or to the size of your texture.
 02514: 
 02515:     :param flag_      : integer; pygame flags such as BLEND_RGB_ADD, BLEND_RGB_MAX etc. These flags
 02516:      will change the overall appearance of the effect blending the dirt lens
 02517:      image with a different mathematical expression. BLEND_RGB_ADD is the
 02518:      default flag and blend together the dirt_lens and the game display
 02519:      providing a very bright aspect and vivid effect.
 02520: 
 02521:     :param light_     : float; Float value cap between [-1.0 ... 0.2] to increase or decrease
 02522:      the overall brightness of the dirt lens texture. Tis setting can be used to simulate a
 02523:      texture transition when sweeping the values from -1.0 toward 0.2 by a small increment.
 02524:      Values < 0 will tend to diminish the effect and values > 0 will increase the brightness
 02525:      and the dirt lens effect.
 02526: 
 02527:     :return: void
 02528:     """
+02529:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2529, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02530:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2530, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2529, __pyx_L1_error)
    }
  }
  #endif
 02531: 
+02532:     assert PyObject_IsInstance(lens_model_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2532, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2532, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_lens_model_, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2532, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02533:         "\nArgument lens_model_ must be a pygame.Surface type, got %s " % type(lens_model_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_lens_model__must_be_a, ((PyObject *)Py_TYPE(__pyx_v_lens_model_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2533, __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(1, 2532, __pyx_L1_error)
    }
  }
  #endif
 02534: 
+02535:     assert PyObject_IsInstance(light_, float), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_light_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2535, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_1, ((PyObject *)(&PyFloat_Type))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2535, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02536:         "\nArgument light_ must be a float type, got %s " % type(light_)
      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_light_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2536, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_light__must_be_a_float, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2536, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2535, __pyx_L1_error)
    }
  }
  #endif
 02537: 
+02538:     if light_ > 0.2:
  __pyx_t_3 = ((__pyx_v_light_ > 0.2) != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+02539:         light_ = 0.2
    __pyx_v_light_ = 0.2;
+02540:     elif light_ < -1.0:
  __pyx_t_3 = ((__pyx_v_light_ < -1.0) != 0);
  if (__pyx_t_3) {
/* … */
  }
  __pyx_L3:;
+02541:         light_ = 1.0
    __pyx_v_light_ = 1.0;
 02542: 
+02543:     assert PyObject_IsInstance(flag_, int), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_flag_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2543, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_2, ((PyObject *)(&PyInt_Type))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02544:         "\nArgument flag_ must be a int type, got %s " % type(flag_)
      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_flag_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_flag__must_be_a_int_ty, ((PyObject *)Py_TYPE(__pyx_t_2))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 2543, __pyx_L1_error)
    }
  }
  #endif
 02545: 
+02546:     dirt_lens_c(surface_, lens_model_, flag_, light_)
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.light_ = __pyx_v_light_;
  __pyx_f_12PygameShader_6shader_dirt_lens_c(__pyx_v_surface_, __pyx_v_lens_model_, __pyx_v_flag_, &__pyx_t_4); 
 02547: 
 02548: 
 02549: # *******************************************************************
 02550: 
 02551: @cython.binding(False)
 02552: @cython.binding(False)
 02553: @cython.boundscheck(False)
 02554: @cython.wraparound(False)
 02555: @cython.nonecheck(False)
 02556: @cython.cdivision(True)
 02557: @cython.profile(False)
+02558: cpdef inline void end_game(object surface):
static PyObject *__pyx_pw_12PygameShader_6shader_101end_game(PyObject *__pyx_self, PyObject *__pyx_v_surface); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_end_game(CYTHON_UNUSED PyObject *__pyx_v_surface, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("end_game", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("PygameShader.shader.end_game", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_101end_game(PyObject *__pyx_self, PyObject *__pyx_v_surface); /*proto*/
static char __pyx_doc_12PygameShader_6shader_100end_game[] = "\n    \n    :param surface: \n    :return: \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_101end_game(PyObject *__pyx_self, PyObject *__pyx_v_surface) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("end_game (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_100end_game(__pyx_self, ((PyObject *)__pyx_v_surface));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_100end_game(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("end_game", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_end_game(__pyx_v_surface, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2558, __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.shader.end_game", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02559:     """
 02560: 
 02561:     :param surface:
 02562:     :return:
 02563:     """
+02564:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2564, __pyx_L1_error)
 02565: 
 02566: @cython.binding(False)
 02567: @cython.binding(False)
 02568: @cython.boundscheck(False)
 02569: @cython.wraparound(False)
 02570: @cython.nonecheck(False)
 02571: @cython.cdivision(True)
 02572: @cython.profile(False)
+02573: cpdef inline void level_clear(object surface):
static PyObject *__pyx_pw_12PygameShader_6shader_103level_clear(PyObject *__pyx_self, PyObject *__pyx_v_surface); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_level_clear(CYTHON_UNUSED PyObject *__pyx_v_surface, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("level_clear", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("PygameShader.shader.level_clear", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_103level_clear(PyObject *__pyx_self, PyObject *__pyx_v_surface); /*proto*/
static char __pyx_doc_12PygameShader_6shader_102level_clear[] = "\n    \n    :param surface: \n    :return: \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_103level_clear(PyObject *__pyx_self, PyObject *__pyx_v_surface) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("level_clear (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_102level_clear(__pyx_self, ((PyObject *)__pyx_v_surface));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_102level_clear(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("level_clear", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_level_clear(__pyx_v_surface, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2573, __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.shader.level_clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02574:     """
 02575: 
 02576:     :param surface:
 02577:     :return:
 02578:     """
+02579:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2579, __pyx_L1_error)
 02580: 
 02581: @cython.binding(False)
 02582: @cython.binding(False)
 02583: @cython.boundscheck(False)
 02584: @cython.wraparound(False)
 02585: @cython.nonecheck(False)
 02586: @cython.cdivision(True)
 02587: @cython.profile(False)
+02588: cpdef object dithering(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_105dithering(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_dithering(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_rgb_array = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dithering", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("PygameShader.shader.dithering", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rgb_array);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_105dithering(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_104dithering[] = "\n    Dithering is used in computer graphics to create the illusion of \"color depth\" in images with\n    a limited color palette - a technique also known as color quantization. In a dithered image,\n    colors that are not available in the palette are approximated by a diffusion of colored pixels\n    from within the available palette. The human eye perceives the diffusion as a mixture of \n    the colors within it (see color vision). Dithered images, particularly those with relatively\n     few colors, can often be distinguished by a characteristic graininess or speckled appearance\n    \n    Take a pygame surface as argument format 24-32 bit and convert it to a 3d array format \n    (w, h, 3) type float (float32, single precision). \n    As the image is converted to a different data type format (uint8 to float32), \n    the transformation cannot be applied inplace. The image returned by the method dithering \n    is a copy of the original image.   \n    \n    :param surface_: Pygame surface format 24-32 bit \n    :return        : Surface; \n    \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_105dithering(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dithering (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_104dithering(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_104dithering(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dithering", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_dithering(__pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2588, __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.shader.dithering", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02589: 
 02590:     """
 02591:     Dithering is used in computer graphics to create the illusion of "color depth" in images with
 02592:     a limited color palette - a technique also known as color quantization. In a dithered image,
 02593:     colors that are not available in the palette are approximated by a diffusion of colored pixels
 02594:     from within the available palette. The human eye perceives the diffusion as a mixture of
 02595:     the colors within it (see color vision). Dithered images, particularly those with relatively
 02596:      few colors, can often be distinguished by a characteristic graininess or speckled appearance
 02597: 
 02598:     Take a pygame surface as argument format 24-32 bit and convert it to a 3d array format
 02599:     (w, h, 3) type float (float32, single precision).
 02600:     As the image is converted to a different data type format (uint8 to float32),
 02601:     the transformation cannot be applied inplace. The image returned by the method dithering
 02602:     is a copy of the original image.
 02603: 
 02604:     :param surface_: Pygame surface format 24-32 bit
 02605:     :return        : Surface;
 02606: 
 02607:     """
+02608:     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(1, 2608, __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(1, 2608, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+02609:         'Argument surface_ must be a pygame.Surface got %s ' % type(surface_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyga, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2609, __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(1, 2608, __pyx_L1_error)
    }
  }
  #endif
 02610: 
+02611:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+02612:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2612, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2612, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_rgb_array = __pyx_t_1;
      __pyx_t_1 = 0;
 02613: 
+02614:     except Exception as e:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("PygameShader.shader.dithering", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 2614, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
+02615:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_9 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2615, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2615, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 2615, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 02616: 
+02617:     return dithering_c(numpy.asarray(rgb_array/<float>255.0, dtype=numpy.float32))
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_v_rgb_array, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_numpy); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_9, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __pyx_f_12PygameShader_6shader_dithering_c(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
  __pyx_r = __pyx_t_9;
  __pyx_t_9 = 0;
  goto __pyx_L0;
 02618: 
 02619: @cython.binding(False)
 02620: @cython.binding(False)
 02621: @cython.boundscheck(False)
 02622: @cython.wraparound(False)
 02623: @cython.nonecheck(False)
 02624: @cython.cdivision(True)
 02625: @cython.profile(False)
+02626: cpdef inline void dithering_inplace(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_107dithering_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_dithering_inplace(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_rgb_array = NULL;
  PyObject *__pyx_v_e = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dithering_inplace", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.dithering_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rgb_array);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_107dithering_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_106dithering_inplace[] = "\n    Dithering is used in computer graphics to create the illusion of \"color depth\" in images with\n    a limited color palette - a technique also known as color quantization. In a dithered image,\n    colors that are not available in the palette are approximated by a diffusion of colored pixels\n    from within the available palette. The human eye perceives the diffusion as a mixture of \n    the colors within it (see color vision). Dithered images, particularly those with relatively\n     few colors, can often be distinguished by a characteristic graininess or speckled appearance\n\n    Take a pygame surface as argument format 24-32 bit and convert it to a 3d array format \n    (w, h, 3) type float (float32, single precision). \n    As the image is converted to a different data type format (uint8 to float32), \n    the transformation cannot be applied inplace. The image returned by the method dithering \n    is a copy of the original image.   \n\n    :param surface_: Pygame surface format 24-32 bit \n    :return        : Surface; \n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_107dithering_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dithering_inplace (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_106dithering_inplace(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_106dithering_inplace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dithering_inplace", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_dithering_inplace(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2626, __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.shader.dithering_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02627:     """
 02628:     Dithering is used in computer graphics to create the illusion of "color depth" in images with
 02629:     a limited color palette - a technique also known as color quantization. In a dithered image,
 02630:     colors that are not available in the palette are approximated by a diffusion of colored pixels
 02631:     from within the available palette. The human eye perceives the diffusion as a mixture of
 02632:     the colors within it (see color vision). Dithered images, particularly those with relatively
 02633:      few colors, can often be distinguished by a characteristic graininess or speckled appearance
 02634: 
 02635:     Take a pygame surface as argument format 24-32 bit and convert it to a 3d array format
 02636:     (w, h, 3) type float (float32, single precision).
 02637:     As the image is converted to a different data type format (uint8 to float32),
 02638:     the transformation cannot be applied inplace. The image returned by the method dithering
 02639:     is a copy of the original image.
 02640: 
 02641:     :param surface_: Pygame surface format 24-32 bit
 02642:     :return        : Surface;
 02643: 
 02644:     """
+02645:     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(1, 2645, __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(1, 2645, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+02646:         'Argument surface_ must be a pygame.Surface got %s ' % type(surface_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyga, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2646, __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(1, 2645, __pyx_L1_error)
    }
  }
  #endif
 02647: 
+02648:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+02649:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2649, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2649, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_rgb_array = __pyx_t_1;
      __pyx_t_1 = 0;
 02650: 
+02651:     except Exception as e:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("PygameShader.shader.dithering_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 2651, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
+02652:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_9 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2652, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2652, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 2652, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 02653: 
+02654:     dithering__c(numpy.asarray(rgb_array/<float>255.0, dtype=numpy.float32), rgb_array)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_v_rgb_array, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_numpy); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_9, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(1, 2654, __pyx_L1_error)
  __pyx_f_12PygameShader_6shader_dithering__c(__pyx_t_11, __pyx_t_12);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
 02655: 
 02656: 
 02657: 
 02658: @cython.binding(False)
 02659: @cython.binding(False)
 02660: @cython.boundscheck(False)
 02661: @cython.wraparound(False)
 02662: @cython.nonecheck(False)
 02663: @cython.cdivision(True)
 02664: @cython.profile(False)
+02665: cpdef object pixelation(object surface_, unsigned int blocksize_=16):
static PyObject *__pyx_pw_12PygameShader_6shader_109pixelation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_pixelation(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_pixelation *__pyx_optional_args) {
  unsigned int __pyx_v_blocksize_ = ((unsigned int)16);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  PyObject *__pyx_v_small = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pixelation", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_blocksize_ = __pyx_optional_args->blocksize_;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("PygameShader.shader.pixelation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_small);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_109pixelation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_108pixelation[] = "\n    Pixelate a pygame.Surface \n    \n    This method cannot be used for the game display as the change \n    is applied in a new Surface\n    \n    :param surface_: pygame.Surface; \n    :param blocksize_: unsigned int; block size used for the pixelation process, default is 16\n    :return: pixelated surface\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_109pixelation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  unsigned int __pyx_v_blocksize_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pixelation (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_blocksize,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocksize);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pixelation") < 0)) __PYX_ERR(1, 2665, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_blocksize_ = __Pyx_PyInt_As_unsigned_int(values[1]); if (unlikely((__pyx_v_blocksize_ == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2665, __pyx_L3_error)
    } else {
      __pyx_v_blocksize_ = ((unsigned int)16);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pixelation", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2665, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.pixelation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_108pixelation(__pyx_self, __pyx_v_surface_, __pyx_v_blocksize_);
  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_6shader_108pixelation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, unsigned int __pyx_v_blocksize_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pixelation", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.blocksize_ = __pyx_v_blocksize_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_pixelation(__pyx_v_surface_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2665, __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.shader.pixelation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_pixelation {
  int __pyx_n;
  unsigned int blocksize_;
};
 02666:     """
 02667:     Pixelate a pygame.Surface
 02668: 
 02669:     This method cannot be used for the game display as the change
 02670:     is applied in a new Surface
 02671: 
 02672:     :param surface_: pygame.Surface;
 02673:     :param blocksize_: unsigned int; block size used for the pixelation process, default is 16
 02674:     :return: pixelated surface
 02675:     """
+02676:     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(1, 2676, __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(1, 2676, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+02677:         'Argument surface_ must be a pygame.Surface got %s ' % type(surface_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyga, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2677, __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(1, 2676, __pyx_L1_error)
    }
  }
  #endif
 02678: 
+02679:     assert blocksize_ > 4, 'Invalid block size, blocksize must be > 4  got %s ' % blocksize_
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_blocksize_ > 4) != 0))) {
      __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_blocksize_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_block_size_blocksize_mus, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 2679, __pyx_L1_error)
    }
  }
  #endif
 02680: 
 02681:     cdef Py_ssize_t w, h
+02682:     w, h = surface_.get_size()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    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(1, 2682, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 2682, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 2682, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 2682, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 2682, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_w = __pyx_t_7;
  __pyx_v_h = __pyx_t_8;
+02683:     cdef object small = smoothscale(surface_, (blocksize_, blocksize_))
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_blocksize_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyInt_From_unsigned_int(__pyx_v_blocksize_); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_5);
  __pyx_t_1 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_surface_, __pyx_t_9};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2683, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_surface_, __pyx_t_9};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2683, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_v_surface_);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_small = __pyx_t_3;
  __pyx_t_3 = 0;
+02684:     return scale(small, (w, h))
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_9);
  __pyx_t_1 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_small, __pyx_t_5};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2684, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_small, __pyx_t_5};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2684, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_INCREF(__pyx_v_small);
    __Pyx_GIVEREF(__pyx_v_small);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_v_small);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 02685: 
 02686: @cython.binding(False)
 02687: @cython.binding(False)
 02688: @cython.boundscheck(False)
 02689: @cython.wraparound(False)
 02690: @cython.nonecheck(False)
 02691: @cython.cdivision(True)
 02692: @cython.profile(False)
+02693: cpdef inline zoom_in(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_111zoom_in(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_zoom_in(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("zoom_in", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.zoom_in", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_111zoom_in(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_110zoom_in[] = "\n\n    :param surface_ : pygame.Surface; compatible 24 - 32 bit \n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_111zoom_in(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("zoom_in (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_110zoom_in(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_110zoom_in(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("zoom_in", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_zoom_in(__pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2693, __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.shader.zoom_in", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02694:     """
 02695: 
 02696:     :param surface_ : pygame.Surface; compatible 24 - 32 bit
 02697:     :return:
 02698:     """
+02699:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2699, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02700:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2700, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2699, __pyx_L1_error)
    }
  }
  #endif
 02701: 
+02702:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2702, __pyx_L1_error)
 02703: 
 02704: 
 02705: @cython.binding(False)
 02706: @cython.binding(False)
 02707: @cython.boundscheck(False)
 02708: @cython.wraparound(False)
 02709: @cython.nonecheck(False)
 02710: @cython.cdivision(True)
 02711: @cython.profile(False)
+02712: cpdef inline electric(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_113electric(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_electric(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("electric", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.electric", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_113electric(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_112electric[] = "\n\n    :param surface_ : pygame.Surface; compatible 24 - 32 bit \n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_113electric(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("electric (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_112electric(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_112electric(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("electric", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_electric(__pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2712, __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.shader.electric", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02713:     """
 02714: 
 02715:     :param surface_ : pygame.Surface; compatible 24 - 32 bit
 02716:     :return:
 02717:     """
+02718:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2718, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02719:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2718, __pyx_L1_error)
    }
  }
  #endif
 02720: 
+02721:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2721, __pyx_L1_error)
 02722: 
 02723: @cython.binding(False)
 02724: @cython.binding(False)
 02725: @cython.boundscheck(False)
 02726: @cython.wraparound(False)
 02727: @cython.nonecheck(False)
 02728: @cython.cdivision(True)
 02729: @cython.profile(False)
+02730: cpdef inline filmstrips(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_115filmstrips(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_filmstrips(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filmstrips", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.filmstrips", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_115filmstrips(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_114filmstrips[] = "\n\n    :param surface_ : pygame.Surface; compatible 24 - 32 bit \n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_115filmstrips(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filmstrips (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_114filmstrips(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_114filmstrips(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filmstrips", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_filmstrips(__pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2730, __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.shader.filmstrips", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02731:     """
 02732: 
 02733:     :param surface_ : pygame.Surface; compatible 24 - 32 bit
 02734:     :return:
 02735:     """
+02736:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2736, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02737:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2737, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2736, __pyx_L1_error)
    }
  }
  #endif
 02738: 
+02739:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2739, __pyx_L1_error)
 02740: 
 02741: 
 02742: @cython.binding(False)
 02743: @cython.binding(False)
 02744: @cython.boundscheck(False)
 02745: @cython.wraparound(False)
 02746: @cython.nonecheck(False)
 02747: @cython.cdivision(True)
 02748: @cython.profile(False)
+02749: cpdef cubism(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_117cubism(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_cubism(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cubism", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.cubism", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_117cubism(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_116cubism[] = "\n\n    :param surface_ : pygame.Surface; compatible 24 - 32 bit \n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_117cubism(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cubism (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_116cubism(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_116cubism(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cubism", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_cubism(__pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2749, __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.shader.cubism", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02750:     """
 02751: 
 02752:     :param surface_ : pygame.Surface; compatible 24 - 32 bit
 02753:     :return:
 02754:     """
+02755:     assert isinstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2755, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02756:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2756, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2755, __pyx_L1_error)
    }
  }
  #endif
+02757:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2757, __pyx_L1_error)
 02758: 
 02759: 
 02760: @cython.binding(False)
 02761: @cython.binding(False)
 02762: @cython.boundscheck(False)
 02763: @cython.wraparound(False)
 02764: @cython.nonecheck(False)
 02765: @cython.cdivision(True)
 02766: @cython.profile(False)
+02767: cpdef code_listing(object surface_, size_):
static PyObject *__pyx_pw_12PygameShader_6shader_119code_listing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_code_listing(PyObject *__pyx_v_surface_, CYTHON_UNUSED PyObject *__pyx_v_size_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("code_listing", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.code_listing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_119code_listing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_118code_listing[] = "\n\n    :param surface_: pygame.Surface; compatible 24 - 32 bit \n    :param size_:\n    :return:\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_119code_listing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  PyObject *__pyx_v_size_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("code_listing (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_size_2,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_size_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("code_listing", 1, 2, 2, 1); __PYX_ERR(1, 2767, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "code_listing") < 0)) __PYX_ERR(1, 2767, __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_size_ = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("code_listing", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2767, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.code_listing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_118code_listing(__pyx_self, __pyx_v_surface_, __pyx_v_size_);
  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_6shader_118code_listing(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, PyObject *__pyx_v_size_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("code_listing", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_code_listing(__pyx_v_surface_, __pyx_v_size_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2767, __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.shader.code_listing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02768:     """
 02769: 
 02770:     :param surface_: pygame.Surface; compatible 24 - 32 bit
 02771:     :param size_:
 02772:     :return:
 02773:     """
+02774:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2774, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2774, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2774, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+02775:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2775, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2774, __pyx_L1_error)
    }
  }
  #endif
 02776: 
+02777:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2777, __pyx_L1_error)
 02778: 
 02779: @cython.binding(False)
 02780: @cython.binding(False)
 02781: @cython.boundscheck(False)
 02782: @cython.wraparound(False)
 02783: @cython.nonecheck(False)
 02784: @cython.cdivision(True)
 02785: @cython.profile(False)
+02786: cpdef ascii_char(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_121ascii_char(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_ascii_char(CYTHON_UNUSED PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_char", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("PygameShader.shader.ascii_char", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_121ascii_char(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_120ascii_char[] = "\n    \n    :param surface_: \n    :return: \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_121ascii_char(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_char (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_120ascii_char(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_120ascii_char(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_char", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_ascii_char(__pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2786, __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.shader.ascii_char", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02787:     """
 02788: 
 02789:     :param surface_:
 02790:     :return:
 02791:     """
+02792:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2792, __pyx_L1_error)
 02793: 
 02794: @cython.binding(False)
 02795: @cython.binding(False)
 02796: @cython.boundscheck(False)
 02797: @cython.wraparound(False)
 02798: @cython.nonecheck(False)
 02799: @cython.cdivision(True)
 02800: @cython.profile(False)
+02801: cpdef object blend(object source_, object destination_, float percentage_):
static PyObject *__pyx_pw_12PygameShader_6shader_123blend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_blend(PyObject *__pyx_v_source_, PyObject *__pyx_v_destination_, float __pyx_v_percentage_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blend", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("PygameShader.shader.blend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_123blend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_122blend[] = "\n    BLEND A SOURCE TEXTURE TOWARD A DESTINATION TEXTURE \n    \n    The shader create a new image from both source_ and destination_\n\n    * Video system must be initialised \n    * source_ & destination_ Textures must be same sizes\n    * Compatible with 24 - 32 bit surface\n    * Output create a new surface\n    * Image returned is converted for fast blit (convert())\n\n    :param source_     : pygame.Surface (Source)\n    :param destination_: pygame.Surface (Destination)\n    :param percentage_ : float; Percentage value between [0.0 ... 100.0]\n    :return: return    : Return a 24 bit pygame.Surface and blended with a percentage\n                         of the destination texture.\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_123blend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_source_ = 0;
  PyObject *__pyx_v_destination_ = 0;
  float __pyx_v_percentage_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_destination,&__pyx_n_s_percentage,0};
    PyObject* values[3] = {0,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  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_source)) != 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_destination)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("blend", 1, 3, 3, 1); __PYX_ERR(1, 2801, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_percentage)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("blend", 1, 3, 3, 2); __PYX_ERR(1, 2801, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "blend") < 0)) __PYX_ERR(1, 2801, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_source_ = values[0];
    __pyx_v_destination_ = values[1];
    __pyx_v_percentage_ = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_percentage_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 2801, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("blend", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2801, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.blend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_122blend(__pyx_self, __pyx_v_source_, __pyx_v_destination_, __pyx_v_percentage_);
  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_6shader_122blend(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_source_, PyObject *__pyx_v_destination_, float __pyx_v_percentage_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blend", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_blend(__pyx_v_source_, __pyx_v_destination_, __pyx_v_percentage_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2801, __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.shader.blend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02802:     """
 02803:     BLEND A SOURCE TEXTURE TOWARD A DESTINATION TEXTURE
 02804: 
 02805:     The shader create a new image from both source_ and destination_
 02806: 
 02807:     * Video system must be initialised
 02808:     * source_ & destination_ Textures must be same sizes
 02809:     * Compatible with 24 - 32 bit surface
 02810:     * Output create a new surface
 02811:     * Image returned is converted for fast blit (convert())
 02812: 
 02813:     :param source_     : pygame.Surface (Source)
 02814:     :param destination_: pygame.Surface (Destination)
 02815:     :param percentage_ : float; Percentage value between [0.0 ... 100.0]
 02816:     :return: return    : Return a 24 bit pygame.Surface and blended with a percentage
 02817:                          of the destination texture.
 02818:     """
+02819:     assert PyObject_IsInstance(source_, 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(1, 2819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_source_, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 2819, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+02820:         'Argument source_ must be a pygame.Surface got %s ' % type(source_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_source__must_be_a_pygam, ((PyObject *)Py_TYPE(__pyx_v_source_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2820, __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(1, 2819, __pyx_L1_error)
    }
  }
  #endif
 02821: 
+02822:     assert PyObject_IsInstance(destination_, numpy.ndarray), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_destination_, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 2822, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+02823:         'Argument destination_ must be a numpy.ndarray got %s ' % type(destination_)
      __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_destination__must_be_a, ((PyObject *)Py_TYPE(__pyx_v_destination_))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2823, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 2822, __pyx_L1_error)
    }
  }
  #endif
 02824: 
+02825:     assert 0.0 <= percentage_ <= 100.0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (0.0 <= __pyx_v_percentage_);
    if (__pyx_t_2) {
      __pyx_t_2 = (__pyx_v_percentage_ <= 100.0);
    }
    if (unlikely(!(__pyx_t_2 != 0))) {
+02826:         "\nIncorrect value for argument percentage should be [0.0 ... 100.0] got %s " % percentage_
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_percentage_); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incorrect_value_for_argument_pe, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 2825, __pyx_L1_error)
    }
  }
  #endif
 02827: 
+02828:     if percentage_ == 0.0:
  __pyx_t_2 = ((__pyx_v_percentage_ == 0.0) != 0);
  if (__pyx_t_2) {
/* … */
  }
+02829:         return source_
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_source_);
    __pyx_r = __pyx_v_source_;
    goto __pyx_L0;
 02830: 
+02831:     assert source_.get_size() == destination_.shape[:2], \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2831, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2831, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_destination_, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2831, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_3, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2831, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2831, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 2831, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) {
/* … */
  __pyx_slice__16 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_slice__16)) __PYX_ERR(1, 2831, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__16);
  __Pyx_GIVEREF(__pyx_slice__16);
 02832:         'Source and Destination surfaces must have same dimensions: ' \
+02833:         'Source (w:%s, h:%s), destination (w:%s, h:%s).' % \
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Source_and_Destination_surfaces, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2833, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 2831, __pyx_L1_error)
    }
  }
  #endif
+02834:         (*source_.get_size(), *destination_.shape[:2])
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2834, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2834, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_3 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2834, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_destination_, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2834, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_4, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2834, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__Pyx_PyList_Extend(__pyx_t_3, __pyx_t_1) < 0) __PYX_ERR(1, 2834, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      {
        PyObject *__pyx_temp = PyList_AsTuple(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_3);
        __pyx_t_3 = __pyx_temp; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2834, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
 02835: 
+02836:     return blending(source_, destination_, percentage_)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_destination_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 2836, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_blending(__pyx_v_source_, __pyx_t_6, __pyx_v_percentage_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2836, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 02837: 
 02838: 
 02839: 
 02840: @cython.binding(False)
 02841: @cython.boundscheck(False)
 02842: @cython.wraparound(False)
 02843: @cython.nonecheck(False)
 02844: @cython.cdivision(True)
 02845: @cython.profile(False)
+02846: cpdef void blend_inplace(
static PyObject *__pyx_pw_12PygameShader_6shader_125blend_inplace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static void __pyx_f_12PygameShader_6shader_blend_inplace(PyObject *__pyx_v_source_, PyObject *__pyx_v_destination_, float __pyx_v_percentage_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blend_inplace", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.blend_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_125blend_inplace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_124blend_inplace[] = "\n    BLEND A SOURCE TEXTURE TOWARD A DESTINATION TEXTURE \n\n    The shader create a new image from both source_ and destination_\n\n    * Video system must be initialised \n    * source_ & destination_ Textures must be same sizes\n    * Compatible with 24 - 32 bit surface\n    * Output create a new surface\n    * Image returned is converted for fast blit (convert())\n\n    :param source_     : pygame.Surface (Source)\n    :param destination_: 3d array (Destination)\n    :param percentage_ : float; Percentage value between [0.0 ... 100.0]\n    :return: return    : Return a 24 bit pygame.Surface and blended with a percentage\n                         of the destination texture.\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_125blend_inplace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_source_ = 0;
  PyObject *__pyx_v_destination_ = 0;
  float __pyx_v_percentage_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blend_inplace (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_destination,&__pyx_n_s_percentage,0};
    PyObject* values[3] = {0,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  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_source)) != 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_destination)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("blend_inplace", 1, 3, 3, 1); __PYX_ERR(1, 2846, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_percentage)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("blend_inplace", 1, 3, 3, 2); __PYX_ERR(1, 2846, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "blend_inplace") < 0)) __PYX_ERR(1, 2846, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_source_ = values[0];
    __pyx_v_destination_ = values[1];
    __pyx_v_percentage_ = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_percentage_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 2849, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("blend_inplace", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2846, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.blend_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_124blend_inplace(__pyx_self, __pyx_v_source_, __pyx_v_destination_, __pyx_v_percentage_);
  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_6shader_124blend_inplace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_source_, PyObject *__pyx_v_destination_, float __pyx_v_percentage_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blend_inplace", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_blend_inplace(__pyx_v_source_, __pyx_v_destination_, __pyx_v_percentage_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2846, __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.shader.blend_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02847:         object source_,
 02848:         object destination_,
 02849:         float percentage_
 02850:         ):
 02851:     """
 02852:     BLEND A SOURCE TEXTURE TOWARD A DESTINATION TEXTURE
 02853: 
 02854:     The shader create a new image from both source_ and destination_
 02855: 
 02856:     * Video system must be initialised
 02857:     * source_ & destination_ Textures must be same sizes
 02858:     * Compatible with 24 - 32 bit surface
 02859:     * Output create a new surface
 02860:     * Image returned is converted for fast blit (convert())
 02861: 
 02862:     :param source_     : pygame.Surface (Source)
 02863:     :param destination_: 3d array (Destination)
 02864:     :param percentage_ : float; Percentage value between [0.0 ... 100.0]
 02865:     :return: return    : Return a 24 bit pygame.Surface and blended with a percentage
 02866:                          of the destination texture.
 02867:     """
+02868:     assert PyObject_IsInstance(source_, 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(1, 2868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_source_, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 2868, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+02869:         'Argument source_ must be a pygame.Surface got %s ' % type(source_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_source__must_be_a_pygam, ((PyObject *)Py_TYPE(__pyx_v_source_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2869, __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(1, 2868, __pyx_L1_error)
    }
  }
  #endif
 02870: 
+02871:     assert PyObject_IsInstance(destination_, numpy.ndarray), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_destination_, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 2871, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+02872:         'Argument destination_ must be a numpy.ndarray got %s ' % type(destination_)
      __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_destination__must_be_a, ((PyObject *)Py_TYPE(__pyx_v_destination_))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2872, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 2871, __pyx_L1_error)
    }
  }
  #endif
 02873: 
+02874:     assert 0.0 <= percentage_ <= 100.0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = (0.0 <= __pyx_v_percentage_);
    if (__pyx_t_2) {
      __pyx_t_2 = (__pyx_v_percentage_ <= 100.0);
    }
    if (unlikely(!(__pyx_t_2 != 0))) {
+02875:         "\nIncorrect value for argument percentage should be [0.0 ... 100.0] got %s " % percentage_
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_percentage_); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2875, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incorrect_value_for_argument_pe, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2875, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 2874, __pyx_L1_error)
    }
  }
  #endif
 02876: 
+02877:     assert source_.get_size() == destination_.shape[ :2 ], \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_destination_, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_3, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2877, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 2877, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) {
 02878:         'Source and Destination surfaces must have same dimensions: ' \
+02879:         'Source (w:%s, h:%s), destination (w:%s, h:%s).' % \
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Source_and_Destination_surfaces, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2879, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 2877, __pyx_L1_error)
    }
  }
  #endif
+02880:         (*source_.get_size(), *destination_.shape[ :2 ])
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2880, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2880, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_3 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2880, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_destination_, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2880, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_4, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2880, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__Pyx_PyList_Extend(__pyx_t_3, __pyx_t_1) < 0) __PYX_ERR(1, 2880, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      {
        PyObject *__pyx_temp = PyList_AsTuple(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_3);
        __pyx_t_3 = __pyx_temp; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2880, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
 02881: 
+02882:     blending_inplace(source_, destination_, percentage_)
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_destination_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 2882, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_blending_inplace(__pyx_v_source_, __pyx_t_6, __pyx_v_percentage_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 02883: 
 02884: @cython.binding(False)
 02885: @cython.binding(False)
 02886: @cython.boundscheck(False)
 02887: @cython.wraparound(False)
 02888: @cython.nonecheck(False)
 02889: @cython.cdivision(True)
 02890: @cython.profile(False)
+02891: cpdef cartoon(
static PyObject *__pyx_pw_12PygameShader_6shader_127cartoon(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_cartoon(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_cartoon *__pyx_optional_args) {
  int __pyx_v_sobel_threshold_ = ((int)0x80);
  int __pyx_v_median_kernel_ = ((int)2);
  PyObject *__pyx_v_color_ = ((PyObject *)__pyx_int_8);
  PyObject *__pyx_v_flag_ = __pyx_k__17;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cartoon", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_sobel_threshold_ = __pyx_optional_args->sobel_threshold_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_median_kernel_ = __pyx_optional_args->median_kernel_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_color_ = __pyx_optional_args->color_;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_flag_ = __pyx_optional_args->flag_;
          }
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("PygameShader.shader.cartoon", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_127cartoon(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_126cartoon[] = "\n    CREATE A CARTOON EFFECT FROM A GIVEN SURFACE \n    \n    * This shader cannot be use online or real time due to the amout of \n      transformation. You can use this shader while editing your textures \n      befre the main loop \n    \n    * Compatible with 24 - 32 bit image \n    \n    :param surface_: pygame.Surface compatible 24 - 32 bit \n    :param sobel_threshold_: integer sobel threshold\n    :param median_kernel_  : integer median kernel  \n    :param color_          : integer; color reduction value (max color)\n    :param flag_           : integer; Blend flag e.g (BLEND_RGB_ADD, BLEND_RGB_SUB, \n                             BLEND_RGB_MULT, BLEND_RGB_MAX, BLEND_RGB_MIN  \n    :return                : Return a pygame Surface with the cartoon effect \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_127cartoon(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_sobel_threshold_;
  int __pyx_v_median_kernel_;
  PyObject *__pyx_v_color_ = 0;
  PyObject *__pyx_v_flag_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cartoon (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_sobel_threshold_2,&__pyx_n_s_median_kernel,&__pyx_n_s_color,&__pyx_n_s_flag,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[3] = ((PyObject *)__pyx_int_8);
    values[4] = __pyx_k__17;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        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_surface)) != 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_sobel_threshold_2);
          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_median_kernel);
          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_color);
          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_flag);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cartoon") < 0)) __PYX_ERR(1, 2891, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_surface_ = values[0];
    if (values[1]) {
      __pyx_v_sobel_threshold_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_sobel_threshold_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2893, __pyx_L3_error)
    } else {
      __pyx_v_sobel_threshold_ = ((int)0x80);
    }
    if (values[2]) {
      __pyx_v_median_kernel_ = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_median_kernel_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2894, __pyx_L3_error)
    } else {
      __pyx_v_median_kernel_ = ((int)2);
    }
    __pyx_v_color_ = values[3];
    __pyx_v_flag_ = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cartoon", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2891, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.cartoon", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_126cartoon(__pyx_self, __pyx_v_surface_, __pyx_v_sobel_threshold_, __pyx_v_median_kernel_, __pyx_v_color_, __pyx_v_flag_);
  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_6shader_126cartoon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_sobel_threshold_, int __pyx_v_median_kernel_, PyObject *__pyx_v_color_, PyObject *__pyx_v_flag_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cartoon", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.sobel_threshold_ = __pyx_v_sobel_threshold_;
  __pyx_t_2.median_kernel_ = __pyx_v_median_kernel_;
  __pyx_t_2.color_ = __pyx_v_color_;
  __pyx_t_2.flag_ = __pyx_v_flag_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_cartoon(__pyx_v_surface_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2891, __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.shader.cartoon", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02892:         object surface_,
 02893:         int sobel_threshold_ = 128,
 02894:         int median_kernel_   = 2,
 02895:         color_               = 8,
+02896:         flag_                = BLEND_RGB_ADD
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 2896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __pyx_k__17 = __pyx_t_33;
  __Pyx_GIVEREF(__pyx_t_33);
  __pyx_t_33 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 2896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __pyx_k__17 = __pyx_t_33;
  __Pyx_GIVEREF(__pyx_t_33);
  __pyx_t_33 = 0;
 02897: ):
 02898:     """
 02899:     CREATE A CARTOON EFFECT FROM A GIVEN SURFACE
 02900: 
 02901:     * This shader cannot be use online or real time due to the amout of
 02902:       transformation. You can use this shader while editing your textures
 02903:       befre the main loop
 02904: 
 02905:     * Compatible with 24 - 32 bit image
 02906: 
 02907:     :param surface_: pygame.Surface compatible 24 - 32 bit
 02908:     :param sobel_threshold_: integer sobel threshold
 02909:     :param median_kernel_  : integer median kernel
 02910:     :param color_          : integer; color reduction value (max color)
 02911:     :param flag_           : integer; Blend flag e.g (BLEND_RGB_ADD, BLEND_RGB_SUB,
 02912:                              BLEND_RGB_MULT, BLEND_RGB_MAX, BLEND_RGB_MIN
 02913:     :return                : Return a pygame Surface with the cartoon effect
 02914:     """
 02915: 
+02916:     return cartoon_effect(surface_, sobel_threshold_, median_kernel_, color_, flag_)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_color_); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2916, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_flag_); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2916, __pyx_L1_error)
  __pyx_t_3 = __pyx_f_12PygameShader_6shader_cartoon_effect(__pyx_v_surface_, __pyx_v_sobel_threshold_, __pyx_v_median_kernel_, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 02917: 
 02918: 
 02919: @cython.binding(False)
 02920: @cython.binding(False)
 02921: @cython.boundscheck(False)
 02922: @cython.wraparound(False)
 02923: @cython.nonecheck(False)
 02924: @cython.cdivision(True)
 02925: @cython.profile(False)
+02926: cpdef explode(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_129explode(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_explode(CYTHON_UNUSED PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("explode", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("PygameShader.shader.explode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_129explode(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_128explode[] = "\n\n    :param surface_: \n    :return: \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_129explode(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("explode (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_128explode(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_128explode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("explode", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_explode(__pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2926, __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.shader.explode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02927:     """
 02928: 
 02929:     :param surface_:
 02930:     :return:
 02931:     """
+02932:     raise NotImplementedError
  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
  __PYX_ERR(1, 2932, __pyx_L1_error)
 02933: 
 02934: @cython.binding(False)
 02935: @cython.boundscheck(False)
 02936: @cython.wraparound(False)
 02937: @cython.nonecheck(False)
 02938: @cython.cdivision(True)
+02939: cpdef object spectrum(int width, int height, float gamma=1.0):
static PyObject *__pyx_pw_12PygameShader_6shader_131spectrum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_spectrum(int __pyx_v_width, int __pyx_v_height, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_spectrum *__pyx_optional_args) {
  float __pyx_v_gamma = ((float)1.0);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("spectrum", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_gamma = __pyx_optional_args->gamma;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("PygameShader.shader.spectrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_131spectrum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_130spectrum[] = "\n    CREATE A PYGAME SURFACE DISPLAYING THE LIGHT SPECTRUM 380-750 nm\n\n    Color   Wavelength(nm) Frequency(THz)\n    Red     620-750        484-400\n    Orange  590-620        508-484\n    Yellow  570-590        526-508\n    Green   495-570        606-526\n    Blue    450-495        668-606\n    Violet  380-450        789-668\n\n    :param width: integer; width of the image\n    :param height: integer; height of the image\n    :param gamma: float; gamma value \n    :return: Return a pygame surface 24-bit (width, height) converted for fast \n    blit \n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_131spectrum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_width;
  int __pyx_v_height;
  float __pyx_v_gamma;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("spectrum (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_width,&__pyx_n_s_height,&__pyx_n_s_gamma,0};
    PyObject* values[3] = {0,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  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("spectrum", 0, 2, 3, 1); __PYX_ERR(1, 2939, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_gamma);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "spectrum") < 0)) __PYX_ERR(1, 2939, __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);
        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(1, 2939, __pyx_L3_error)
    __pyx_v_height = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2939, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_gamma = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_gamma == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 2939, __pyx_L3_error)
    } else {
      __pyx_v_gamma = ((float)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("spectrum", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2939, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.spectrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_130spectrum(__pyx_self, __pyx_v_width, __pyx_v_height, __pyx_v_gamma);
  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_6shader_130spectrum(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_width, int __pyx_v_height, float __pyx_v_gamma) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("spectrum", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.gamma = __pyx_v_gamma;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_spectrum(__pyx_v_width, __pyx_v_height, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2939, __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.shader.spectrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02940:     """
 02941:     CREATE A PYGAME SURFACE DISPLAYING THE LIGHT SPECTRUM 380-750 nm
 02942: 
 02943:     Color   Wavelength(nm) Frequency(THz)
 02944:     Red     620-750        484-400
 02945:     Orange  590-620        508-484
 02946:     Yellow  570-590        526-508
 02947:     Green   495-570        606-526
 02948:     Blue    450-495        668-606
 02949:     Violet  380-450        789-668
 02950: 
 02951:     :param width: integer; width of the image
 02952:     :param height: integer; height of the image
 02953:     :param gamma: float; gamma value
 02954:     :return: Return a pygame surface 24-bit (width, height) converted for fast
 02955:     blit
 02956: 
 02957:     """
 02958: 
+02959:     return spectrum_c(width, height, gamma)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.gamma = __pyx_v_gamma;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_spectrum_c(__pyx_v_width, __pyx_v_height, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 02960: 
 02961: 
 02962: @cython.binding(False)
 02963: @cython.binding(False)
 02964: @cython.boundscheck(False)
 02965: @cython.wraparound(False)
 02966: @cython.nonecheck(False)
 02967: @cython.cdivision(True)
 02968: @cython.profile(False)
+02969: cpdef inline void convert_27colors(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_133convert_27colors(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_convert_27colors(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert_27colors", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_WriteUnraisable("PygameShader.shader.convert_27colors", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_array_, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_133convert_27colors(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_132convert_27colors[] = "\n    THIS ALGORITHM CONVERT AN IMAGE USING 27 COLORS ONLY\n\n    :param surface_: numpy.ndarray; containing the pixels RGB. Array shape (w, h, 3)  \n    :return: void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_133convert_27colors(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert_27colors (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_132convert_27colors(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_132convert_27colors(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert_27colors", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_convert_27colors(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2969, __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.shader.convert_27colors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02970: 
 02971:     """
 02972:     THIS ALGORITHM CONVERT AN IMAGE USING 27 COLORS ONLY
 02973: 
 02974:     :param surface_: numpy.ndarray; containing the pixels RGB. Array shape (w, h, 3)
 02975:     :return: void
 02976:     """
+02977:     assert 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(1, 2977, __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(1, 2977, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+02978:         'Argument surface_ must be a valid Surface, got %s ' % type(surface_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_vali, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2978, __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(1, 2977, __pyx_L1_error)
    }
  }
  #endif
 02979:     cdef unsigned char [:, :, :] array_
+02980:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+02981:         array_ = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2981, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2981, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 2981, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_array_ = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 02982: 
+02983:     except (pygame.error, ValueError):
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pygame); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2983, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2983, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_10) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_builtin_ValueError);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_6, __pyx_t_7);
    __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0;
    if (__pyx_t_11) {
      __Pyx_AddTraceback("PygameShader.shader.convert_27colors", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(1, 2983, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);
+02984:         raise ValueError('\nTexture/image is not compatible.')
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2984, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 2984, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
/* … */
  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_Texture_image_is_not_compatible); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 2984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);
 02985: 
+02986:     convert_27colors_c(array_)
  __pyx_f_12PygameShader_6shader_convert_27colors_c(__pyx_v_array_);
 02987: 
 02988: 
 02989: 
 02990: @cython.binding(False)
 02991: @cython.binding(False)
 02992: @cython.boundscheck(False)
 02993: @cython.wraparound(False)
 02994: @cython.nonecheck(False)
 02995: @cython.cdivision(True)
 02996: @cython.profile(False)
+02997: cpdef object bilateral(object image, float sigma_s, float sigma_i, unsigned int kernel_size = 3):
static PyObject *__pyx_pw_12PygameShader_6shader_135bilateral(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_bilateral(PyObject *__pyx_v_image, float __pyx_v_sigma_s, float __pyx_v_sigma_i, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_bilateral *__pyx_optional_args) {
  unsigned int __pyx_v_kernel_size = ((unsigned int)3);
  __Pyx_memviewslice __pyx_v_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilateral", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kernel_size = __pyx_optional_args->kernel_size;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("PygameShader.shader.bilateral", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_array_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_135bilateral(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_134bilateral[] = "\n    A bilateral filter is a non-linear, edge-preserving, and noise-reducing\n    smoothing filter for images. It replaces the intensity of each pixel with a\n    weighted average of intensity values from nearby pixels. This weight can be\n    based on a Gaussian distribution.\n\n    Here, the normalization factor and the range weight are new terms added to \n    the previous equation. sigma_s  denotes the spatial extent of the kernel, i.e. \n    the size of the neighborhood, and sigma_r  denotes the minimum amplitude of an edge.\n    It ensures that only those pixels with intensity values similar to that of the\n    central pixel are considered for blurring, while sharp intensity changes are maintained.\n    The smaller the value of sigma_i ( or sigma_r), the sharper the edge. As sigma_r  tends to \n    infinity, the equation tends to a Gaussian blur.\n       \n    e.g:\n    \n    bilateral(surface, sigma_s = 16, sigma_i = 18)\n    \n    :param kernel_size  : integer; kernel size, default is 3\n    :param image: Surface, Pygame Surface format 24-32 bit format (alpha channel will be ignored)\n    \n    :param sigma_s: float sigma_s : Spatial extent of the kernel, size of the \n    considered neighborhood\n    \n    :param sigma_i: float sigma_i (also call sigma_r) range kernel, minimum amplitude of an edge.\n    \n    :return: return a filtered Surface\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_135bilateral(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_image = 0;
  float __pyx_v_sigma_s;
  float __pyx_v_sigma_i;
  unsigned int __pyx_v_kernel_size;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilateral (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_image,&__pyx_n_s_sigma_s,&__pyx_n_s_sigma_i,&__pyx_n_s_kernel_size_2,0};
    PyObject* values[4] = {0,0,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  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_image)) != 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_sigma_s)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bilateral", 0, 3, 4, 1); __PYX_ERR(1, 2997, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sigma_i)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bilateral", 0, 3, 4, 2); __PYX_ERR(1, 2997, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kernel_size_2);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bilateral") < 0)) __PYX_ERR(1, 2997, __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);
        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_image = values[0];
    __pyx_v_sigma_s = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_sigma_s == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 2997, __pyx_L3_error)
    __pyx_v_sigma_i = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_sigma_i == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 2997, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_kernel_size = __Pyx_PyInt_As_unsigned_int(values[3]); if (unlikely((__pyx_v_kernel_size == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2997, __pyx_L3_error)
    } else {
      __pyx_v_kernel_size = ((unsigned int)3);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bilateral", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 2997, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.bilateral", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_134bilateral(__pyx_self, __pyx_v_image, __pyx_v_sigma_s, __pyx_v_sigma_i, __pyx_v_kernel_size);
  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_6shader_134bilateral(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_image, float __pyx_v_sigma_s, float __pyx_v_sigma_i, unsigned int __pyx_v_kernel_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilateral", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.kernel_size = __pyx_v_kernel_size;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_bilateral(__pyx_v_image, __pyx_v_sigma_s, __pyx_v_sigma_i, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2997, __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.shader.bilateral", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_bilateral {
  int __pyx_n;
  unsigned int kernel_size;
};
 02998:     """
 02999:     A bilateral filter is a non-linear, edge-preserving, and noise-reducing
 03000:     smoothing filter for images. It replaces the intensity of each pixel with a
 03001:     weighted average of intensity values from nearby pixels. This weight can be
 03002:     based on a Gaussian distribution.
 03003: 
 03004:     Here, the normalization factor and the range weight are new terms added to
 03005:     the previous equation. sigma_s  denotes the spatial extent of the kernel, i.e.
 03006:     the size of the neighborhood, and sigma_r  denotes the minimum amplitude of an edge.
 03007:     It ensures that only those pixels with intensity values similar to that of the
 03008:     central pixel are considered for blurring, while sharp intensity changes are maintained.
 03009:     The smaller the value of sigma_i ( or sigma_r), the sharper the edge. As sigma_r  tends to
 03010:     infinity, the equation tends to a Gaussian blur.
 03011: 
 03012:     e.g:
 03013: 
 03014:     bilateral(surface, sigma_s = 16, sigma_i = 18)
 03015: 
 03016:     :param kernel_size  : integer; kernel size, default is 3
 03017:     :param image: Surface, Pygame Surface format 24-32 bit format (alpha channel will be ignored)
 03018: 
 03019:     :param sigma_s: float sigma_s : Spatial extent of the kernel, size of the
 03020:     considered neighborhood
 03021: 
 03022:     :param sigma_i: float sigma_i (also call sigma_r) range kernel, minimum amplitude of an edge.
 03023: 
 03024:     :return: return a filtered Surface
 03025:     """
 03026: 
+03027:     assert isinstance(image, 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(1, 3027, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_image, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 3027, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+03028:         'Argument image must be a valid Surface, got %s ' % type(image)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_image_must_be_a_valid_S, ((PyObject *)Py_TYPE(__pyx_v_image))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3028, __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(1, 3027, __pyx_L1_error)
    }
  }
  #endif
 03029: 
+03030:     assert isinstance(sigma_s, float), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_sigma_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyFloat_Check(__pyx_t_1); 
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+03031:         'Argument sigma_s must be a valid Surface, got %s ' % type(sigma_s)
      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_sigma_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3031, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_sigma_s_must_be_a_valid, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3031, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 3030, __pyx_L1_error)
    }
  }
  #endif
 03032: 
+03033:     assert isinstance(sigma_i, float), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = PyFloat_FromDouble(__pyx_v_sigma_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PyFloat_Check(__pyx_t_3); 
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+03034:         'Argument sigma_i must be a valid Surface, got %s ' % type(sigma_i)
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_sigma_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3034, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_sigma_i_must_be_a_valid, ((PyObject *)Py_TYPE(__pyx_t_3))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3034, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 3033, __pyx_L1_error)
    }
  }
  #endif
 03035:     cdef unsigned char [:, :, :] array_
+03036:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+03037:         array_ = pixels3d(image)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3037, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_7, __pyx_v_image) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_image);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3037, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 3037, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_array_ = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 03038: 
+03039:     except (pygame.error, ValueError):
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_3, &__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pygame); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 3039, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3039, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_10) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_builtin_ValueError);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_3, __pyx_t_7);
    __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_7 = 0;
    if (__pyx_t_11) {
      __Pyx_AddTraceback("PygameShader.shader.bilateral", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(1, 3039, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_1);
+03040:         raise ValueError('\nTexture/image is not compatible.')
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3040, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 3040, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 03041: 
 03042: 
+03043:     return bilateral_filter24_c(array_, sigma_s, sigma_i, kernel_size)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.kernel_size = __pyx_v_kernel_size;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_bilateral_filter24_c(__pyx_v_array_, __pyx_v_sigma_s, __pyx_v_sigma_i, &__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 03044: 
 03045: @cython.binding(False)
 03046: @cython.binding(False)
 03047: @cython.boundscheck(False)
 03048: @cython.wraparound(False)
 03049: @cython.nonecheck(False)
 03050: @cython.cdivision(True)
 03051: @cython.profile(False)
+03052: cpdef object emboss(object surface_, unsigned int flag=0):
static PyObject *__pyx_pw_12PygameShader_6shader_137emboss(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_emboss(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_emboss *__pyx_optional_args) {
  unsigned int __pyx_v_flag = ((unsigned int)0);
  __Pyx_memviewslice __pyx_v_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_emb = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("emboss", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_flag = __pyx_optional_args->flag;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("PygameShader.shader.emboss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_array_, 1);
  __Pyx_XDECREF(__pyx_v_emb);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_137emboss(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_136emboss[] = "\n    EMBOSS A PYGAME SURFACE \n    \n    :param surface_: pygame.Surface; compatible 24-32 bit\n    :param flag    : integer; special pygame flag such as BLEND_RGB_ADD, BLEND_RGB_MULT etc\n    :return        : pygame.Surface; Emboss effect \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_137emboss(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  unsigned int __pyx_v_flag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("emboss (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_flag_2,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_2);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "emboss") < 0)) __PYX_ERR(1, 3052, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_flag = __Pyx_PyInt_As_unsigned_int(values[1]); if (unlikely((__pyx_v_flag == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 3052, __pyx_L3_error)
    } else {
      __pyx_v_flag = ((unsigned int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("emboss", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 3052, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.emboss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_136emboss(__pyx_self, __pyx_v_surface_, __pyx_v_flag);
  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_6shader_136emboss(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, unsigned int __pyx_v_flag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("emboss", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.flag = __pyx_v_flag;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_emboss(__pyx_v_surface_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3052, __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.shader.emboss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03053:     """
 03054:     EMBOSS A PYGAME SURFACE
 03055: 
 03056:     :param surface_: pygame.Surface; compatible 24-32 bit
 03057:     :param flag    : integer; special pygame flag such as BLEND_RGB_ADD, BLEND_RGB_MULT etc
 03058:     :return        : pygame.Surface; Emboss effect
 03059:     """
 03060: 
+03061:     assert 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(1, 3061, __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(1, 3061, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+03062:         'Argument surface_ must be a valid Surface, got %s ' % type(surface_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_vali, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3062, __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(1, 3061, __pyx_L1_error)
    }
  }
  #endif
 03063: 
 03064:     cdef unsigned char [:, :, :] array_
+03065:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+03066:         array_ = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 3066, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3066, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 3066, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_array_ = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 03067: 
+03068:     except (pygame.error, ValueError):
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pygame); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 3068, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3068, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_10) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_builtin_ValueError);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_6, __pyx_t_7);
    __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0;
    if (__pyx_t_11) {
      __Pyx_AddTraceback("PygameShader.shader.emboss", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(1, 3068, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);
+03069:         raise ValueError('\nTexture/image is not compatible.')
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3069, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 3069, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 03070: 
+03071:     cdef object emb = emboss5x5_c(array_)
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_emboss5x5_c(__pyx_v_array_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_emb = __pyx_t_1;
  __pyx_t_1 = 0;
 03072: 
+03073:     if flag != 0:
  __pyx_t_2 = ((__pyx_v_flag != 0) != 0);
  if (__pyx_t_2) {
/* … */
  }
+03074:         del array_
    __PYX_XDEC_MEMVIEW(&__pyx_v_array_, 1);
+03075:         surface_.blit(emb, (0, 0), special_flags=flag)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3075, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 3075, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_emb);
    __Pyx_GIVEREF(__pyx_v_emb);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_emb);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_tuple__12);
    __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 3075, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_10 = __Pyx_PyInt_From_unsigned_int(__pyx_v_flag); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3075, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_special_flags, __pyx_t_10) < 0) __PYX_ERR(1, 3075, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3075, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+03076:         return surface_
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_surface_);
    __pyx_r = __pyx_v_surface_;
    goto __pyx_L0;
 03077: 
+03078:     return emboss5x5_c(array_)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_10 = __pyx_f_12PygameShader_6shader_emboss5x5_c(__pyx_v_array_); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_r = __pyx_t_10;
  __pyx_t_10 = 0;
  goto __pyx_L0;
 03079: 
 03080: 
 03081: 
 03082: 
 03083: @cython.binding(False)
 03084: @cython.binding(False)
 03085: @cython.boundscheck(False)
 03086: @cython.wraparound(False)
 03087: @cython.nonecheck(False)
 03088: @cython.cdivision(True)
 03089: @cython.profile(False)
+03090: cpdef void palette_change(
static PyObject *__pyx_pw_12PygameShader_6shader_139palette_change(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static void __pyx_f_12PygameShader_6shader_palette_change(PyObject *__pyx_v_surface_, PyObject *__pyx_v_palette_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_palette = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("palette_change", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("PygameShader.shader.palette_change", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_array_, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_palette, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_139palette_change(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_138palette_change[] = "\n    CHANGE AN IMAGE BY CHANGING THE COLOR PALETTE \n    \n    LIST_PALETTES contains all the palettes available\n    in the project.\n    \n    e.g: \n    from PygameShader.Palette import LIST_PALETTES\n    print(LIST_PALETTES.keys())\n    \n    :param surface_: pygame.Surface; \n    :param palette_: numpy.ndarray containing all the RGB color values \n    :return: void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_139palette_change(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  PyObject *__pyx_v_palette_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("palette_change (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_palette,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_palette)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("palette_change", 1, 2, 2, 1); __PYX_ERR(1, 3090, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "palette_change") < 0)) __PYX_ERR(1, 3090, __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_palette_ = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("palette_change", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 3090, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.palette_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_138palette_change(__pyx_self, __pyx_v_surface_, __pyx_v_palette_);
  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_6shader_138palette_change(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, PyObject *__pyx_v_palette_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("palette_change", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_palette_change(__pyx_v_surface_, __pyx_v_palette_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3090, __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.shader.palette_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03091:         object surface_,
 03092:         object palette_):
 03093:     """
 03094:     CHANGE AN IMAGE BY CHANGING THE COLOR PALETTE
 03095: 
 03096:     LIST_PALETTES contains all the palettes available
 03097:     in the project.
 03098: 
 03099:     e.g:
 03100:     from PygameShader.Palette import LIST_PALETTES
 03101:     print(LIST_PALETTES.keys())
 03102: 
 03103:     :param surface_: pygame.Surface;
 03104:     :param palette_: numpy.ndarray containing all the RGB color values
 03105:     :return: void
 03106:     """
 03107: 
+03108:     assert 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(1, 3108, __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(1, 3108, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+03109:         'Argument surface_ must be a valid Surface, got %s ' % type(surface_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_vali, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3109, __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(1, 3108, __pyx_L1_error)
    }
  }
  #endif
 03110: 
+03111:     assert isinstance(palette_, numpy.ndarray), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_palette_, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 3111, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+03112:         'Argument surface_ must be a valid Surface, got %s ' % type(palette_)
      __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_vali, ((PyObject *)Py_TYPE(__pyx_v_palette_))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3112, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 3111, __pyx_L1_error)
    }
  }
  #endif
 03113: 
 03114:     cdef unsigned char [:, :, :] array_
+03115:     cdef float [:, :] palette = palette_
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_v_palette_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 3115, __pyx_L1_error)
  __pyx_v_palette = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
 03116: 
+03117:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+03118:         array_ = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3118, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3118, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 3118, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_array_ = __pyx_t_9;
      __pyx_t_9.memview = NULL;
      __pyx_t_9.data = NULL;
 03119: 
+03120:     except (pygame.error, ValueError):
    __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_1, &__pyx_t_8);
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pygame); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3120, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_error); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3120, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_12 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_11) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_builtin_ValueError);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_ErrRestore(__pyx_t_3, __pyx_t_1, __pyx_t_8);
    __pyx_t_3 = 0; __pyx_t_1 = 0; __pyx_t_8 = 0;
    if (__pyx_t_12) {
      __Pyx_AddTraceback("PygameShader.shader.palette_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(1, 3120, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_3);
+03121:         raise ValueError('\nTexture/image is not compatible.')
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3121, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(1, 3121, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 03122: 
+03123:     palette_change_c(array_, palette)
  __pyx_f_12PygameShader_6shader_palette_change_c(__pyx_v_array_, __pyx_v_palette);
 03124: 
 03125: @cython.binding(False)
 03126: @cython.binding(False)
 03127: @cython.boundscheck(False)
 03128: @cython.wraparound(False)
 03129: @cython.nonecheck(False)
 03130: @cython.cdivision(True)
 03131: @cython.profile(False)
+03132: cpdef object bilinear(object surface_, int new_width, int new_height, fx=None, fy=None):
static PyObject *__pyx_pw_12PygameShader_6shader_141bilinear(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_bilinear(PyObject *__pyx_v_surface_, int __pyx_v_new_width, int __pyx_v_new_height, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_bilinear *__pyx_optional_args) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilinear", 0);
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("PygameShader.shader.bilinear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_141bilinear(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_12PygameShader_6shader_141bilinear(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_new_width;
  int __pyx_v_new_height;
  PyObject *__pyx_v_fx = 0;
  PyObject *__pyx_v_fy = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilinear (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_new_width,&__pyx_n_s_new_height,&__pyx_n_s_fx,&__pyx_n_s_fy,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
    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  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_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_new_width)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bilinear", 0, 3, 5, 1); __PYX_ERR(1, 3132, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_new_height)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bilinear", 0, 3, 5, 2); __PYX_ERR(1, 3132, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fx);
          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_fy);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bilinear") < 0)) __PYX_ERR(1, 3132, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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);
        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_surface_ = values[0];
    __pyx_v_new_width = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_new_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 3132, __pyx_L3_error)
    __pyx_v_new_height = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_new_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 3132, __pyx_L3_error)
    __pyx_v_fx = values[3];
    __pyx_v_fy = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bilinear", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 3132, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.bilinear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_140bilinear(__pyx_self, __pyx_v_surface_, __pyx_v_new_width, __pyx_v_new_height, __pyx_v_fx, __pyx_v_fy);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_140bilinear(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_new_width, int __pyx_v_new_height, PyObject *__pyx_v_fx, PyObject *__pyx_v_fy) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilinear", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.fx = __pyx_v_fx;
  __pyx_t_2.fy = __pyx_v_fy;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_bilinear(__pyx_v_surface_, __pyx_v_new_width, __pyx_v_new_height, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3132, __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.shader.bilinear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03133: 
 03134: 
+03135:     assert 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(1, 3135, __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(1, 3135, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+03136:         'Argument surface_ must be a valid Surface, got %s ' % type(surface_)
      __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_vali, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3136, __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(1, 3135, __pyx_L1_error)
    }
  }
  #endif
 03137: 
 03138:     cdef unsigned char [:,:,:] rgb_array
+03139:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+03140:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 3140, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3140, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 3140, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_rgb_array = __pyx_t_8;
      __pyx_t_8.memview = NULL;
      __pyx_t_8.data = NULL;
 03141: 
+03142:     except (pygame.error, ValueError):
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pygame); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 3142, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3142, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_10) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_builtin_ValueError);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_6, __pyx_t_7);
    __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0;
    if (__pyx_t_11) {
      __Pyx_AddTraceback("PygameShader.shader.bilinear", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(1, 3142, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);
+03143:         raise ValueError('\nTexture/image is not compatible.')
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3143, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 3143, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 03144: 
 03145: 
+03146:     return bilinear_c(rgb_array, new_width, new_height)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_bilinear_c(__pyx_v_rgb_array, __pyx_v_new_width, __pyx_v_new_height, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 03147: 
 03148: # ******************************************************************
 03149: 
 03150: 
 03151: 
 03152: @cython.binding(False)
 03153: @cython.binding(False)
 03154: @cython.boundscheck(False)
 03155: @cython.wraparound(False)
 03156: @cython.nonecheck(False)
 03157: @cython.cdivision(True)
 03158: @cython.profile(False)
+03159: cdef inline float damped_oscillation(float t)nogil:
static CYTHON_INLINE float __pyx_f_12PygameShader_6shader_damped_oscillation(float __pyx_v_t) {
  float __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 03160:     """
 03161: 
 03162:     :param t:
 03163:     :return:
 03164:     """
+03165:     return <float>(exp(-t * <float>0.1) * <float>cos(M_PI * t))
  __pyx_r = ((float)(exp(((-__pyx_v_t) * ((float)0.1))) * ((float)cos((__pyx_v_12PygameShader_6shader_M_PI * __pyx_v_t)))));
  goto __pyx_L0;
 03166: 
 03167: 
+03168: cdef float C1_ = <float>1.0 / <float>sqrt(M_2PI)
  __pyx_v_12PygameShader_6shader_C1_ = (((float)1.0) / ((float)sqrt(__pyx_v_12PygameShader_6shader_M_2PI)));
 03169: 
 03170: 
 03171: @cython.binding(False)
 03172: @cython.binding(False)
 03173: @cython.boundscheck(False)
 03174: @cython.wraparound(False)
 03175: @cython.nonecheck(False)
 03176: @cython.cdivision(True)
 03177: @cython.profile(False)
+03178: cdef inline float gauss(float x, float c, float sigma=1.0, float mu=0.0)nogil:
static CYTHON_INLINE float __pyx_f_12PygameShader_6shader_gauss(float __pyx_v_x, float __pyx_v_c, struct __pyx_opt_args_12PygameShader_6shader_gauss *__pyx_optional_args) {
  float __pyx_v_sigma = ((float)1.0);
  float __pyx_v_mu = ((float)0.0);
  float __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_sigma = __pyx_optional_args->sigma;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_mu = __pyx_optional_args->mu;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_gauss {
  int __pyx_n;
  float sigma;
  float mu;
};
 03179:     """
 03180: 
 03181:     :param x:
 03182:     :param c:
 03183:     :param sigma:
 03184:     :param mu:
 03185:     :return:
 03186:     """
+03187:     x -= c
  __pyx_v_x = (__pyx_v_x - __pyx_v_c);
+03188:     return <float>((<float>1.0 / sigma * C1_) * exp(-<float>0.5 * ((x - mu) * (x - mu)) / (sigma * sigma)))
  __pyx_r = ((float)(((((float)1.0) / __pyx_v_sigma) * __pyx_v_12PygameShader_6shader_C1_) * exp((((-((float)0.5)) * ((__pyx_v_x - __pyx_v_mu) * (__pyx_v_x - __pyx_v_mu))) / (__pyx_v_sigma * __pyx_v_sigma)))));
  goto __pyx_L0;
 03189: 
 03190: 
 03191: @cython.binding(False)
 03192: @cython.binding(False)
 03193: @cython.boundscheck(False)
 03194: @cython.wraparound(False)
 03195: @cython.nonecheck(False)
 03196: @cython.cdivision(True)
 03197: @cython.profile(False)
+03198: cdef inline void shader_rgb_to_bgr_inplace_c(unsigned char [:, :, :] rgb_array):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_rgb_to_bgr_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char __pyx_v_tmp;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_rgb_to_bgr_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 03199:     """
 03200:     SHADER RGB to BGR
 03201: 
 03202:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 03203:     please refer to pygame function pixels3d or array3d to convert an image into a
 03204:     3d array (library surfarray)
 03205: 
 03206:     Convert your game display from RGB to BGR format
 03207:     This algorithm can also be used to transform pygame texture in the equivalent bgr format
 03208: 
 03209:     e.g:
 03210:     rgb_to_bgr(surface)
 03211: 
 03212:     :param rgb_array    : numpy.ndarray shape(w, h, 3) uint8 (unsigned char 0...255) containing the
 03213:     pygame display pixels format RGB. Apply the transformation inplace by swapping the channel
 03214:     Red to channel blue and vice versa
 03215:     :return             : void
 03216:     """
 03217: 
 03218:     cdef Py_ssize_t w, h
+03219:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03220: 
 03221:     cdef:
+03222:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 03223:         unsigned char tmp
 03224: 
+03225:     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:;
      }
  }
 03226: 
+03227:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_tmp) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_tmp) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_tmp = ((unsigned char)'?');
+03228:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+03229:                 tmp = rgb_array[i, j, <unsigned short int>0]  # keep the blue color
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)0);
                              __pyx_v_tmp = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) )));
+03230:                 rgb_array[i, j, <unsigned short int>0]  = rgb_array[i, j, <unsigned short int>2]
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_8 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)2);
                              __pyx_t_11 = __pyx_v_i;
                              __pyx_t_12 = __pyx_v_j;
                              __pyx_t_13 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_11 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_12 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_9 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) )));
+03231:                 rgb_array[i, j, <unsigned short int>2]  = tmp
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) )) = __pyx_v_tmp;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 03232: 
 03233: 
 03234: @cython.binding(False)
 03235: @cython.binding(False)
 03236: @cython.boundscheck(False)
 03237: @cython.wraparound(False)
 03238: @cython.nonecheck(False)
 03239: @cython.cdivision(True)
 03240: @cython.profile(False)
+03241: cdef inline void shader_rgb_to_brg_inplace_c(unsigned char [:, :, :] rgb_array):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_rgb_to_brg_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char __pyx_v_tmp_r;
  unsigned char __pyx_v_tmp_g;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_rgb_to_brg_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 03242:     """
 03243: 
 03244:     SHADER RGB TO BRG
 03245: 
 03246:     Convert your game display from RGB to BRG format.
 03247:     This algorithm can also be used to transform pygame texture in the equivalent BRG format
 03248: 
 03249:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 03250:     please refer to pygame function pixels3d or array3d to convert an image into a 3d array
 03251:     (library surfarray)
 03252: 
 03253:     e.g:
 03254:     rgb_to_brg(surface)
 03255: 
 03256:     :param rgb_array    : numpy.ndarray shape(w, h, 3) uint8 (unsigned char 0...255) containing the
 03257:     pygame display pixels format RGB
 03258:     :return             : void
 03259:     """
 03260: 
 03261:     cdef Py_ssize_t w, h
+03262:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03263: 
 03264:     cdef:
+03265:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 03266:         unsigned char tmp_r, tmp_g
 03267:         # todo remove below R G B
 03268:         unsigned char *r
 03269:         unsigned char *g
 03270:         unsigned char *b
 03271: 
+03272:     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:;
      }
  }
 03273: 
+03274:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_tmp_g) lastprivate(__pyx_v_tmp_r) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_tmp_g) lastprivate(__pyx_v_tmp_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_tmp_g = ((unsigned char)'?');
                            __pyx_v_tmp_r = ((unsigned char)'?');
+03275:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+03276:                 tmp_r = rgb_array[i, j, <unsigned short int>0]  # keep the red color
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)0);
                              __pyx_v_tmp_r = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) )));
+03277:                 tmp_g = rgb_array[i, j, <unsigned short int>1]  # keep the green color
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_8 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)1);
                              __pyx_v_tmp_g = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_9 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) )));
+03278:                 rgb_array[i, j, <unsigned short int>0] = rgb_array[i, j, <unsigned short int>2] # r-->b
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)2);
                              __pyx_t_11 = __pyx_v_i;
                              __pyx_t_12 = __pyx_v_j;
                              __pyx_t_13 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_11 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_12 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) )));
+03279:                 rgb_array[i, j, <unsigned short int>1] = tmp_r  # g --> r
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_8 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_9 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) )) = __pyx_v_tmp_r;
+03280:                 rgb_array[i, j, <unsigned short int>2] = tmp_g
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) )) = __pyx_v_tmp_g;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 03281: 
 03282: 
 03283: 
 03284: @cython.binding(False)
 03285: @cython.binding(False)
 03286: @cython.boundscheck(False)
 03287: @cython.wraparound(False)
 03288: @cython.nonecheck(False)
 03289: @cython.cdivision(True)
 03290: @cython.profile(False)
+03291: cdef inline void shader_greyscale_luminosity24_inplace_c(unsigned char [:, :, :] rgb_array):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_greyscale_luminosity24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char __pyx_v_luminosity;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_greyscale_luminosity24_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 03292:     """
 03293:     SHADER GRAYSCALE (CONSERVE LUMINOSITY)
 03294: 
 03295:     This shader transform the game display on a grayscale video game effect
 03296:     This shader can also be applied to pygame textures/surface to transform them into
 03297:     an equivalent grayscale model
 03298: 
 03299:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 03300:     please refer to pygame function pixels3d or array3d to convert an image into a 3d array
 03301:     (library surfarray)
 03302: 
 03303:     e.g:
 03304:     greyscale(surface)
 03305: 
 03306:     :param rgb_array    : numpy.ndarray shape(w, h, 3) uint8 (unsigned char 0...255) containing the
 03307:     pygame display pixels format RGB
 03308:     :return             : void
 03309:     """
 03310: 
 03311:     cdef Py_ssize_t w, h
+03312:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03313: 
 03314:     cdef:
 03315:         int i, j
 03316:         unsigned char luminosity
 03317:         unsigned char *r
 03318:         unsigned char *g
 03319:         unsigned char *b
 03320: 
+03321:     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:;
      }
  }
+03322:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_luminosity) lastprivate(__pyx_v_r) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_luminosity) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* 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_luminosity = ((unsigned char)'?');
                            __pyx_v_r = ((unsigned char *)1);
+03323:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+03324:                 r = &rgb_array[i, j, <unsigned short int>0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)0);
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+03325:                 g = &rgb_array[i, j, <unsigned short int>1]
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_8 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)1);
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_9 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+03326:                 b = &rgb_array[i, j, <unsigned short int>2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)2);
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+03327:                 luminosity = <unsigned char>(r[0] * <float>0.2126 + g[0] * <float>0.7152 + b[0] * <float>0.072)
                              __pyx_v_luminosity = ((unsigned char)((((__pyx_v_r[0]) * ((float)0.2126)) + ((__pyx_v_g[0]) * ((float)0.7152))) + ((__pyx_v_b[0]) * ((float)0.072))));
+03328:                 r[0] = luminosity
                              (__pyx_v_r[0]) = __pyx_v_luminosity;
+03329:                 g[0] = luminosity
                              (__pyx_v_g[0]) = __pyx_v_luminosity;
+03330:                 b[0] = luminosity
                              (__pyx_v_b[0]) = __pyx_v_luminosity;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 03331: 
 03332: 
 03333: @cython.binding(False)
 03334: @cython.binding(False)
 03335: @cython.boundscheck(False)
 03336: @cython.wraparound(False)
 03337: @cython.nonecheck(False)
 03338: @cython.cdivision(True)
 03339: @cython.profile(False)
+03340: cdef inline void shader_sepia24_inplace_c(unsigned char [:, :, :] rgb_array):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_sepia24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_rr;
  float __pyx_v_gg;
  float __pyx_v_bb;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_sepia24_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 03341: 
 03342:     """
 03343:     SHADER SEPIA MODEL
 03344: 
 03345:     Transform your video game into an equivalent sepia model
 03346:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 03347:     please refer to pygame function pixels3d or array3d to convert an image into a 3d array
 03348:     (library surfarray)
 03349: 
 03350:     e.g:
 03351:     sepia(surface)
 03352: 
 03353:     :param rgb_array    : numpy.ndarray shape(w, h, 3) uint8 (unsigned char 0...255) containing the
 03354:     pygame display pixels format RGB
 03355:     :return             : void
 03356:     """
 03357:     cdef Py_ssize_t w, h
+03358:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03359: 
 03360:     cdef:
+03361:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 03362:         float rr, gg, bb
 03363:         unsigned char *r
 03364:         unsigned char *g
 03365:         unsigned char *b
 03366: 
+03367:     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:;
      }
  }
+03368:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_bb = ((float)__PYX_NAN());
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_gg = ((float)__PYX_NAN());
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_rr = ((float)__PYX_NAN());
+03369:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
 03370: 
+03371:                 r = &rgb_array[i, j, <unsigned short int>0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)0);
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+03372:                 g = &rgb_array[i, j, <unsigned short int>1]
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_8 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)1);
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_9 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+03373:                 b = &rgb_array[i, j, <unsigned short int>2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = ((unsigned short)2);
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
 03374: 
+03375:                 rr = r[0] * <float>0.393 + g[0] * <float>0.769 + b[0] * <float>0.189
                              __pyx_v_rr = ((((__pyx_v_r[0]) * ((float)0.393)) + ((__pyx_v_g[0]) * ((float)0.769))) + ((__pyx_v_b[0]) * ((float)0.189)));
+03376:                 gg = r[0] * <float>0.349 + g[0] * <float>0.686 + b[0] * <float>0.168
                              __pyx_v_gg = ((((__pyx_v_r[0]) * ((float)0.349)) + ((__pyx_v_g[0]) * ((float)0.686))) + ((__pyx_v_b[0]) * ((float)0.168)));
+03377:                 bb = r[0] * <float>0.272 + g[0] * <float>0.534 + b[0] * <float>0.131
                              __pyx_v_bb = ((((__pyx_v_r[0]) * ((float)0.272)) + ((__pyx_v_g[0]) * ((float)0.534))) + ((__pyx_v_b[0]) * ((float)0.131)));
+03378:                 if rr > <unsigned char>255:
                              __pyx_t_11 = ((__pyx_v_rr > ((unsigned char)0xFF)) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+03379:                     rr = <unsigned char>255
                                __pyx_v_rr = ((unsigned char)0xFF);
+03380:                 if gg > <unsigned char>255:
                              __pyx_t_11 = ((__pyx_v_gg > ((unsigned char)0xFF)) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+03381:                     gg = <unsigned char>255
                                __pyx_v_gg = ((unsigned char)0xFF);
+03382:                 if bb > <unsigned char>255:
                              __pyx_t_11 = ((__pyx_v_bb > ((unsigned char)0xFF)) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+03383:                     bb = <unsigned char>255
                                __pyx_v_bb = ((unsigned char)0xFF);
+03384:                 r[0] = <unsigned char> rr
                              (__pyx_v_r[0]) = ((unsigned char)__pyx_v_rr);
+03385:                 g[0] = <unsigned char> gg
                              (__pyx_v_g[0]) = ((unsigned char)__pyx_v_gg);
+03386:                 b[0] = <unsigned char> bb
                              (__pyx_v_b[0]) = ((unsigned char)__pyx_v_bb);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 03387: 
 03388: # ************* SORTING ALGORITHM FOR MEDIAN FILTER
 03389: @cython.binding(False)
 03390: @cython.binding(False)
 03391: @cython.boundscheck(False)
 03392: @cython.wraparound(False)
 03393: @cython.nonecheck(False)
 03394: @cython.cdivision(True)
 03395: @cython.profile(False)
+03396: cdef inline void bubble_sort(unsigned char [::1] nums, int size)nogil:
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_bubble_sort(__Pyx_memviewslice __pyx_v_nums, int __pyx_v_size) {
  int __pyx_v_i;
  unsigned char *__pyx_v_p;
  unsigned char *__pyx_v_p1;
  int __pyx_v_swapped;
/* … */
  /* function exit code */
}
 03397:     """
 03398: 
 03399:     :param nums:
 03400:     :param size:
 03401:     :return:
 03402:     """
 03403:     # We set swapped to True so the loop looks runs at least once
 03404:     cdef:
 03405:         int i, j
 03406:         unsigned char *p
 03407:         unsigned char *p1
 03408:         bint swapped
 03409: 
+03410:     swapped = True
  __pyx_v_swapped = 1;
+03411:     while swapped:
  while (1) {
    __pyx_t_1 = (__pyx_v_swapped != 0);
    if (!__pyx_t_1) break;
+03412:         swapped = False
    __pyx_v_swapped = 0;
+03413:         for i in range(size - 1):
    __pyx_t_2 = (__pyx_v_size - 1);
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_i = __pyx_t_4;
+03414:             p  = &nums[i]
      __pyx_t_5 = __pyx_v_i;
      __pyx_v_p = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_5)) ))));
+03415:             p1 = &nums[i+1]
      __pyx_t_5 = (__pyx_v_i + 1);
      __pyx_v_p1 = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_5)) ))));
+03416:             if p[0] > p1[0]:
      __pyx_t_1 = (((__pyx_v_p[0]) > (__pyx_v_p1[0])) != 0);
      if (__pyx_t_1) {
/* … */
      }
    }
  }
+03417:                 p[0], p1[0] = p1[0], p[0]
        __pyx_t_6 = (__pyx_v_p1[0]);
        __pyx_t_7 = (__pyx_v_p[0]);
        (__pyx_v_p[0]) = __pyx_t_6;
        (__pyx_v_p1[0]) = __pyx_t_7;
+03418:                 swapped = True
        __pyx_v_swapped = 1;
 03419: 
 03420: 
 03421: @cython.binding(False)
 03422: @cython.binding(False)
 03423: @cython.boundscheck(False)
 03424: @cython.wraparound(False)
 03425: @cython.nonecheck(False)
 03426: @cython.cdivision(True)
 03427: @cython.profile(False)
+03428: cdef inline void insertion_sort(unsigned char [::1] nums, int size)nogil:
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_insertion_sort(__Pyx_memviewslice __pyx_v_nums, CYTHON_UNUSED int __pyx_v_size) {
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char __pyx_v_item_to_insert;
/* … */
  /* function exit code */
}
 03429:     """
 03430: 
 03431:     :param nums:
 03432:     :param size:
 03433:     :return:
 03434:     """
 03435: 
 03436:     cdef:
 03437:         int i, j
 03438:         unsigned char item_to_insert
 03439: 
+03440:     for i in prange(1, size, schedule='static', num_threads=THREADS):
  __pyx_t_1 = __pyx_v_size;
  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 - 1 + 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) lastprivate(__pyx_v_item_to_insert) lastprivate(__pyx_v_j) schedule(static)
/* … */
  __pyx_t_1 = __pyx_v_size;
  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 - 1 + 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) lastprivate(__pyx_v_item_to_insert) lastprivate(__pyx_v_j) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
              #endif /* _OPENMP */
              for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
                  {
                      __pyx_v_i = (int)(1 + 1 * __pyx_t_2);
                      /* Initialize private variables to invalid values */
                      __pyx_v_item_to_insert = ((unsigned char)'?');
                      __pyx_v_j = ((int)0xbad0bad0);
+03441:         item_to_insert = nums[i]
                      __pyx_t_4 = __pyx_v_i;
                      __pyx_v_item_to_insert = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_4)) )));
 03442: 
+03443:         j = i - 1
                      __pyx_v_j = (__pyx_v_i - 1);
+03444:         while j >= 0 and nums[j] > item_to_insert:
                      while (1) {
                        __pyx_t_6 = ((__pyx_v_j >= 0) != 0);
                        if (__pyx_t_6) {
                        } else {
                          __pyx_t_5 = __pyx_t_6;
                          goto __pyx_L9_bool_binop_done;
                        }
                        __pyx_t_4 = __pyx_v_j;
                        __pyx_t_6 = (((*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_4)) ))) > __pyx_v_item_to_insert) != 0);
                        __pyx_t_5 = __pyx_t_6;
                        __pyx_L9_bool_binop_done:;
                        if (!__pyx_t_5) break;
+03445:             nums[j + 1] = nums[j]
                        __pyx_t_4 = __pyx_v_j;
                        __pyx_t_7 = (__pyx_v_j + 1);
                        *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_7)) )) = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_4)) )));
+03446:             j = j - 1
                        __pyx_v_j = (__pyx_v_j - 1);
                      }
 03447:         # Insert the item
+03448:         nums[j + 1] = item_to_insert
                      __pyx_t_4 = (__pyx_v_j + 1);
                      *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_4)) )) = __pyx_v_item_to_insert;
                  }
              }
          }
      }
  }
  #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
 03449: 
 03450: 
 03451: 
 03452: @cython.binding(False)
 03453: @cython.binding(False)
 03454: @cython.boundscheck(False)
 03455: @cython.wraparound(False)
 03456: @cython.nonecheck(False)
 03457: @cython.cdivision(True)
 03458: @cython.profile(False)
 03459: # There are different ways to do a Quick Sort partition, this implements the
 03460: # Hoare partition scheme. Tony Hoare also created the Quick Sort algorithm.
+03461: cdef inline int partition_cython(unsigned char [::1] nums, int low, int high)nogil:
static CYTHON_INLINE int __pyx_f_12PygameShader_6shader_partition_cython(__Pyx_memviewslice __pyx_v_nums, int __pyx_v_low, int __pyx_v_high) {
  int __pyx_v_pivot;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
 03462:     """
 03463: 
 03464:     :param nums:
 03465:     :param low:
 03466:     :param high:
 03467:     :return:
 03468:     """
 03469:     cdef:
 03470:         int pivot
 03471:         int i, j
+03472:     pivot = nums[(low + high) >> 1]
  __pyx_t_1 = ((__pyx_v_low + __pyx_v_high) >> 1);
  __pyx_v_pivot = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_1)) )));
+03473:     i = low - 1
  __pyx_v_i = (__pyx_v_low - 1);
+03474:     j = high + 1
  __pyx_v_j = (__pyx_v_high + 1);
+03475:     while True:
  while (1) {
+03476:         i += 1
    __pyx_v_i = (__pyx_v_i + 1);
+03477:         while nums[i] < pivot:
    while (1) {
      __pyx_t_1 = __pyx_v_i;
      __pyx_t_2 = (((*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_1)) ))) < __pyx_v_pivot) != 0);
      if (!__pyx_t_2) break;
+03478:             i += 1
      __pyx_v_i = (__pyx_v_i + 1);
    }
 03479: 
+03480:         j -= 1
    __pyx_v_j = (__pyx_v_j - 1);
+03481:         while nums[j] > pivot:
    while (1) {
      __pyx_t_1 = __pyx_v_j;
      __pyx_t_2 = (((*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_1)) ))) > __pyx_v_pivot) != 0);
      if (!__pyx_t_2) break;
+03482:             j -= 1
      __pyx_v_j = (__pyx_v_j - 1);
    }
 03483: 
+03484:         if i >= j:
    __pyx_t_2 = ((__pyx_v_i >= __pyx_v_j) != 0);
    if (__pyx_t_2) {
/* … */
    }
+03485:             return j
      __pyx_r = __pyx_v_j;
      goto __pyx_L0;
 03486: 
+03487:         nums[i], nums[j] = nums[j], nums[i]
    __pyx_t_1 = __pyx_v_j;
    __pyx_t_3 = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_1)) )));
    __pyx_t_1 = __pyx_v_i;
    __pyx_t_4 = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_1)) )));
    __pyx_t_1 = __pyx_v_i;
    *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_1)) )) = __pyx_t_3;
    __pyx_t_1 = __pyx_v_j;
    *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_1)) )) = __pyx_t_4;
  }
 03488: 
 03489: 
 03490: @cython.binding(False)
 03491: @cython.binding(False)
 03492: @cython.boundscheck(False)
 03493: @cython.wraparound(False)
 03494: @cython.nonecheck(False)
 03495: @cython.cdivision(True)
 03496: @cython.profile(False)
+03497: cdef inline void _quick_sort(unsigned char [::1] items, int low, int high)nogil:
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader__quick_sort(__Pyx_memviewslice __pyx_v_items, int __pyx_v_low, int __pyx_v_high) {
  int __pyx_v_split_index;
/* … */
  /* function exit code */
}
 03498:     """
 03499: 
 03500:     :param items:
 03501:     :param low:
 03502:     :param high:
 03503:     :return:
 03504:     """
 03505:     cdef int split_index
+03506:     if low < high:
  __pyx_t_1 = ((__pyx_v_low < __pyx_v_high) != 0);
  if (__pyx_t_1) {
/* … */
  }
+03507:         split_index = partition_cython(items, low, high)
    __pyx_v_split_index = __pyx_f_12PygameShader_6shader_partition_cython(__pyx_v_items, __pyx_v_low, __pyx_v_high);
+03508:         _quick_sort(items, low, split_index)
    __pyx_f_12PygameShader_6shader__quick_sort(__pyx_v_items, __pyx_v_low, __pyx_v_split_index);
+03509:         _quick_sort(items, split_index + 1, high)
    __pyx_f_12PygameShader_6shader__quick_sort(__pyx_v_items, (__pyx_v_split_index + 1), __pyx_v_high);
 03510: 
 03511: @cython.binding(False)
 03512: @cython.binding(False)
 03513: @cython.boundscheck(False)
 03514: @cython.wraparound(False)
 03515: @cython.nonecheck(False)
 03516: @cython.cdivision(True)
 03517: @cython.profile(False)
+03518: cdef inline void heapify(unsigned char [::1] nums, int heap_size, int root_index)nogil:
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_heapify(__Pyx_memviewslice __pyx_v_nums, int __pyx_v_heap_size, int __pyx_v_root_index) {
  int __pyx_v_largest;
  int __pyx_v_left_child;
  int __pyx_v_right_child;
/* … */
  /* function exit code */
}
 03519:     """
 03520: 
 03521:     :param nums:
 03522:     :param heap_size:
 03523:     :param root_index:
 03524:     :return:
 03525:     """
 03526:     # Assume the index of the largest element is the root index
+03527:     cdef int largest = root_index
  __pyx_v_largest = __pyx_v_root_index;
+03528:     cdef int left_child = (2 * root_index) + 1
  __pyx_v_left_child = ((2 * __pyx_v_root_index) + 1);
+03529:     cdef int right_child = (2 * root_index) + 2
  __pyx_v_right_child = ((2 * __pyx_v_root_index) + 2);
 03530: 
+03531:     if left_child < heap_size and nums[left_child] < nums[left_child]:
  __pyx_t_2 = ((__pyx_v_left_child < __pyx_v_heap_size) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __pyx_v_left_child;
  __pyx_t_4 = __pyx_v_left_child;
  __pyx_t_2 = (((*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_3)) ))) < (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_4)) )))) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+03532:         largest = left_child
    __pyx_v_largest = __pyx_v_left_child;
 03533: 
+03534:     if right_child < heap_size and nums[largest] < nums[right_child]:
  __pyx_t_2 = ((__pyx_v_right_child < __pyx_v_heap_size) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_4 = __pyx_v_largest;
  __pyx_t_3 = __pyx_v_right_child;
  __pyx_t_2 = (((*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_4)) ))) < (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_3)) )))) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+03535:         largest = right_child
    __pyx_v_largest = __pyx_v_right_child;
 03536: 
+03537:     if largest != root_index:
  __pyx_t_1 = ((__pyx_v_largest != __pyx_v_root_index) != 0);
  if (__pyx_t_1) {
/* … */
  }
+03538:         nums[root_index], nums[largest] = nums[largest], nums[root_index]
    __pyx_t_3 = __pyx_v_largest;
    __pyx_t_5 = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_3)) )));
    __pyx_t_3 = __pyx_v_root_index;
    __pyx_t_6 = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_3)) )));
    __pyx_t_3 = __pyx_v_root_index;
    *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_3)) )) = __pyx_t_5;
    __pyx_t_3 = __pyx_v_largest;
    *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_3)) )) = __pyx_t_6;
+03539:         heapify(nums, heap_size, largest)
    __pyx_f_12PygameShader_6shader_heapify(__pyx_v_nums, __pyx_v_heap_size, __pyx_v_largest);
 03540: 
 03541: 
 03542: 
 03543: 
 03544: @cython.binding(False)
 03545: @cython.boundscheck(False)
 03546: @cython.wraparound(False)
 03547: @cython.nonecheck(False)
 03548: @cython.cdivision(True)
 03549: @cython.profile(False)
+03550: cdef inline void heap_sort(unsigned char [::1] nums, int n)nogil:
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_heap_sort(__Pyx_memviewslice __pyx_v_nums, int __pyx_v_n) {
  int __pyx_v_i;
/* … */
  /* function exit code */
}
 03551:     """
 03552: 
 03553:     :param nums:
 03554:     :param n:
 03555:     :return:
 03556:     """
 03557:     cdef int i
 03558: 
+03559:     for i in range(n>>1, -1, -1):
  for (__pyx_t_1 = (__pyx_v_n >> 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
    __pyx_v_i = __pyx_t_1;
+03560:         heapify(nums, n, i)
    __pyx_f_12PygameShader_6shader_heapify(__pyx_v_nums, __pyx_v_n, __pyx_v_i);
  }
 03561: 
+03562:     for i in range(n - 1, 0, -1):
  for (__pyx_t_1 = (__pyx_v_n - 1); __pyx_t_1 > 0; __pyx_t_1-=1) {
    __pyx_v_i = __pyx_t_1;
+03563:         nums[i], nums[0] = nums[0], nums[i]
    __pyx_t_2 = 0;
    __pyx_t_3 = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_2)) )));
    __pyx_t_2 = __pyx_v_i;
    __pyx_t_4 = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_2)) )));
    __pyx_t_2 = __pyx_v_i;
    *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_2)) )) = __pyx_t_3;
    __pyx_t_2 = 0;
    *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_nums.data) + __pyx_t_2)) )) = __pyx_t_4;
+03564:         heapify(nums, i, 0)
    __pyx_f_12PygameShader_6shader_heapify(__pyx_v_nums, __pyx_v_i, 0);
  }
 03565: 
 03566: 
 03567: 
 03568: 
 03569: 
 03570: # *********** END OF SORTING ALGORITHM
 03571: 
 03572: @cython.binding(False)
 03573: @cython.boundscheck(False)
 03574: @cython.wraparound(False)
 03575: @cython.nonecheck(False)
 03576: @cython.cdivision(True)
 03577: @cython.profile(False)
+03578: cdef inline void shader_median_filter24_inplace_heapsort_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_median_filter24_inplace_heapsort_c(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_shader_median_filter24_inplace_heapsort_c *__pyx_optional_args) {
  int __pyx_v_kernel_size_ = ((int)2);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_k;
  int __pyx_v_v;
  int __pyx_v_kx;
  int __pyx_v_ky;
  __Pyx_memviewslice __pyx_v_rgb_array_copy = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  Py_ssize_t __pyx_v_ii;
  Py_ssize_t __pyx_v_jj;
  __Pyx_memviewslice __pyx_v_tmp_red = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tmp_green = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tmp_blue = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_index;
  int __pyx_v_val;
  Py_ssize_t __pyx_v_w_1;
  Py_ssize_t __pyx_v_h_1;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_median_filter24_inplace_heapsort_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kernel_size_ = __pyx_optional_args->kernel_size_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_median_filter24_inplace_heapsort_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_copy, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tmp_red, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tmp_green, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tmp_blue, 1);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_median_filter24_inplace_heapsort_c {
  int __pyx_n;
  int kernel_size_;
};
 03579:         unsigned char [:, :, :] rgb_array_, int kernel_size_=2):
 03580: 
 03581:     cdef Py_ssize_t w, h
+03582:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03583: 
+03584:     cdef int k = kernel_size_ >> 1
  __pyx_v_k = (__pyx_v_kernel_size_ >> 1);
+03585:     cdef int v = 0, kx, ky
  __pyx_v_v = 0;
 03586: 
 03587: 
+03588:     for kx in range(-k, k):
  __pyx_t_4 = __pyx_v_k;
  __pyx_t_5 = __pyx_t_4;
  for (__pyx_t_6 = (-__pyx_v_k); __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_kx = __pyx_t_6;
+03589:        for ky in range(-k, k):
    __pyx_t_7 = __pyx_v_k;
    __pyx_t_8 = __pyx_t_7;
    for (__pyx_t_9 = (-__pyx_v_k); __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_v_ky = __pyx_t_9;
+03590:            v += 1
      __pyx_v_v = (__pyx_v_v + 1);
    }
  }
 03591: 
 03592:     cdef:
 03593:         unsigned char [:, :, ::1] rgb_array_copy = \
+03594:            ascontiguousarray(numpy.array(rgb_array_, copy=False))
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_numpy); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __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_12)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 3594, __pyx_L1_error)
  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_14, __pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_15);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_10, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 3594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_rgb_array_copy = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
 03595: 
+03596:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+03597:         Py_ssize_t ii=0, jj=0
  __pyx_v_ii = 0;
  __pyx_v_jj = 0;
 03598: 
+03599:         unsigned char [::1] tmp_red   = empty(v, numpy.uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_empty); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_v); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_numpy); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_uint8); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_12);
  __pyx_t_11 = 0;
  __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 3599, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_15, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_11, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 3599, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_tmp_red = __pyx_t_17;
  __pyx_t_17.memview = NULL;
  __pyx_t_17.data = NULL;
+03600:         unsigned char [::1] tmp_green = empty(v, numpy.uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_empty); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_v); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_numpy); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_uint8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_10);
  __pyx_t_12 = 0;
  __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 3600, __pyx_L1_error)
  __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_15, __pyx_t_10); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_12, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 3600, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_tmp_green = __pyx_t_17;
  __pyx_t_17.memview = NULL;
  __pyx_t_17.data = NULL;
+03601:         unsigned char [::1] tmp_blue  = empty(v, numpy.uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_empty); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_v); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_numpy); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_uint8); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_11);
  __pyx_t_10 = 0;
  __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 3601, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_10, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 3601, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_tmp_blue = __pyx_t_17;
  __pyx_t_17.memview = NULL;
  __pyx_t_17.data = NULL;
 03602: 
 03603: 
+03604:         int index = 0, val
  __pyx_v_index = 0;
+03605:         Py_ssize_t w_1 = w - 1, h_1 = h - 1
  __pyx_v_w_1 = (__pyx_v_w - 1);
  __pyx_v_h_1 = (__pyx_v_h - 1);
 03606: 
 03607: 
+03608:     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_L9;
        }
        __pyx_L9:;
      }
  }
+03609:        for j in prange(h, schedule='static', num_threads=THREADS, chunksize=2048):
        __pyx_t_3 = __pyx_v_h;
        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_18 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_18 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_index) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_jj) lastprivate(__pyx_v_kx) lastprivate(__pyx_v_ky) lastprivate(__pyx_v_val)            __pyx_t_4 = 0x800;
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_18 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_18 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_index) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_jj) lastprivate(__pyx_v_kx) lastprivate(__pyx_v_ky) lastprivate(__pyx_v_val) schedule(static, __pyx_t_4) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_18; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_ii = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_index = ((int)0xbad0bad0);
                            __pyx_v_jj = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_kx = ((int)0xbad0bad0);
                            __pyx_v_ky = ((int)0xbad0bad0);
                            __pyx_v_val = ((int)0xbad0bad0);
+03610:            for i in range(w):
                            __pyx_t_19 = __pyx_v_w;
                            __pyx_t_20 = __pyx_t_19;
                            for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_20; __pyx_t_5+=1) {
                              __pyx_v_i = __pyx_t_5;
 03611: 
+03612:                index = 0
                              __pyx_v_index = 0;
 03613: 
+03614:                for kx in range(-k, k):
                              __pyx_t_6 = __pyx_v_k;
                              __pyx_t_7 = __pyx_t_6;
                              for (__pyx_t_8 = (-__pyx_v_k); __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
                                __pyx_v_kx = __pyx_t_8;
+03615:                    for ky in range(-k, k):
                                __pyx_t_9 = __pyx_v_k;
                                __pyx_t_21 = __pyx_t_9;
                                for (__pyx_t_22 = (-__pyx_v_k); __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                                  __pyx_v_ky = __pyx_t_22;
 03616: 
+03617:                        ii = i + kx
                                  __pyx_v_ii = (__pyx_v_i + __pyx_v_kx);
+03618:                        jj = j + ky
                                  __pyx_v_jj = (__pyx_v_j + __pyx_v_ky);
 03619: 
+03620:                        if ii < 0:
                                  __pyx_t_23 = ((__pyx_v_ii < 0) != 0);
                                  if (__pyx_t_23) {
/* … */
                                    goto __pyx_L20;
                                  }
+03621:                            ii = 0
                                    __pyx_v_ii = 0;
+03622:                        elif ii >= w_1:
                                  __pyx_t_23 = ((__pyx_v_ii >= __pyx_v_w_1) != 0);
                                  if (__pyx_t_23) {
/* … */
                                  }
                                  __pyx_L20:;
+03623:                            ii = <int>w_1
                                    __pyx_v_ii = ((int)__pyx_v_w_1);
 03624: 
+03625:                        if jj < 0:
                                  __pyx_t_23 = ((__pyx_v_jj < 0) != 0);
                                  if (__pyx_t_23) {
/* … */
                                    goto __pyx_L21;
                                  }
+03626:                            jj = 0
                                    __pyx_v_jj = 0;
+03627:                        elif jj >= h_1:
                                  __pyx_t_23 = ((__pyx_v_jj >= __pyx_v_h_1) != 0);
                                  if (__pyx_t_23) {
/* … */
                                  }
                                  __pyx_L21:;
+03628:                            jj = <int>h_1
                                    __pyx_v_jj = ((int)__pyx_v_h_1);
 03629: 
 03630: 
+03631:                        tmp_red[index]   = rgb_array_copy[ii, jj, 0]
                                  __pyx_t_24 = __pyx_v_ii;
                                  __pyx_t_25 = __pyx_v_jj;
                                  __pyx_t_26 = 0;
                                  __pyx_t_27 = __pyx_v_index;
                                  *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_red.data) + __pyx_t_27)) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_24 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_26)) )));
+03632:                        tmp_green[index] = rgb_array_copy[ii, jj, 1]
                                  __pyx_t_26 = __pyx_v_ii;
                                  __pyx_t_25 = __pyx_v_jj;
                                  __pyx_t_24 = 1;
                                  __pyx_t_27 = __pyx_v_index;
                                  *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_green.data) + __pyx_t_27)) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_26 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_24)) )));
+03633:                        tmp_blue[index]  = rgb_array_copy[ii, jj, 2]
                                  __pyx_t_24 = __pyx_v_ii;
                                  __pyx_t_25 = __pyx_v_jj;
                                  __pyx_t_26 = 2;
                                  __pyx_t_27 = __pyx_v_index;
                                  *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_blue.data) + __pyx_t_27)) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_24 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_26)) )));
 03634: 
+03635:                        index = index + 1
                                  __pyx_v_index = (__pyx_v_index + 1);
                                }
                              }
 03636: 
 03637:                # External C quicksort
+03638:                heap_sort(tmp_red, v)
                              __pyx_f_12PygameShader_6shader_heap_sort(__pyx_v_tmp_red, __pyx_v_v);
+03639:                heap_sort(tmp_green,v)
                              __pyx_f_12PygameShader_6shader_heap_sort(__pyx_v_tmp_green, __pyx_v_v);
+03640:                heap_sort(tmp_blue, v)
                              __pyx_f_12PygameShader_6shader_heap_sort(__pyx_v_tmp_blue, __pyx_v_v);
 03641: 
+03642:                val = (index - 1) >> 1
                              __pyx_v_val = ((__pyx_v_index - 1) >> 1);
+03643:                rgb_array_[i, j, 0] = tmp_red[val]
                              __pyx_t_26 = __pyx_v_val;
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_24 = __pyx_v_j;
                              __pyx_t_27 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_red.data) + __pyx_t_26)) )));
+03644:                rgb_array_[i, j, 1] = tmp_green[val]
                              __pyx_t_26 = __pyx_v_val;
                              __pyx_t_27 = __pyx_v_i;
                              __pyx_t_24 = __pyx_v_j;
                              __pyx_t_25 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_green.data) + __pyx_t_26)) )));
+03645:                rgb_array_[i, j, 2] = tmp_blue[val]
                              __pyx_t_26 = __pyx_v_val;
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_24 = __pyx_v_j;
                              __pyx_t_27 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_blue.data) + __pyx_t_26)) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 03646: 
 03647: 
 03648: 
 03649: 
 03650: @cython.binding(False)
 03651: @cython.binding(False)
 03652: @cython.boundscheck(False)
 03653: @cython.wraparound(False)
 03654: @cython.nonecheck(False)
 03655: @cython.cdivision(True)
 03656: @cython.profile(False)
+03657: cdef inline void shader_median_filter24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_median_filter24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_shader_median_filter24_inplace_c *__pyx_optional_args) {
  int __pyx_v_kernel_size_ = ((int)2);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_k;
  int __pyx_v_v;
  int __pyx_v_kx;
  int __pyx_v_ky;
  __Pyx_memviewslice __pyx_v_rgb_array_copy = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  Py_ssize_t __pyx_v_ii;
  Py_ssize_t __pyx_v_jj;
  unsigned char *__pyx_v_tmp_red;
  unsigned char *__pyx_v_tmp_green;
  unsigned char *__pyx_v_tmp_blue;
  __Pyx_memviewslice __pyx_v_tmp_red_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tmp_green_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tmp_blue_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned char *__pyx_v_tmpr;
  unsigned char *__pyx_v_tmpg;
  unsigned char *__pyx_v_tmpb;
  int __pyx_v_index;
  int __pyx_v_val;
  Py_ssize_t __pyx_v_w_1;
  Py_ssize_t __pyx_v_h_1;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_median_filter24_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kernel_size_ = __pyx_optional_args->kernel_size_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_XDECREF(((PyObject *)__pyx_t_17));
  __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_median_filter24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_copy, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tmp_red_, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tmp_green_, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tmp_blue_, 1);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_median_filter24_inplace_c {
  int __pyx_n;
  int kernel_size_;
};
 03658:         unsigned char [:, :, :] rgb_array_, int kernel_size_=2):
 03659: 
 03660:     """
 03661:     SHADER MEDIAN FILTER
 03662: 
 03663:     This shader cannot be used for real time rendering as the performance of the algorithm are not
 03664:     satisfactory. The code would have to be changed and improved with C or assembler in order to
 03665:     be adapted for a real time application. Another version can also be written with a surface
 03666:     downscale prior processing /rescale method that would boost the fps performance.
 03667: 
 03668:     In the state, this shader can be used for texture/surface transformation offline
 03669: 
 03670:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 03671:     please refer to pygame function pixels3d or array3d to convert an image into a 3d array
 03672:     (library surfarray)
 03673: 
 03674:     :param rgb_array_   : numpy.ndarray shape(w, h, 3) uint8 (unsigned char 0...255) containing the
 03675:     pygame display pixels format RGB
 03676:     :param kernel_size_ : integer; size of the kernel
 03677:     :return             : void
 03678:     """
 03679: 
 03680:     cdef Py_ssize_t w, h
+03681:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03682: 
+03683:     cdef int k = kernel_size_ >> 1
  __pyx_v_k = (__pyx_v_kernel_size_ >> 1);
+03684:     cdef int v = 0, kx, ky
  __pyx_v_v = 0;
 03685: 
 03686: 
+03687:     for kx in range(-k, k):
  __pyx_t_4 = __pyx_v_k;
  __pyx_t_5 = __pyx_t_4;
  for (__pyx_t_6 = (-__pyx_v_k); __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_kx = __pyx_t_6;
+03688:         for ky in range(-k, k):
    __pyx_t_7 = __pyx_v_k;
    __pyx_t_8 = __pyx_t_7;
    for (__pyx_t_9 = (-__pyx_v_k); __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_v_ky = __pyx_t_9;
+03689:             v += 1
      __pyx_v_v = (__pyx_v_v + 1);
    }
  }
 03690: 
 03691:     cdef:
 03692:         unsigned char [:, :, ::1] rgb_array_copy = \
+03693:             ascontiguousarray(numpy.array(rgb_array_, copy=False))
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_numpy); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __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_12)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 3693, __pyx_L1_error)
  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_14, __pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_15);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_10, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 3693, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_rgb_array_copy = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
 03694: 
+03695:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+03696:         Py_ssize_t ii=0, jj=0
  __pyx_v_ii = 0;
  __pyx_v_jj = 0;
 03697: 
+03698:         unsigned char *tmp_red   = <unsigned char *> malloc(v * sizeof(unsigned char))
  __pyx_v_tmp_red = ((unsigned char *)malloc((__pyx_v_v * (sizeof(unsigned char)))));
+03699:         unsigned char *tmp_green = <unsigned char *> malloc(v * sizeof(unsigned char))
  __pyx_v_tmp_green = ((unsigned char *)malloc((__pyx_v_v * (sizeof(unsigned char)))));
+03700:         unsigned char *tmp_blue  = <unsigned char *> malloc(v * sizeof(unsigned char))
  __pyx_v_tmp_blue = ((unsigned char *)malloc((__pyx_v_v * (sizeof(unsigned char)))));
 03701: 
+03702:         unsigned char [::1] tmp_red_ = <unsigned char[:v]>tmp_red
  if (!__pyx_v_tmp_red) {
    PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
    __PYX_ERR(1, 3702, __pyx_L1_error)
  }
  __pyx_t_11 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = Py_BuildValue((char*) "("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_v)); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_17 = __pyx_array_new(__pyx_t_10, sizeof(unsigned char), PyBytes_AS_STRING(__pyx_t_11), (char *) "c", (char *) __pyx_v_tmp_red);
  if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 3702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(((PyObject *)__pyx_t_17), PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(1, 3702, __pyx_L1_error)
  __Pyx_DECREF(((PyObject *)__pyx_t_17)); __pyx_t_17 = 0;
  __pyx_v_tmp_red_ = __pyx_t_18;
  __pyx_t_18.memview = NULL;
  __pyx_t_18.data = NULL;
+03703:         unsigned char [::1] tmp_green_ = <unsigned char[:v]>tmp_green
  if (!__pyx_v_tmp_green) {
    PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
    __PYX_ERR(1, 3703, __pyx_L1_error)
  }
  __pyx_t_10 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = Py_BuildValue((char*) "("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_v)); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_17 = __pyx_array_new(__pyx_t_11, sizeof(unsigned char), PyBytes_AS_STRING(__pyx_t_10), (char *) "c", (char *) __pyx_v_tmp_green);
  if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 3703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(((PyObject *)__pyx_t_17), PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(1, 3703, __pyx_L1_error)
  __Pyx_DECREF(((PyObject *)__pyx_t_17)); __pyx_t_17 = 0;
  __pyx_v_tmp_green_ = __pyx_t_18;
  __pyx_t_18.memview = NULL;
  __pyx_t_18.data = NULL;
+03704:         unsigned char [::1] tmp_blue_ = <unsigned char[:v]>tmp_blue
  if (!__pyx_v_tmp_blue) {
    PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
    __PYX_ERR(1, 3704, __pyx_L1_error)
  }
  __pyx_t_11 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = Py_BuildValue((char*) "("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_v)); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_17 = __pyx_array_new(__pyx_t_10, sizeof(unsigned char), PyBytes_AS_STRING(__pyx_t_11), (char *) "c", (char *) __pyx_v_tmp_blue);
  if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 3704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(((PyObject *)__pyx_t_17), PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(1, 3704, __pyx_L1_error)
  __Pyx_DECREF(((PyObject *)__pyx_t_17)); __pyx_t_17 = 0;
  __pyx_v_tmp_blue_ = __pyx_t_18;
  __pyx_t_18.memview = NULL;
  __pyx_t_18.data = NULL;
 03705: 
 03706:         unsigned char *tmpr
 03707:         unsigned char *tmpg
 03708:         unsigned char *tmpb
 03709: 
+03710:         int index = 0, val
  __pyx_v_index = 0;
+03711:         Py_ssize_t w_1 = w - 1, h_1 = h - 1
  __pyx_v_w_1 = (__pyx_v_w - 1);
  __pyx_v_h_1 = (__pyx_v_h - 1);
 03712: 
 03713: 
+03714:     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_L9;
        }
        __pyx_L9:;
      }
  }
+03715:         for i in prange(w, schedule='static', num_threads=THREADS, chunksize=2048):
        __pyx_t_3 = __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_19 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_19 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_index) lastprivate(__pyx_v_j) lastprivate(__pyx_v_jj) lastprivate(__pyx_v_kx) lastprivate(__pyx_v_ky) lastprivate(__pyx_v_tmpb) lastprivate(__pyx_v_tmpg) lastprivate(__pyx_v_tmpr) lastprivate(__pyx_v_val)            __pyx_t_4 = 0x800;
/* … */
        __pyx_t_3 = __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_19 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_19 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_index) lastprivate(__pyx_v_j) lastprivate(__pyx_v_jj) lastprivate(__pyx_v_kx) lastprivate(__pyx_v_ky) lastprivate(__pyx_v_tmpb) lastprivate(__pyx_v_tmpg) lastprivate(__pyx_v_tmpr) lastprivate(__pyx_v_val) schedule(static, __pyx_t_4) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_19; __pyx_t_2++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_ii = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_index = ((int)0xbad0bad0);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_jj = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_kx = ((int)0xbad0bad0);
                            __pyx_v_ky = ((int)0xbad0bad0);
                            __pyx_v_tmpb = ((unsigned char *)1);
                            __pyx_v_tmpg = ((unsigned char *)1);
                            __pyx_v_tmpr = ((unsigned char *)1);
                            __pyx_v_val = ((int)0xbad0bad0);
+03716:             for j in range(h):
                            __pyx_t_20 = __pyx_v_h;
                            __pyx_t_21 = __pyx_t_20;
                            for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_21; __pyx_t_5+=1) {
                              __pyx_v_j = __pyx_t_5;
 03717: 
+03718:                 index = 0
                              __pyx_v_index = 0;
 03719: 
+03720:                 for kx in range(-k, k):
                              __pyx_t_6 = __pyx_v_k;
                              __pyx_t_7 = __pyx_t_6;
                              for (__pyx_t_8 = (-__pyx_v_k); __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
                                __pyx_v_kx = __pyx_t_8;
+03721:                     for ky in range(-k, k):
                                __pyx_t_9 = __pyx_v_k;
                                __pyx_t_22 = __pyx_t_9;
                                for (__pyx_t_23 = (-__pyx_v_k); __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
                                  __pyx_v_ky = __pyx_t_23;
 03722: 
+03723:                         ii = i + kx
                                  __pyx_v_ii = (__pyx_v_i + __pyx_v_kx);
+03724:                         jj = j + ky
                                  __pyx_v_jj = (__pyx_v_j + __pyx_v_ky);
 03725: 
+03726:                         if ii < 0:
                                  __pyx_t_24 = ((__pyx_v_ii < 0) != 0);
                                  if (__pyx_t_24) {
/* … */
                                    goto __pyx_L20;
                                  }
+03727:                             ii = 0
                                    __pyx_v_ii = 0;
+03728:                         elif ii >= w_1:
                                  __pyx_t_24 = ((__pyx_v_ii >= __pyx_v_w_1) != 0);
                                  if (__pyx_t_24) {
/* … */
                                  }
                                  __pyx_L20:;
+03729:                             ii = <int>w_1
                                    __pyx_v_ii = ((int)__pyx_v_w_1);
 03730: 
+03731:                         if jj < 0:
                                  __pyx_t_24 = ((__pyx_v_jj < 0) != 0);
                                  if (__pyx_t_24) {
/* … */
                                    goto __pyx_L21;
                                  }
+03732:                             jj = 0
                                    __pyx_v_jj = 0;
+03733:                         elif jj >= h_1:
                                  __pyx_t_24 = ((__pyx_v_jj >= __pyx_v_h_1) != 0);
                                  if (__pyx_t_24) {
/* … */
                                  }
                                  __pyx_L21:;
+03734:                             jj = <int>h_1
                                    __pyx_v_jj = ((int)__pyx_v_h_1);
 03735: 
 03736: 
+03737:                         tmp_red_[index]   = rgb_array_copy[ii, jj, 0]
                                  __pyx_t_25 = __pyx_v_ii;
                                  __pyx_t_26 = __pyx_v_jj;
                                  __pyx_t_27 = 0;
                                  __pyx_t_28 = __pyx_v_index;
                                  *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_red_.data) + __pyx_t_28)) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_25 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_27)) )));
+03738:                         tmp_green_[index] = rgb_array_copy[ii, jj, 1]
                                  __pyx_t_27 = __pyx_v_ii;
                                  __pyx_t_26 = __pyx_v_jj;
                                  __pyx_t_25 = 1;
                                  __pyx_t_28 = __pyx_v_index;
                                  *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_green_.data) + __pyx_t_28)) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_27 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_25)) )));
+03739:                         tmp_blue_[index]  = rgb_array_copy[ii, jj, 2]
                                  __pyx_t_25 = __pyx_v_ii;
                                  __pyx_t_26 = __pyx_v_jj;
                                  __pyx_t_27 = 2;
                                  __pyx_t_28 = __pyx_v_index;
                                  *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_blue_.data) + __pyx_t_28)) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_25 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_27)) )));
 03740: 
+03741:                         index = index + 1
                                  __pyx_v_index = (__pyx_v_index + 1);
                                }
                              }
 03742: 
 03743:                 # External C quicksort
+03744:                 tmpr = new_quickSort(&tmp_red_[0], 0, v)
                              __pyx_t_27 = 0;
                              __pyx_v_tmpr = new_quickSort((&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_red_.data) + __pyx_t_27)) )))), 0, __pyx_v_v);
+03745:                 tmpg = new_quickSort(&tmp_green_[0], 0, v)
                              __pyx_t_27 = 0;
                              __pyx_v_tmpg = new_quickSort((&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_green_.data) + __pyx_t_27)) )))), 0, __pyx_v_v);
+03746:                 tmpb = new_quickSort(&tmp_blue_[0], 0, v)
                              __pyx_t_27 = 0;
                              __pyx_v_tmpb = new_quickSort((&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_tmp_blue_.data) + __pyx_t_27)) )))), 0, __pyx_v_v);
 03747: 
+03748:                 val = (index - 1) >> 1
                              __pyx_v_val = ((__pyx_v_index - 1) >> 1);
+03749:                 rgb_array_[i, j, 0] = tmpr[val]
                              __pyx_t_27 = __pyx_v_i;
                              __pyx_t_26 = __pyx_v_j;
                              __pyx_t_25 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_tmpr[__pyx_v_val]);
+03750:                 rgb_array_[i, j, 1] = tmpg[val]
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_26 = __pyx_v_j;
                              __pyx_t_27 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_tmpg[__pyx_v_val]);
+03751:                 rgb_array_[i, j, 2] = tmpb[val]
                              __pyx_t_27 = __pyx_v_i;
                              __pyx_t_26 = __pyx_v_j;
                              __pyx_t_25 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_tmpb[__pyx_v_val]);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 03752: 
 03753: 
 03754: @cython.binding(False)
 03755: @cython.binding(False)
 03756: @cython.boundscheck(False)
 03757: @cython.wraparound(False)
 03758: @cython.nonecheck(False)
 03759: @cython.cdivision(True)
 03760: @cython.profile(False)
+03761: cdef inline void shader_median_grayscale_filter24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_median_grayscale_filter24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_shader_median_grayscale_filter24_inplace_c *__pyx_optional_args) {
  int __pyx_v_kernel_size_ = ((int)2);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_k;
  int __pyx_v_ky;
  int __pyx_v_kx;
  unsigned char __pyx_v_v;
  __Pyx_memviewslice __pyx_v_rgb_array_copy = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  Py_ssize_t __pyx_v_ii;
  Py_ssize_t __pyx_v_jj;
  unsigned char *__pyx_v_tmp_;
  unsigned char *__pyx_v_tmp;
  int __pyx_v_index;
  unsigned char __pyx_v_val;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_median_grayscale_filter24_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kernel_size_ = __pyx_optional_args->kernel_size_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_median_grayscale_filter24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_copy, 1);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_median_grayscale_filter24_inplace_c {
  int __pyx_n;
  int kernel_size_;
};
 03762:         unsigned char [:, :, :] rgb_array_, int kernel_size_=2):
 03763: 
 03764:     """
 03765:     SHADER MEDIAN FILTER
 03766: 
 03767:     This shader cannot be used for real time rendering as the performance of the algorithm are not
 03768:     satisfactory. The code would have to be changed and improved with C or assembler in order to
 03769:     be adapted for a real time application. Another version can also be written with a surface
 03770:     downscale prior processing /rescale method that would boost the fps performance.
 03771: 
 03772:     In the state, this shader can be used for texture/surface transformation offline
 03773: 
 03774:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 03775:     please refer to pygame function pixels3d or array3d to convert an image into a 3d
 03776:     array (library surfarray)
 03777: 
 03778:     :param rgb_array_   : numpy.ndarray shape(w, h, 3) uint8 (unsigned char 0...255) containing the
 03779:     pygame display pixels format RGB
 03780:     :param kernel_size_ : integer; size of the kernel
 03781:     :return             : void
 03782:     """
 03783: 
 03784:     cdef Py_ssize_t w, h
+03785:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03786: 
+03787:     cdef int k = kernel_size_ >> 1, ky, kx
  __pyx_v_k = (__pyx_v_kernel_size_ >> 1);
 03788:     cdef unsigned char v
 03789: 
+03790:     v = 0
  __pyx_v_v = 0;
+03791:     for kx in range(-k, k):
  __pyx_t_4 = __pyx_v_k;
  __pyx_t_5 = __pyx_t_4;
  for (__pyx_t_6 = (-__pyx_v_k); __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_kx = __pyx_t_6;
+03792:         for ky in range(-k, k):
    __pyx_t_7 = __pyx_v_k;
    __pyx_t_8 = __pyx_t_7;
    for (__pyx_t_9 = (-__pyx_v_k); __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_v_ky = __pyx_t_9;
+03793:             v += 1
      __pyx_v_v = (__pyx_v_v + 1);
    }
  }
 03794: 
 03795:     cdef:
 03796:         unsigned char [:, :, ::1] rgb_array_copy = \
+03797:             ascontiguousarray(numpy.array(rgb_array_, copy=False))
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_numpy); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __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_12)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 3797, __pyx_L1_error)
  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_14, __pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_15);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_10, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 3797, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_rgb_array_copy = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
 03798: 
+03799:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+03800:         Py_ssize_t ii=0, jj=0
  __pyx_v_ii = 0;
  __pyx_v_jj = 0;
 03801: 
+03802:         unsigned char *tmp_   = <unsigned char *> malloc(v * sizeof(unsigned char))
  __pyx_v_tmp_ = ((unsigned char *)malloc((__pyx_v_v * (sizeof(unsigned char)))));
 03803:         unsigned char *tmp
+03804:         int index = 0
  __pyx_v_index = 0;
 03805:         unsigned char val
 03806: 
 03807: 
+03808:     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_L9;
        }
        __pyx_L9:;
      }
  }
+03809:         for i in prange(0, w, schedule='static', num_threads=THREADS, chunksize=2048):
        __pyx_t_3 = __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_17 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_index) lastprivate(__pyx_v_j) lastprivate(__pyx_v_jj) lastprivate(__pyx_v_kx) lastprivate(__pyx_v_ky) lastprivate(__pyx_v_tmp) lastprivate(__pyx_v_val)            __pyx_t_4 = 0x800;
/* … */
        __pyx_t_3 = __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_17 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_index) lastprivate(__pyx_v_j) lastprivate(__pyx_v_jj) lastprivate(__pyx_v_kx) lastprivate(__pyx_v_ky) lastprivate(__pyx_v_tmp) lastprivate(__pyx_v_val) schedule(static, __pyx_t_4) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_17; __pyx_t_2++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_ii = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_index = ((int)0xbad0bad0);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_jj = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_kx = ((int)0xbad0bad0);
                            __pyx_v_ky = ((int)0xbad0bad0);
                            __pyx_v_tmp = ((unsigned char *)1);
                            __pyx_v_val = ((unsigned char)'?');
+03810:             for j in range(0, h):
                            __pyx_t_18 = __pyx_v_h;
                            __pyx_t_19 = __pyx_t_18;
                            for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_19; __pyx_t_5+=1) {
                              __pyx_v_j = __pyx_t_5;
 03811: 
+03812:                 index = 0
                              __pyx_v_index = 0;
 03813: 
+03814:                 for kx in range(-k, k):
                              __pyx_t_6 = __pyx_v_k;
                              __pyx_t_7 = __pyx_t_6;
                              for (__pyx_t_8 = (-__pyx_v_k); __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
                                __pyx_v_kx = __pyx_t_8;
+03815:                     for ky in range(-k, k):
                                __pyx_t_9 = __pyx_v_k;
                                __pyx_t_20 = __pyx_t_9;
                                for (__pyx_t_21 = (-__pyx_v_k); __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
                                  __pyx_v_ky = __pyx_t_21;
 03816: 
+03817:                         ii = i + kx
                                  __pyx_v_ii = (__pyx_v_i + __pyx_v_kx);
+03818:                         jj = j + ky
                                  __pyx_v_jj = (__pyx_v_j + __pyx_v_ky);
 03819: 
+03820:                         if ii < 0:
                                  __pyx_t_22 = ((__pyx_v_ii < 0) != 0);
                                  if (__pyx_t_22) {
/* … */
                                    goto __pyx_L20;
                                  }
+03821:                             ii = 0
                                    __pyx_v_ii = 0;
+03822:                         elif ii > w - 1:
                                  __pyx_t_22 = ((__pyx_v_ii > (__pyx_v_w - 1)) != 0);
                                  if (__pyx_t_22) {
/* … */
                                  }
                                  __pyx_L20:;
+03823:                             ii = w - 1
                                    __pyx_v_ii = (__pyx_v_w - 1);
 03824: 
+03825:                         if jj < 0:
                                  __pyx_t_22 = ((__pyx_v_jj < 0) != 0);
                                  if (__pyx_t_22) {
/* … */
                                    goto __pyx_L21;
                                  }
+03826:                             jj = 0
                                    __pyx_v_jj = 0;
+03827:                         elif jj > h - 1:
                                  __pyx_t_22 = ((__pyx_v_jj > (__pyx_v_h - 1)) != 0);
                                  if (__pyx_t_22) {
/* … */
                                  }
                                  __pyx_L21:;
+03828:                             jj = h - 1
                                    __pyx_v_jj = (__pyx_v_h - 1);
 03829: 
+03830:                         tmp_[index]   = rgb_array_copy[ii, jj, 0]
                                  __pyx_t_23 = __pyx_v_ii;
                                  __pyx_t_24 = __pyx_v_jj;
                                  __pyx_t_25 = 0;
                                  (__pyx_v_tmp_[__pyx_v_index]) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_23 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_24 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_25)) )));
 03831: 
+03832:                         index = index + 1
                                  __pyx_v_index = (__pyx_v_index + 1);
                                }
                              }
 03833: 
+03834:                 tmp = new_quickSort(tmp_, 0, v)
                              __pyx_v_tmp = new_quickSort(__pyx_v_tmp_, 0, __pyx_v_v);
 03835: 
+03836:                 val = (v >> 1) - 1
                              __pyx_v_val = ((__pyx_v_v >> 1) - 1);
+03837:                 rgb_array_[i, j, 0] = tmp[val]
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_24 = __pyx_v_j;
                              __pyx_t_23 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_tmp[__pyx_v_val]);
+03838:                 rgb_array_[i, j, 1] = tmp[val]
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_24 = __pyx_v_j;
                              __pyx_t_25 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_23 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_tmp[__pyx_v_val]);
+03839:                 rgb_array_[i, j, 2] = tmp[val]
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_24 = __pyx_v_j;
                              __pyx_t_23 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_tmp[__pyx_v_val]);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 03840: 
 03841: 
 03842: 
+03843: cdef float ONE_255 = <float>1.0 / <float>255.0
  __pyx_v_12PygameShader_6shader_ONE_255 = (((float)1.0) / ((float)255.0));
 03844: 
 03845: @cython.binding(False)
 03846: @cython.binding(False)
 03847: @cython.boundscheck(False)
 03848: @cython.wraparound(False)
 03849: @cython.nonecheck(False)
 03850: @cython.cdivision(True)
 03851: @cython.profile(False)
+03852: cdef inline void shader_color_reduction24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_color_reduction24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array, int __pyx_v_color_number) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_x;
  int __pyx_v_y;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  float __pyx_v_f;
  float __pyx_v_c1;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_color_reduction24_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 03853:         unsigned char [:, :, :] rgb_array, int color_number):
 03854:     """
 03855:     COLOR REDUCTION SHADER
 03856: 
 03857:     Decrease the amount of colors in the display or texture.
 03858:     The method of color reduction is very simple: every color of the original picture is replaced
 03859:     by an appropriate color from the limited palette that is accessible.
 03860: 
 03861:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 03862:     please refer to pygame function pixels3d or array3d to convert an image into a 3d array
 03863:      (library surfarray)
 03864: 
 03865:     e.g:
 03866:     color_reduction(surface, 8)
 03867: 
 03868:     :param rgb_array    : numpy.ndarray shape(w, h, 3) uint8 (unsigned char 0...255) containing the
 03869:     pygame display pixels format RGB
 03870:     :param color_number : integer; color number color_number^2
 03871:     :return             : void
 03872:     """
 03873: 
 03874: 
 03875:     cdef Py_ssize_t w, h
+03876:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03877: 
 03878: 
 03879:     cdef:
+03880:         int x=0, y=0
  __pyx_v_x = 0;
  __pyx_v_y = 0;
 03881:         unsigned char *r
 03882:         unsigned char *g
 03883:         unsigned char *b
+03884:         float f = <float> 255.0 / <float> color_number
  __pyx_v_f = (((float)255.0) / ((float)__pyx_v_color_number));
+03885:         float c1 = <float>color_number / <float>255.0
  __pyx_v_c1 = (((float)__pyx_v_color_number) / ((float)255.0));
 03886: 
+03887:     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:;
      }
  }
+03888:         for y in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_r) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_r) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_x = ((int)0xbad0bad0);
+03889:             for x in range(0, w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_x = __pyx_t_7;
 03890: 
+03891:                 r = &rgb_array[x, y, <unsigned short int>0]
                              __pyx_t_8 = __pyx_v_x;
                              __pyx_t_9 = __pyx_v_y;
                              __pyx_t_10 = ((unsigned short)0);
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+03892:                 g = &rgb_array[x, y, <unsigned short int>1]
                              __pyx_t_9 = __pyx_v_x;
                              __pyx_t_8 = __pyx_v_y;
                              __pyx_t_10 = ((unsigned short)1);
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_9 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+03893:                 b = &rgb_array[x, y, <unsigned short int>2]
                              __pyx_t_8 = __pyx_v_x;
                              __pyx_t_9 = __pyx_v_y;
                              __pyx_t_10 = ((unsigned short)2);
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
 03894: 
+03895:                 r[0] = <unsigned char>(<int>(<float>round_c(c1 * <float>r[<unsigned short int>0]) * f))
                              (__pyx_v_r[0]) = ((unsigned char)((int)(((float)round((__pyx_v_c1 * ((float)(__pyx_v_r[((unsigned short)0)]))))) * __pyx_v_f)));
+03896:                 g[0] = <unsigned char>(<int>(<float>round_c(c1 * <float>g[<unsigned short int>0]) * f))
                              (__pyx_v_g[0]) = ((unsigned char)((int)(((float)round((__pyx_v_c1 * ((float)(__pyx_v_g[((unsigned short)0)]))))) * __pyx_v_f)));
+03897:                 b[0] = <unsigned char>(<int>(<float>round_c(c1 * <float>b[<unsigned short int>0]) * f))
                              (__pyx_v_b[0]) = ((unsigned char)((int)(((float)round((__pyx_v_c1 * ((float)(__pyx_v_b[((unsigned short)0)]))))) * __pyx_v_f)));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 03898: 
 03899: 
 03900: 
 03901: cdef:
+03902:     short [:, ::1] GY = numpy.array(
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_numpy); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 3902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __pyx_t_32 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_array_2); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 3902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
/* … */
  __pyx_t_30 = __Pyx_PyObject_CallOneArg(__pyx_t_32, __pyx_t_31); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 3902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
+03903:         ([-1, 0, 1],
  __pyx_t_33 = PyList_New(3); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 3903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyList_SET_ITEM(__pyx_t_33, 0, __pyx_int_neg_1);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_33, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_33, 2, __pyx_int_1);
/* … */
  __pyx_t_31 = PyTuple_New(3); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 3903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_GIVEREF(__pyx_t_33);
  PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_33);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_31, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_30);
  PyTuple_SET_ITEM(__pyx_t_31, 2, __pyx_t_30);
  __pyx_t_33 = 0;
  __pyx_t_2 = 0;
  __pyx_t_30 = 0;
+03904:          [-2, 0, 2],
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_neg_2);
  __Pyx_GIVEREF(__pyx_int_neg_2);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_int_neg_2);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_int_2);
+03905:          [-1, 0, 1])).astype(dtype=int16, order='C')
  __pyx_t_30 = PyList_New(3); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 3905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyList_SET_ITEM(__pyx_t_30, 0, __pyx_int_neg_1);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_30, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_30, 2, __pyx_int_1);
/* … */
  __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_astype); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 3905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_30 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 3905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_GetModuleGlobalName(__pyx_t_32, __pyx_n_s_int16); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 3905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  if (PyDict_SetItem(__pyx_t_30, __pyx_n_s_dtype, __pyx_t_32) < 0) __PYX_ERR(1, 3905, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  if (PyDict_SetItem(__pyx_t_30, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 3905, __pyx_L1_error)
  __pyx_t_32 = __Pyx_PyObject_Call(__pyx_t_31, __pyx_empty_tuple, __pyx_t_30); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 3905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_35 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_short(__pyx_t_32, PyBUF_WRITABLE); if (unlikely(!__pyx_t_35.memview)) __PYX_ERR(1, 3905, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_12PygameShader_6shader_GY, 1);
  __pyx_v_12PygameShader_6shader_GY = __pyx_t_35;
  __pyx_t_35.memview = NULL;
  __pyx_t_35.data = NULL;
 03906: 
+03907:     short [:, ::1] GX = numpy.array(
  __Pyx_GetModuleGlobalName(__pyx_t_32, __pyx_n_s_numpy); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 3907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_32, __pyx_n_s_array_2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 3907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
/* … */
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_30, __pyx_t_33); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
+03908:         ([-1, -2, -1],
  __pyx_t_32 = PyList_New(3); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 3908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyList_SET_ITEM(__pyx_t_32, 0, __pyx_int_neg_1);
  __Pyx_INCREF(__pyx_int_neg_2);
  __Pyx_GIVEREF(__pyx_int_neg_2);
  PyList_SET_ITEM(__pyx_t_32, 1, __pyx_int_neg_2);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyList_SET_ITEM(__pyx_t_32, 2, __pyx_int_neg_1);
/* … */
  __pyx_t_33 = PyTuple_New(3); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 3908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_GIVEREF(__pyx_t_32);
  PyTuple_SET_ITEM(__pyx_t_33, 0, __pyx_t_32);
  __Pyx_GIVEREF(__pyx_t_31);
  PyTuple_SET_ITEM(__pyx_t_33, 1, __pyx_t_31);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_33, 2, __pyx_t_2);
  __pyx_t_32 = 0;
  __pyx_t_31 = 0;
  __pyx_t_2 = 0;
+03909:          [0,   0,  0],
  __pyx_t_31 = PyList_New(3); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 3909, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_31, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_31, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_31, 2, __pyx_int_0);
+03910:          [1,   2,  1])).astype(dtype=int16, order='c')
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_int_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_int_2);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_int_1);
/* … */
  __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 3910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_int16); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 3910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_30) < 0) __PYX_ERR(1, 3910, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_s_c_2) < 0) __PYX_ERR(1, 3910, __pyx_L1_error)
  __pyx_t_30 = __Pyx_PyObject_Call(__pyx_t_33, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 3910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_35 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_short(__pyx_t_30, PyBUF_WRITABLE); if (unlikely(!__pyx_t_35.memview)) __PYX_ERR(1, 3910, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_12PygameShader_6shader_GX, 1);
  __pyx_v_12PygameShader_6shader_GX = __pyx_t_35;
  __pyx_t_35.memview = NULL;
  __pyx_t_35.data = NULL;
 03911: 
+03912:     unsigned short int KERNEL_HALF = 1
  __pyx_v_12PygameShader_6shader_KERNEL_HALF = 1;
 03913: 
 03914: @cython.binding(False)
 03915: @cython.binding(False)
 03916: @cython.boundscheck(False)
 03917: @cython.wraparound(False)
 03918: @cython.nonecheck(False)
 03919: @cython.cdivision(True)
 03920: @cython.profile(False)
+03921: cdef inline void shader_sobel24_inplace_c(unsigned char [:, :, :] rgb_array, float threshold=20.0):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_sobel24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array, struct __pyx_opt_args_12PygameShader_6shader_shader_sobel24_inplace_c *__pyx_optional_args) {
  float __pyx_v_threshold = ((float)20.0);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  Py_ssize_t __pyx_v_w_1;
  Py_ssize_t __pyx_v_h_1;
  int __pyx_v_kernel_offset_x;
  int __pyx_v_kernel_offset_y;
  __Pyx_memviewslice __pyx_v_source_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  Py_ssize_t __pyx_v_xx;
  Py_ssize_t __pyx_v_yy;
  float __pyx_v_r_gx;
  float __pyx_v_r_gy;
  unsigned char *__pyx_v_gray;
  unsigned char __pyx_v_m;
  float __pyx_v_magnitude;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_sobel24_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_threshold = __pyx_optional_args->threshold;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_sobel24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_source_array, 1);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_sobel24_inplace_c {
  int __pyx_n;
  float threshold;
};
 03922:     """
 03923:     SHADER SOBEL (EDGE DETECTION)
 03924: 
 03925:     Transform the game display or a pygame surface into a sobel equivalent model
 03926:     (surface edge detection)
 03927: 
 03928:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 03929:     please refer to pygame function pixels3d or array3d to convert an image into a 3d
 03930:     array (library surfarray)
 03931: 
 03932:     e.g:
 03933:     sobel(surface, 64)
 03934: 
 03935:     :param rgb_array    : numpy.ndarray shape (w, h, 3) containing RGB values
 03936:     :param threshold    : float; Threshold value (Default value = 20.0)
 03937:     :return             : void
 03938:     """
 03939: 
 03940:     cdef Py_ssize_t w, h
+03941:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 03942: 
 03943:     cdef:
+03944:         Py_ssize_t w_1 = w - 1
  __pyx_v_w_1 = (__pyx_v_w - 1);
+03945:         Py_ssize_t h_1 = h - 1
  __pyx_v_h_1 = (__pyx_v_h - 1);
 03946:         int kernel_offset_x, kernel_offset_y
+03947:         unsigned char [:, :, :] source_array = numpy.array(rgb_array, copy=True)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 3947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 3947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 3947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(1, 3947, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 3947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 3947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_source_array = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 03948:         int x, y
 03949:         Py_ssize_t xx, yy
 03950:         float r_gx, r_gy
 03951:         unsigned char *gray
 03952:         unsigned char m
 03953:         float magnitude
 03954: 
+03955:     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_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }
 03956: 
+03957:         for y in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_gray) lastprivate(__pyx_v_kernel_offset_x) lastprivate(__pyx_v_kernel_offset_y) lastprivate(__pyx_v_m) lastprivate(__pyx_v_magnitude) lastprivate(__pyx_v_r_gx) lastprivate(__pyx_v_r_gy) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_gray) lastprivate(__pyx_v_kernel_offset_x) lastprivate(__pyx_v_kernel_offset_y) lastprivate(__pyx_v_m) lastprivate(__pyx_v_magnitude) lastprivate(__pyx_v_r_gx) lastprivate(__pyx_v_r_gy) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_9; __pyx_t_2++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_gray = ((unsigned char *)1);
                            __pyx_v_kernel_offset_x = ((int)0xbad0bad0);
                            __pyx_v_kernel_offset_y = ((int)0xbad0bad0);
                            __pyx_v_m = ((unsigned char)'?');
                            __pyx_v_magnitude = ((float)__PYX_NAN());
                            __pyx_v_r_gx = ((float)__PYX_NAN());
                            __pyx_v_r_gy = ((float)__PYX_NAN());
                            __pyx_v_x = ((int)0xbad0bad0);
                            __pyx_v_xx = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_yy = ((Py_ssize_t)0xbad0bad0);
 03958: 
+03959:             for x in range(w):
                            __pyx_t_10 = __pyx_v_w;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_x = __pyx_t_12;
 03960: 
+03961:                 r_gx, r_gy = <float>0.0, <float>0.0
                              __pyx_t_13 = ((float)0.0);
                              __pyx_t_14 = ((float)0.0);
                              __pyx_v_r_gx = __pyx_t_13;
                              __pyx_v_r_gy = __pyx_t_14;
 03962: 
+03963:                 for kernel_offset_x in range(-KERNEL_HALF, KERNEL_HALF + 1):
                              __pyx_t_15 = (__pyx_v_12PygameShader_6shader_KERNEL_HALF + 1);
                              __pyx_t_16 = __pyx_t_15;
                              for (__pyx_t_17 = (-__pyx_v_12PygameShader_6shader_KERNEL_HALF); __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
                                __pyx_v_kernel_offset_x = __pyx_t_17;
 03964: 
+03965:                     for kernel_offset_y in range(-KERNEL_HALF, KERNEL_HALF + 1):
                                __pyx_t_18 = (__pyx_v_12PygameShader_6shader_KERNEL_HALF + 1);
                                __pyx_t_19 = __pyx_t_18;
                                for (__pyx_t_20 = (-__pyx_v_12PygameShader_6shader_KERNEL_HALF); __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
                                  __pyx_v_kernel_offset_y = __pyx_t_20;
 03966: 
+03967:                         xx = x + kernel_offset_x
                                  __pyx_v_xx = (__pyx_v_x + __pyx_v_kernel_offset_x);
+03968:                         yy = y + kernel_offset_y
                                  __pyx_v_yy = (__pyx_v_y + __pyx_v_kernel_offset_y);
 03969: 
+03970:                         if xx > w_1:
                                  __pyx_t_21 = ((__pyx_v_xx > __pyx_v_w_1) != 0);
                                  if (__pyx_t_21) {
/* … */
                                  }
+03971:                             xx = w_1
                                    __pyx_v_xx = __pyx_v_w_1;
+03972:                         if xx < 0:
                                  __pyx_t_21 = ((__pyx_v_xx < 0) != 0);
                                  if (__pyx_t_21) {
/* … */
                                  }
+03973:                             xx = 0
                                    __pyx_v_xx = 0;
 03974: 
+03975:                         if yy > h_1:
                                  __pyx_t_21 = ((__pyx_v_yy > __pyx_v_h_1) != 0);
                                  if (__pyx_t_21) {
/* … */
                                  }
+03976:                             yy = h_1
                                    __pyx_v_yy = __pyx_v_h_1;
+03977:                         if yy < 0:
                                  __pyx_t_21 = ((__pyx_v_yy < 0) != 0);
                                  if (__pyx_t_21) {
/* … */
                                  }
+03978:                             yy = 0
                                    __pyx_v_yy = 0;
 03979: 
 03980:                         # grayscale image red = green = blue
+03981:                         gray = &source_array[xx, yy, 0]
                                  __pyx_t_22 = __pyx_v_xx;
                                  __pyx_t_23 = __pyx_v_yy;
                                  __pyx_t_24 = 0;
                                  __pyx_v_gray = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_22 * __pyx_v_source_array.strides[0]) ) + __pyx_t_23 * __pyx_v_source_array.strides[1]) ) + __pyx_t_24 * __pyx_v_source_array.strides[2]) ))));
 03982: 
 03983:                         # if kernel_offset_x != 0:
 03984: 
+03985:                         r_gx = r_gx + <float> gray[0] * \
                                  __pyx_v_r_gx = (__pyx_v_r_gx + (((float)(__pyx_v_gray[0])) * ((float)(*((short *) ( /* dim=1 */ ((char *) (((short *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_GX.data + __pyx_t_24 * __pyx_v_12PygameShader_6shader_GX.strides[0]) )) + __pyx_t_23)) ))))));
+03986:                                <float> GX[kernel_offset_x + KERNEL_HALF,
                                  if (unlikely(!__pyx_v_12PygameShader_6shader_GX.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("GX"); __PYX_ERR(1, 3986, __pyx_L8_error) }
/* … */
                                  __pyx_t_24 = (__pyx_v_kernel_offset_x + __pyx_v_12PygameShader_6shader_KERNEL_HALF);
                                  __pyx_t_23 = (__pyx_v_kernel_offset_y + __pyx_v_12PygameShader_6shader_KERNEL_HALF);
 03987:                                           kernel_offset_y + KERNEL_HALF]
 03988: 
 03989:                         # if kernel_offset_y != 0:
 03990: 
+03991:                         r_gy = r_gy + <float> gray[0] * \
                                  __pyx_v_r_gy = (__pyx_v_r_gy + (((float)(__pyx_v_gray[0])) * ((float)(*((short *) ( /* dim=1 */ ((char *) (((short *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_GY.data + __pyx_t_23 * __pyx_v_12PygameShader_6shader_GY.strides[0]) )) + __pyx_t_24)) ))))));
                                }
                              }
+03992:                                <float> GY[kernel_offset_x + KERNEL_HALF,
                                  if (unlikely(!__pyx_v_12PygameShader_6shader_GY.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("GY"); __PYX_ERR(1, 3992, __pyx_L8_error) }
/* … */
                                  __pyx_t_23 = (__pyx_v_kernel_offset_x + __pyx_v_12PygameShader_6shader_KERNEL_HALF);
                                  __pyx_t_24 = (__pyx_v_kernel_offset_y + __pyx_v_12PygameShader_6shader_KERNEL_HALF);
 03993:                                           kernel_offset_y + KERNEL_HALF]
 03994: 
+03995:                 magnitude = min(<float> sqrt(r_gx * r_gx + r_gy * r_gy), <float>255.0)
                              __pyx_t_14 = ((float)255.0);
                              __pyx_t_13 = ((float)sqrt(((__pyx_v_r_gx * __pyx_v_r_gx) + (__pyx_v_r_gy * __pyx_v_r_gy))));
                              if (((__pyx_t_14 < __pyx_t_13) != 0)) {
                                __pyx_t_25 = __pyx_t_14;
                              } else {
                                __pyx_t_25 = __pyx_t_13;
                              }
                              __pyx_v_magnitude = __pyx_t_25;
 03996: 
 03997:                 # if magnitude > 255:
 03998:                 #     magnitude = 255.0
 03999: 
+04000:                 m = <unsigned char> magnitude if magnitude > threshold else 0
                              if (((__pyx_v_magnitude > __pyx_v_threshold) != 0)) {
                                __pyx_t_26 = ((unsigned char)__pyx_v_magnitude);
                              } else {
                                __pyx_t_26 = 0;
                              }
                              __pyx_v_m = __pyx_t_26;
 04001: 
 04002:                 # update the pixel if the magnitude is above threshold else black pixel
+04003:                 rgb_array[x, y, 0] = m
                              __pyx_t_24 = __pyx_v_x;
                              __pyx_t_23 = __pyx_v_y;
                              __pyx_t_22 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_24 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[2]) )) = __pyx_v_m;
+04004:                 rgb_array[x, y, 1] = m
                              __pyx_t_22 = __pyx_v_x;
                              __pyx_t_23 = __pyx_v_y;
                              __pyx_t_24 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_22 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_24 * __pyx_v_rgb_array.strides[2]) )) = __pyx_v_m;
+04005:                 rgb_array[x, y, 2] = m
                              __pyx_t_24 = __pyx_v_x;
                              __pyx_t_23 = __pyx_v_y;
                              __pyx_t_22 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_24 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[2]) )) = __pyx_v_m;
                            }
                            goto __pyx_L21;
                            __pyx_L8_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L20;
                            __pyx_L20:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates0)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_gray;
                                __pyx_parallel_temp1 = __pyx_v_kernel_offset_x;
                                __pyx_parallel_temp2 = __pyx_v_kernel_offset_y;
                                __pyx_parallel_temp3 = __pyx_v_m;
                                __pyx_parallel_temp4 = __pyx_v_magnitude;
                                __pyx_parallel_temp5 = __pyx_v_r_gx;
                                __pyx_parallel_temp6 = __pyx_v_r_gy;
                                __pyx_parallel_temp7 = __pyx_v_x;
                                __pyx_parallel_temp8 = __pyx_v_xx;
                                __pyx_parallel_temp9 = __pyx_v_y;
                                __pyx_parallel_temp10 = __pyx_v_yy;
                            }
                            __pyx_L21:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_gray = __pyx_parallel_temp0;
              __pyx_v_kernel_offset_x = __pyx_parallel_temp1;
              __pyx_v_kernel_offset_y = __pyx_parallel_temp2;
              __pyx_v_m = __pyx_parallel_temp3;
              __pyx_v_magnitude = __pyx_parallel_temp4;
              __pyx_v_r_gx = __pyx_parallel_temp5;
              __pyx_v_r_gy = __pyx_parallel_temp6;
              __pyx_v_x = __pyx_parallel_temp7;
              __pyx_v_xx = __pyx_parallel_temp8;
              __pyx_v_y = __pyx_parallel_temp9;
              __pyx_v_yy = __pyx_parallel_temp10;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L4_error;
              }
            }
        }
        #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
      }
 04006: 
 04007: 
 04008: 
 04009: @cython.binding(False)
 04010: @cython.binding(False)
 04011: @cython.boundscheck(False)
 04012: @cython.wraparound(False)
 04013: @cython.nonecheck(False)
 04014: @cython.cdivision(True)
 04015: @cython.profile(False)
+04016: cdef unsigned char [:, :, ::1] scale_array24_c(
static __Pyx_memviewslice __pyx_f_12PygameShader_6shader_scale_array24_c(__Pyx_memviewslice __pyx_v_rgb_array, int __pyx_v_w2, int __pyx_v_h2) {
  Py_ssize_t __pyx_v_w1;
  Py_ssize_t __pyx_v_h1;
  CYTHON_UNUSED Py_ssize_t __pyx_v_s;
  CYTHON_UNUSED PyObject *__pyx_v_e = NULL;
  __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_fx;
  float __pyx_v_fy;
  int __pyx_v_x;
  int __pyx_v_y;
  Py_ssize_t __pyx_v_xx;
  Py_ssize_t __pyx_v_yy;
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scale_array24_c", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
  __pyx_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("PygameShader.shader.scale_array24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04017:         unsigned char [:, :, :]
 04018:         rgb_array,
 04019:         int w2,
 04020:         int h2
 04021: ):
 04022:     """
 04023:     ARRAY RE-SCALING ; ARRAY SHAPE (W, H, 3)
 04024: 
 04025:     This is an internal tool that cannot be access outside of this library (cpdef hook missing)
 04026:     Re-scale an array (rgb_array) of size (w, h, 3) into an equivalent array size (w2, h2, 3).
 04027:     This function is identical to a surface rescaling but uses the array instead
 04028: 
 04029:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04030:      please refer to pygame function pixels3d or array3d to convert an image into a 3d
 04031:       array (library surfarray)
 04032: 
 04033:     e.g:
 04034:     memview_array = scale_array24_c(my_array, 300, 300)
 04035: 
 04036:     :param rgb_array    : RGB numpy.ndarray, format (w, h, 3) numpy.uint8
 04037:     :param w2           : new width
 04038:     :param h2           : new height
 04039:     :return             : Return a MemoryViewSlice 3d numpy.ndarray format (w, h, 3) uint8
 04040:     """
+04041:     assert w2 > 0, "Argument w2 cannot be <=0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_w2 > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_w2_cannot_be_0);
      __PYX_ERR(1, 4041, __pyx_L1_error)
    }
  }
  #endif
+04042:     assert h2 > 0, "Argument h2 cannot be <=0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_h2 > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_h2_cannot_be_0);
      __PYX_ERR(1, 4042, __pyx_L1_error)
    }
  }
  #endif
 04043: 
 04044:     cdef Py_ssize_t w1, h1, s
 04045: 
+04046:     try:
  {
    /*try:*/ {
/* … */
    }
  }
+04047:         w1, h1, s = rgb_array.shape[:3]
      __pyx_t_4 = __pyx_v_rgb_array.shape;
      __pyx_t_5 = (__pyx_t_4[0]);
      __pyx_t_6 = (__pyx_t_4[1]);
      __pyx_t_7 = (__pyx_t_4[2]);
      __pyx_v_w1 = __pyx_t_5;
      __pyx_v_h1 = __pyx_t_6;
      __pyx_v_s = __pyx_t_7;
 04048: 
 04049:     except (ValueError, pygame.error) as e:
 04050:         raise ValueError('\nArray shape not understood.')
 04051: 
 04052:     cdef:
+04053:         unsigned char [:, :, ::1] new_array = numpy.empty((w2, h2, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_numpy); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_w2); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_h2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_11);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_int_3);
  __pyx_t_9 = 0;
  __pyx_t_11 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_numpy); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_uint8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 4053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_12, __pyx_t_9};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 4053, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_12, __pyx_t_9};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 4053, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  {
    __pyx_t_14 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 4053, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (__pyx_t_11) {
      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_11); __pyx_t_11 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_13, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_13, __pyx_t_9);
    __pyx_t_12 = 0;
    __pyx_t_9 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 4053, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 4053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_new_array = __pyx_t_15;
  __pyx_t_15.memview = NULL;
  __pyx_t_15.data = NULL;
+04054:         float fx = <float>w1 / <float>w2
  __pyx_v_fx = (((float)__pyx_v_w1) / ((float)__pyx_v_w2));
+04055:         float fy = <float>h1 / <float>h2
  __pyx_v_fy = (((float)__pyx_v_h1) / ((float)__pyx_v_h2));
 04056:         int x, y
 04057:         Py_ssize_t xx, yy
+04058:     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_L11;
        }
        __pyx_L11:;
      }
  }
+04059:         for x in prange(w2, schedule='static', num_threads=THREADS):
        __pyx_t_13 = __pyx_v_w2;
        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_17 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_13 = __pyx_v_w2;
        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_17 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_17; __pyx_t_16++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_16);
                            /* Initialize private variables to invalid values */
                            __pyx_v_xx = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_yy = ((Py_ssize_t)0xbad0bad0);
+04060:             xx = <int>(x * fx)
                            __pyx_v_xx = ((int)(__pyx_v_x * __pyx_v_fx));
+04061:             for y in range(h2):
                            __pyx_t_18 = __pyx_v_h2;
                            __pyx_t_19 = __pyx_t_18;
                            for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
                              __pyx_v_y = __pyx_t_20;
+04062:                 yy = <int>(y * fy)
                              __pyx_v_yy = ((int)(__pyx_v_y * __pyx_v_fy));
+04063:                 new_array[x, y, 0] = rgb_array[xx, yy, 0]
                              __pyx_t_21 = __pyx_v_xx;
                              __pyx_t_22 = __pyx_v_yy;
                              __pyx_t_23 = 0;
                              __pyx_t_24 = __pyx_v_x;
                              __pyx_t_25 = __pyx_v_y;
                              __pyx_t_26 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_24 * __pyx_v_new_array.strides[0]) ) + __pyx_t_25 * __pyx_v_new_array.strides[1]) )) + __pyx_t_26)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_23 * __pyx_v_rgb_array.strides[2]) )));
+04064:                 new_array[x, y, 1] = rgb_array[xx, yy, 1]
                              __pyx_t_23 = __pyx_v_xx;
                              __pyx_t_22 = __pyx_v_yy;
                              __pyx_t_21 = 1;
                              __pyx_t_26 = __pyx_v_x;
                              __pyx_t_25 = __pyx_v_y;
                              __pyx_t_24 = 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_25 * __pyx_v_new_array.strides[1]) )) + __pyx_t_24)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_23 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[2]) )));
+04065:                 new_array[x, y, 2] = rgb_array[xx, yy, 2]
                              __pyx_t_21 = __pyx_v_xx;
                              __pyx_t_22 = __pyx_v_yy;
                              __pyx_t_23 = 2;
                              __pyx_t_24 = __pyx_v_x;
                              __pyx_t_25 = __pyx_v_y;
                              __pyx_t_26 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_24 * __pyx_v_new_array.strides[0]) ) + __pyx_t_25 * __pyx_v_new_array.strides[1]) )) + __pyx_t_26)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_23 * __pyx_v_rgb_array.strides[2]) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 04066: 
+04067:     return new_array
  __PYX_INC_MEMVIEW(&__pyx_v_new_array, 0);
  __pyx_r = __pyx_v_new_array;
  goto __pyx_L0;
 04068: 
 04069: 
 04070: @cython.binding(False)
 04071: @cython.binding(False)
 04072: @cython.boundscheck(False)
 04073: @cython.wraparound(False)
 04074: @cython.nonecheck(False)
 04075: @cython.cdivision(True)
 04076: @cython.profile(False)
+04077: cdef inline void shader_sobel24_fast_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_sobel24_fast_inplace_c(PyObject *__pyx_v_surface_, struct __pyx_opt_args_12PygameShader_6shader_shader_sobel24_fast_inplace_c *__pyx_optional_args) {
  int __pyx_v_threshold_ = ((int)20);
  unsigned short __pyx_v_factor_ = ((unsigned short)1);
  int __pyx_v_w;
  int __pyx_v_h;
  int __pyx_v_w_1;
  int __pyx_v_h_1;
  int __pyx_v_kernel_offset_x;
  int __pyx_v_kernel_offset_y;
  int __pyx_v_x;
  int __pyx_v_y;
  Py_ssize_t __pyx_v_xx;
  Py_ssize_t __pyx_v_yy;
  float __pyx_v_r_gx;
  float __pyx_v_r_gy;
  unsigned char *__pyx_v_gray;
  unsigned char __pyx_v_m;
  float __pyx_v_magnitude;
  __Pyx_memviewslice __pyx_v_source_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_rescale_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_new_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_sobel24_fast_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_threshold_ = __pyx_optional_args->threshold_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_factor_ = __pyx_optional_args->factor_;
      }
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __PYX_XDEC_MEMVIEW(&__pyx_t_31, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_sobel24_fast_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_source_array, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rescale_array, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_, 1);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_sobel24_fast_inplace_c {
  int __pyx_n;
  int threshold_;
  unsigned short factor_;
};
 04078:         surface_, int threshold_=20, unsigned short factor_=1):
 04079:     """
 04080:     SHADER FAST SOBEL (EDGE DETECTION)
 04081: 
 04082:     Transform the game display or a pygame surface into a sobel equivalent model
 04083:     (surface edge detection).This version is slightly fastest than shader_sobel24_inplace_c as
 04084:     it down-scale the array containing all the pixels and apply the sobel algorithm to a smaller
 04085:     sample. When the processing is done, the array is re-scale to its original dimensions.
 04086:     If this method is in theory faster than shader_sobel24_inplace_c, down-scaling and up-scaling
 04087:     an array does have a side effect of decreasing the overall image definition
 04088:     (jagged lines non-antialiasing)
 04089: 
 04090:     e.g:
 04091:     sobel_fast(surface, 64, factor_=1)
 04092: 
 04093:     :param surface_     :  pygame.Surface
 04094:     :param threshold_   : integer; threshold value for the sobel filter
 04095:     :param factor_      : unsigned short (default value =1). Define the
 04096:     reduction factor of an image. 1 divide by 2, 2 divide by 4 etc
 04097:     :return             : void
 04098:     """
 04099: 
 04100:     cdef:
 04101:         int w, h, w_1, h_1
+04102:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 4102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 4102, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4102, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4102, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 4102, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 4102, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 4102, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 4102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 4102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 04103: 
 04104:     cdef:
 04105:         int kernel_offset_x, kernel_offset_y
 04106:         int x, y
 04107:         Py_ssize_t xx, yy
 04108:         float r_gx, r_gy
 04109:         unsigned char *gray
 04110:         unsigned char m
 04111:         float magnitude
 04112: 
+04113:         unsigned char [:, :, :] source_array = pixels3d(surface_)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_surface_);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 4113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_source_array = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 04114:         unsigned char [:, :, :] rescale_array = \
+04115:             numpy.array(pixels3d(scale(surface_, (w >> factor_, h >> factor_))))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_scale); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = __Pyx_PyInt_From_int((__pyx_v_w >> __pyx_v_factor_)); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = __Pyx_PyInt_From_int((__pyx_v_h >> __pyx_v_factor_)); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_12);
  __pyx_t_11 = 0;
  __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_v_surface_, __pyx_t_13};
    __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 4115, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_v_surface_, __pyx_t_13};
    __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 4115, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 4115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_12) {
      __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12); __pyx_t_12 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_v_surface_);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_7, __pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_7, __pyx_t_13);
    __pyx_t_13 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 4115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_10, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 4115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_rescale_array = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+04116:         unsigned char [:, :, :] new_array = empty((w >> factor_, h >> factor_, 3), uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_w >> __pyx_v_factor_)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_h >> __pyx_v_factor_)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 4116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_4);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_int_3);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(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_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_9, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4116, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_9, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4116, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 4116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_7, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_7, __pyx_t_4);
    __pyx_t_9 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 4116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_new_array = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 04117: 
+04118:     h = h >> factor_
  __pyx_v_h = (__pyx_v_h >> __pyx_v_factor_);
+04119:     w = w >> factor_
  __pyx_v_w = (__pyx_v_w >> __pyx_v_factor_);
+04120:     w_1 = w - 1
  __pyx_v_w_1 = (__pyx_v_w - 1);
+04121:     h_1 = h - 1
  __pyx_v_h_1 = (__pyx_v_h - 1);
 04122: 
+04123:     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_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }
 04124: 
+04125:         for y in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_7 = __pyx_v_h;
        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_14 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_gray) lastprivate(__pyx_v_kernel_offset_x) lastprivate(__pyx_v_kernel_offset_y) lastprivate(__pyx_v_m) lastprivate(__pyx_v_magnitude) lastprivate(__pyx_v_r_gx) lastprivate(__pyx_v_r_gy) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_7 = __pyx_v_h;
        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_14 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_gray) lastprivate(__pyx_v_kernel_offset_x) lastprivate(__pyx_v_kernel_offset_y) lastprivate(__pyx_v_m) lastprivate(__pyx_v_magnitude) lastprivate(__pyx_v_r_gx) lastprivate(__pyx_v_r_gy) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_14; __pyx_t_6++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_6);
                            /* Initialize private variables to invalid values */
                            __pyx_v_gray = ((unsigned char *)1);
                            __pyx_v_kernel_offset_x = ((int)0xbad0bad0);
                            __pyx_v_kernel_offset_y = ((int)0xbad0bad0);
                            __pyx_v_m = ((unsigned char)'?');
                            __pyx_v_magnitude = ((float)__PYX_NAN());
                            __pyx_v_r_gx = ((float)__PYX_NAN());
                            __pyx_v_r_gy = ((float)__PYX_NAN());
                            __pyx_v_x = ((int)0xbad0bad0);
                            __pyx_v_xx = ((Py_ssize_t)0xbad0bad0);
                            __pyx_v_yy = ((Py_ssize_t)0xbad0bad0);
 04126: 
+04127:             for x in range(w):
                            __pyx_t_15 = __pyx_v_w;
                            __pyx_t_16 = __pyx_t_15;
                            for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
                              __pyx_v_x = __pyx_t_17;
 04128: 
+04129:                 r_gx, r_gy = <float>0.0, <float>0.0
                              __pyx_t_18 = ((float)0.0);
                              __pyx_t_19 = ((float)0.0);
                              __pyx_v_r_gx = __pyx_t_18;
                              __pyx_v_r_gy = __pyx_t_19;
 04130: 
+04131:                 for kernel_offset_y in range(-KERNEL_HALF, KERNEL_HALF + 1):
                              __pyx_t_20 = (__pyx_v_12PygameShader_6shader_KERNEL_HALF + 1);
                              __pyx_t_21 = __pyx_t_20;
                              for (__pyx_t_22 = (-__pyx_v_12PygameShader_6shader_KERNEL_HALF); __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                                __pyx_v_kernel_offset_y = __pyx_t_22;
 04132: 
+04133:                     for kernel_offset_x in range(-KERNEL_HALF, KERNEL_HALF + 1):
                                __pyx_t_23 = (__pyx_v_12PygameShader_6shader_KERNEL_HALF + 1);
                                __pyx_t_24 = __pyx_t_23;
                                for (__pyx_t_25 = (-__pyx_v_12PygameShader_6shader_KERNEL_HALF); __pyx_t_25 < __pyx_t_24; __pyx_t_25+=1) {
                                  __pyx_v_kernel_offset_x = __pyx_t_25;
 04134: 
+04135:                         xx = x + kernel_offset_x
                                  __pyx_v_xx = (__pyx_v_x + __pyx_v_kernel_offset_x);
+04136:                         yy = y + kernel_offset_y
                                  __pyx_v_yy = (__pyx_v_y + __pyx_v_kernel_offset_y);
 04137: 
+04138:                         if xx > w_1:
                                  __pyx_t_26 = ((__pyx_v_xx > __pyx_v_w_1) != 0);
                                  if (__pyx_t_26) {
/* … */
                                  }
+04139:                             xx = w_1
                                    __pyx_v_xx = __pyx_v_w_1;
+04140:                         if xx < 0:
                                  __pyx_t_26 = ((__pyx_v_xx < 0) != 0);
                                  if (__pyx_t_26) {
/* … */
                                  }
+04141:                             xx = 0
                                    __pyx_v_xx = 0;
 04142: 
+04143:                         if yy > h_1:
                                  __pyx_t_26 = ((__pyx_v_yy > __pyx_v_h_1) != 0);
                                  if (__pyx_t_26) {
/* … */
                                  }
+04144:                             yy = h_1
                                    __pyx_v_yy = __pyx_v_h_1;
+04145:                         if yy < 0:
                                  __pyx_t_26 = ((__pyx_v_yy < 0) != 0);
                                  if (__pyx_t_26) {
/* … */
                                  }
+04146:                             yy = 0
                                    __pyx_v_yy = 0;
 04147: 
 04148:                         # grayscale image red = green = blue
+04149:                         gray = &rescale_array[xx, yy, 0]
                                  __pyx_t_27 = __pyx_v_xx;
                                  __pyx_t_28 = __pyx_v_yy;
                                  __pyx_t_29 = 0;
                                  __pyx_v_gray = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rescale_array.data + __pyx_t_27 * __pyx_v_rescale_array.strides[0]) ) + __pyx_t_28 * __pyx_v_rescale_array.strides[1]) ) + __pyx_t_29 * __pyx_v_rescale_array.strides[2]) ))));
 04150: 
+04151:                         if kernel_offset_x != 0:
                                  __pyx_t_26 = ((__pyx_v_kernel_offset_x != 0) != 0);
                                  if (__pyx_t_26) {
/* … */
                                  }
 04152: 
+04153:                             r_gx = r_gx + <float> gray[0] * \
                                    __pyx_v_r_gx = (__pyx_v_r_gx + (((float)(__pyx_v_gray[0])) * ((float)(*((short *) ( /* dim=1 */ ((char *) (((short *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_GX.data + __pyx_t_29 * __pyx_v_12PygameShader_6shader_GX.strides[0]) )) + __pyx_t_28)) ))))));
+04154:                                    <float> GX[kernel_offset_x + KERNEL_HALF,
                                    if (unlikely(!__pyx_v_12PygameShader_6shader_GX.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("GX"); __PYX_ERR(1, 4154, __pyx_L10_error) }
/* … */
                                    __pyx_t_29 = (__pyx_v_kernel_offset_x + __pyx_v_12PygameShader_6shader_KERNEL_HALF);
                                    __pyx_t_28 = (__pyx_v_kernel_offset_y + __pyx_v_12PygameShader_6shader_KERNEL_HALF);
 04155:                                               kernel_offset_y + KERNEL_HALF]
 04156: 
+04157:                         if kernel_offset_y != 0:
                                  __pyx_t_26 = ((__pyx_v_kernel_offset_y != 0) != 0);
                                  if (__pyx_t_26) {
/* … */
                                  }
                                }
                              }
 04158: 
+04159:                             r_gy = r_gy + <float> gray[0] * \
                                    __pyx_v_r_gy = (__pyx_v_r_gy + (((float)(__pyx_v_gray[0])) * ((float)(*((short *) ( /* dim=1 */ ((char *) (((short *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_GY.data + __pyx_t_28 * __pyx_v_12PygameShader_6shader_GY.strides[0]) )) + __pyx_t_29)) ))))));
+04160:                                    <float> GY[kernel_offset_x + KERNEL_HALF,
                                    if (unlikely(!__pyx_v_12PygameShader_6shader_GY.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("GY"); __PYX_ERR(1, 4160, __pyx_L10_error) }
/* … */
                                    __pyx_t_28 = (__pyx_v_kernel_offset_x + __pyx_v_12PygameShader_6shader_KERNEL_HALF);
                                    __pyx_t_29 = (__pyx_v_kernel_offset_y + __pyx_v_12PygameShader_6shader_KERNEL_HALF);
 04161:                                               kernel_offset_y + KERNEL_HALF]
 04162: 
+04163:                 magnitude = <float> sqrt(r_gx * r_gx + r_gy * r_gy)
                              __pyx_v_magnitude = ((float)sqrt(((__pyx_v_r_gx * __pyx_v_r_gx) + (__pyx_v_r_gy * __pyx_v_r_gy))));
 04164: 
+04165:                 if magnitude > 255:
                              __pyx_t_26 = ((__pyx_v_magnitude > 255.0) != 0);
                              if (__pyx_t_26) {
/* … */
                              }
+04166:                     magnitude = <float>255.0
                                __pyx_v_magnitude = ((float)255.0);
 04167: 
+04168:                 m = <unsigned char> magnitude if magnitude > threshold_ else 0
                              if (((__pyx_v_magnitude > __pyx_v_threshold_) != 0)) {
                                __pyx_t_30 = ((unsigned char)__pyx_v_magnitude);
                              } else {
                                __pyx_t_30 = 0;
                              }
                              __pyx_v_m = __pyx_t_30;
 04169: 
 04170:                 # update the pixel if the magnitude is above threshold else black pixel
+04171:                 new_array[x, y, 0] = m
                              __pyx_t_29 = __pyx_v_x;
                              __pyx_t_28 = __pyx_v_y;
                              __pyx_t_27 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_29 * __pyx_v_new_array.strides[0]) ) + __pyx_t_28 * __pyx_v_new_array.strides[1]) ) + __pyx_t_27 * __pyx_v_new_array.strides[2]) )) = __pyx_v_m;
+04172:                 new_array[x, y, 1] = m
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_28 = __pyx_v_y;
                              __pyx_t_29 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_27 * __pyx_v_new_array.strides[0]) ) + __pyx_t_28 * __pyx_v_new_array.strides[1]) ) + __pyx_t_29 * __pyx_v_new_array.strides[2]) )) = __pyx_v_m;
+04173:                 new_array[x, y, 2] = m
                              __pyx_t_29 = __pyx_v_x;
                              __pyx_t_28 = __pyx_v_y;
                              __pyx_t_27 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_29 * __pyx_v_new_array.strides[0]) ) + __pyx_t_28 * __pyx_v_new_array.strides[1]) ) + __pyx_t_27 * __pyx_v_new_array.strides[2]) )) = __pyx_v_m;
                            }
                            goto __pyx_L26;
                            __pyx_L10_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L25;
                            __pyx_L25:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates1)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_gray;
                                __pyx_parallel_temp1 = __pyx_v_kernel_offset_x;
                                __pyx_parallel_temp2 = __pyx_v_kernel_offset_y;
                                __pyx_parallel_temp3 = __pyx_v_m;
                                __pyx_parallel_temp4 = __pyx_v_magnitude;
                                __pyx_parallel_temp5 = __pyx_v_r_gx;
                                __pyx_parallel_temp6 = __pyx_v_r_gy;
                                __pyx_parallel_temp7 = __pyx_v_x;
                                __pyx_parallel_temp8 = __pyx_v_xx;
                                __pyx_parallel_temp9 = __pyx_v_y;
                                __pyx_parallel_temp10 = __pyx_v_yy;
                            }
                            __pyx_L26:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_gray = __pyx_parallel_temp0;
              __pyx_v_kernel_offset_x = __pyx_parallel_temp1;
              __pyx_v_kernel_offset_y = __pyx_parallel_temp2;
              __pyx_v_m = __pyx_parallel_temp3;
              __pyx_v_magnitude = __pyx_parallel_temp4;
              __pyx_v_r_gx = __pyx_parallel_temp5;
              __pyx_v_r_gy = __pyx_parallel_temp6;
              __pyx_v_x = __pyx_parallel_temp7;
              __pyx_v_xx = __pyx_parallel_temp8;
              __pyx_v_y = __pyx_parallel_temp9;
              __pyx_v_yy = __pyx_parallel_temp10;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L6_error;
              }
            }
        }
        #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
      }
 04174: 
+04175:     w = w << factor_
  __pyx_v_w = (__pyx_v_w << __pyx_v_factor_);
+04176:     h = h << factor_
  __pyx_v_h = (__pyx_v_h << __pyx_v_factor_);
 04177: 
+04178:     cdef unsigned char [:, :, :] new_ = scale_array24_c(new_array, w, h)
  __pyx_t_31 = __pyx_f_12PygameShader_6shader_scale_array24_c(__pyx_v_new_array, __pyx_v_w, __pyx_v_h); if (unlikely(!__pyx_t_31.memview)) __PYX_ERR(1, 4178, __pyx_L1_error)
  __pyx_v_new_ = __pyx_t_31;
  __pyx_t_31.memview = NULL;
  __pyx_t_31.data = NULL;
 04179: 
+04180:     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_L29;
        }
        __pyx_L29:;
      }
  }
 04181: 
+04182:         for y in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_14 = __pyx_v_h;
        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_7 = (__pyx_t_14 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_7 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_14 = __pyx_v_h;
        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_7 = (__pyx_t_14 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_7 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_7; __pyx_t_6++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_6);
                            /* Initialize private variables to invalid values */
                            __pyx_v_x = ((int)0xbad0bad0);
+04183:             for x in range(w):
                            __pyx_t_15 = __pyx_v_w;
                            __pyx_t_16 = __pyx_t_15;
                            for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
                              __pyx_v_x = __pyx_t_17;
 04184: 
+04185:                 source_array[x, y, 0] = new_[x, y, 0]
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_28 = __pyx_v_y;
                              __pyx_t_29 = 0;
                              __pyx_t_32 = __pyx_v_x;
                              __pyx_t_33 = __pyx_v_y;
                              __pyx_t_34 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_32 * __pyx_v_source_array.strides[0]) ) + __pyx_t_33 * __pyx_v_source_array.strides[1]) ) + __pyx_t_34 * __pyx_v_source_array.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_.data + __pyx_t_27 * __pyx_v_new_.strides[0]) ) + __pyx_t_28 * __pyx_v_new_.strides[1]) ) + __pyx_t_29 * __pyx_v_new_.strides[2]) )));
+04186:                 source_array[x, y, 1] = new_[x, y, 1]
                              __pyx_t_29 = __pyx_v_x;
                              __pyx_t_28 = __pyx_v_y;
                              __pyx_t_27 = 1;
                              __pyx_t_34 = __pyx_v_x;
                              __pyx_t_33 = __pyx_v_y;
                              __pyx_t_32 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_34 * __pyx_v_source_array.strides[0]) ) + __pyx_t_33 * __pyx_v_source_array.strides[1]) ) + __pyx_t_32 * __pyx_v_source_array.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_.data + __pyx_t_29 * __pyx_v_new_.strides[0]) ) + __pyx_t_28 * __pyx_v_new_.strides[1]) ) + __pyx_t_27 * __pyx_v_new_.strides[2]) )));
+04187:                 source_array[x, y, 2] = new_[x, y, 2]
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_28 = __pyx_v_y;
                              __pyx_t_29 = 2;
                              __pyx_t_32 = __pyx_v_x;
                              __pyx_t_33 = __pyx_v_y;
                              __pyx_t_34 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_32 * __pyx_v_source_array.strides[0]) ) + __pyx_t_33 * __pyx_v_source_array.strides[1]) ) + __pyx_t_34 * __pyx_v_source_array.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_.data + __pyx_t_27 * __pyx_v_new_.strides[0]) ) + __pyx_t_28 * __pyx_v_new_.strides[1]) ) + __pyx_t_29 * __pyx_v_new_.strides[2]) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 04188: 
 04189: 
 04190: @cython.binding(False)
 04191: @cython.binding(False)
 04192: @cython.boundscheck(False)
 04193: @cython.wraparound(False)
 04194: @cython.nonecheck(False)
 04195: @cython.cdivision(True)
 04196: @cython.profile(False)
+04197: cdef inline void shader_invert_surface_24bit_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_invert_surface_24bit_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_invert_surface_24bit_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 04198:         unsigned char [:, :, :] rgb_array):
 04199: 
 04200:     """
 04201:     SHADER INVERT PIXELS
 04202: 
 04203:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04204:      please refer to pygame function pixels3d or array3d to convert an image into a 3d
 04205:      array (library surfarray)
 04206: 
 04207:     Invert all pixels of the display or a given texture
 04208:     e.g:
 04209:     invert(surface)
 04210: 
 04211:     :param rgb_array    : numpy.ndarray containing all the RGB color values. Array shape (w, h, 3)
 04212:     :return             : void
 04213:     """
 04214: 
 04215:     cdef Py_ssize_t w, h
+04216:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 04217: 
 04218:     cdef:
+04219:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 04220:         unsigned char *r
 04221:         unsigned char *g
 04222:         unsigned char *b
 04223: 
+04224:     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:;
      }
  }
+04225:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* 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_r = ((unsigned char *)1);
+04226:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+04227:                 r = &rgb_array[i, j, 0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+04228:                 g = &rgb_array[i, j, 1]
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_10 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[2]) ))));
+04229:                 b = &rgb_array[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+04230:                 r[0] = 255 - r[0]
                              (__pyx_v_r[0]) = (0xFF - (__pyx_v_r[0]));
+04231:                 g[0] = 255 - g[0]
                              (__pyx_v_g[0]) = (0xFF - (__pyx_v_g[0]));
+04232:                 b[0] = 255 - b[0]
                              (__pyx_v_b[0]) = (0xFF - (__pyx_v_b[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
      }
 04233: 
 04234: 
+04235: cdef float[5] GAUSS_KERNEL = \
  memcpy(&(__pyx_v_12PygameShader_6shader_GAUSS_KERNEL[0]), __pyx_t_36, sizeof(__pyx_v_12PygameShader_6shader_GAUSS_KERNEL[0]) * (5));
+04236:     [<float>(1.0/16.0), <float>(4.0/16.0),
  __pyx_t_36[0] = ((float)(1.0 / 16.0));
  __pyx_t_36[1] = ((float)(4.0 / 16.0));
  __pyx_t_36[2] = ((float)(6.0 / 16.0));
  __pyx_t_36[3] = ((float)(4.0 / 16.0));
  __pyx_t_36[4] = ((float)(1.0 / 16.0));
 04237:      <float>(6.0/16.0), <float>(4.0/16.0), <float>(1.0/16.0)]
 04238: 
 04239: @cython.binding(False)
 04240: @cython.binding(False)
 04241: @cython.boundscheck(False)
 04242: @cython.wraparound(False)
 04243: @cython.nonecheck(False)
 04244: @cython.cdivision(True)
 04245: @cython.profile(False)
+04246: cdef inline void shader_blur5x5_array24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_shader_blur5x5_array24_inplace_c *__pyx_optional_args) {
  PyObject *__pyx_v_t = ((PyObject *)__pyx_int_1);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  short __pyx_v_kernel_half;
  __Pyx_memviewslice __pyx_v_convolve = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_xx;
  int __pyx_v_yy;
  float __pyx_v_r;
  float __pyx_v_g;
  float __pyx_v_b;
  char __pyx_v_kernel_offset;
  unsigned char __pyx_v_red;
  unsigned char __pyx_v_green;
  unsigned char __pyx_v_blue;
  float *__pyx_v_k;
  unsigned char *__pyx_v_c1;
  unsigned char *__pyx_v_c2;
  unsigned char *__pyx_v_c3;
  unsigned char *__pyx_v_c4;
  unsigned char *__pyx_v_c5;
  unsigned char *__pyx_v_c6;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_blur5x5_array24_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 1) {
      __pyx_v_t = __pyx_optional_args->t;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_blur5x5_array24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_convolve, 1);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_blur5x5_array24_inplace_c {
  int __pyx_n;
  PyObject *mask;
  PyObject *t;
};
 04247:         unsigned char [:, :, :] rgb_array_, mask=None, t=1):
 04248:     """
 04249:     APPLY A GAUSSIAN BLUR EFFECT TO THE GAME DISPLAY OR TO A GIVEN TEXTURE (KERNEL 5x5)
 04250: 
 04251:     # Gaussian kernel 5x5
 04252:         # |1   4   6   4  1|
 04253:         # |4  16  24  16  4|
 04254:         # |6  24  36  24  6|  x 1/256
 04255:         # |4  16  24  16  4|
 04256:         # |1  4    6   4  1|
 04257:     This method is using convolution property and process the image in two passes,
 04258:     first the horizontal convolution and last the vertical convolution
 04259:     pixels convoluted outside image edges will be set to adjacent edge value
 04260: 
 04261:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04262:     please refer to pygame function pixels3d or array3d to convert an image into a 3d array (
 04263:     library surfarray)
 04264: 
 04265:     :param rgb_array_   : numpy.ndarray type (w, h, 3) uint8
 04266:     :param mask         : numpy.ndarray default None
 04267:     :param t            : integer; number of times
 04268:     :return             : Return 24-bit a numpy.ndarray type (w, h, 3) uint8
 04269:     """
 04270: 
 04271:     cdef Py_ssize_t w, h
+04272:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 04273: 
 04274:     # kernel 5x5 separable
 04275:     cdef:
 04276: 
+04277:         short int kernel_half = 2
  __pyx_v_kernel_half = 2;
+04278:         unsigned char [:, :, :] convolve = numpy.empty((w, h, 3), dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_int_3);
  __pyx_t_4 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 4278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_convolve = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 04279:         int x, y, xx, yy
 04280:         float r, g, b, s
 04281:         char kernel_offset
 04282:         unsigned char red, green, blue
 04283:         float *k
 04284:         unsigned char *c1
 04285:         unsigned char *c2
 04286:         unsigned char *c3
 04287:         unsigned char *c4
 04288:         unsigned char *c5
 04289:         unsigned char *c6
 04290: 
+04291:     for r in range(t):
  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
    __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __pyx_t_3 = 0;
    __pyx_t_9 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 4291, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 4291, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  for (;;) {
    if (likely(!__pyx_t_9)) {
      if (likely(PyList_CheckExact(__pyx_t_7))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_7)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(1, 4291, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4291, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(1, 4291, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4291, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_9(__pyx_t_7);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(1, 4291, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_10 = __pyx_PyFloat_AsFloat(__pyx_t_4); if (unlikely((__pyx_t_10 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 4291, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_r = __pyx_t_10;
/* … */
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+04292:         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_L9;
          }
          __pyx_L9:;
        }
    }
 04293: 
 04294:             # horizontal convolution
+04295:             for y in prange(0, h, schedule='static', num_threads=THREADS):
          __pyx_t_2 = __pyx_v_h;
          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_2 - 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_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_c3) lastprivate(__pyx_v_c4) lastprivate(__pyx_v_c5) lastprivate(__pyx_v_c6) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
          __pyx_t_2 = __pyx_v_h;
          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_2 - 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_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_c3) lastprivate(__pyx_v_c4) lastprivate(__pyx_v_c5) lastprivate(__pyx_v_c6) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                      #endif /* _OPENMP */
                      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_12; __pyx_t_11++){
                          {
                              __pyx_v_y = (int)(0 + 1 * __pyx_t_11);
                              /* Initialize private variables to invalid values */
                              __pyx_v_b = ((float)__PYX_NAN());
                              __pyx_v_blue = ((unsigned char)'?');
                              __pyx_v_c1 = ((unsigned char *)1);
                              __pyx_v_c2 = ((unsigned char *)1);
                              __pyx_v_c3 = ((unsigned char *)1);
                              __pyx_v_c4 = ((unsigned char *)1);
                              __pyx_v_c5 = ((unsigned char *)1);
                              __pyx_v_c6 = ((unsigned char *)1);
                              __pyx_v_g = ((float)__PYX_NAN());
                              __pyx_v_green = ((unsigned char)'?');
                              __pyx_v_k = ((float *)1);
                              __pyx_v_kernel_offset = ((char)'?');
                              __pyx_v_r = ((float)__PYX_NAN());
                              __pyx_v_red = ((unsigned char)'?');
                              __pyx_v_x = ((int)0xbad0bad0);
                              __pyx_v_xx = ((int)0xbad0bad0);
 04296: 
+04297:                 c1 = &rgb_array_[<unsigned short int>0, y, <unsigned short int>0]
                              __pyx_t_13 = ((unsigned short)0);
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              __pyx_v_c1 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
+04298:                 c2 = &rgb_array_[<unsigned short int>0, y, <unsigned short int>1]
                              __pyx_t_15 = ((unsigned short)0);
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_13 = ((unsigned short)1);
                              __pyx_v_c2 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) ))));
+04299:                 c3 = &rgb_array_[<unsigned short int>0, y, <unsigned short int>2]
                              __pyx_t_13 = ((unsigned short)0);
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)2);
                              __pyx_v_c3 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
+04300:                 c4 = &rgb_array_[w-<unsigned short int>1, y, <unsigned short int>0]
                              __pyx_t_14 = (__pyx_v_w - ((unsigned short)1));
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              __pyx_v_c4 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
+04301:                 c5 = &rgb_array_[w-<unsigned short int>1, y, <unsigned short int>1]
                              __pyx_t_16 = (__pyx_v_w - ((unsigned short)1));
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)1);
                              __pyx_v_c5 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
+04302:                 c6 = &rgb_array_[w-<unsigned short int>1, y, <unsigned short int>2]
                              __pyx_t_14 = (__pyx_v_w - ((unsigned short)1));
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)2);
                              __pyx_v_c6 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
 04303: 
+04304:                 for x in range(0, w):  # range [0..w-1]
                              __pyx_t_17 = __pyx_v_w;
                              __pyx_t_18 = __pyx_t_17;
                              for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
                                __pyx_v_x = __pyx_t_19;
 04305: 
+04306:                     r, g, b = <unsigned char>0, <unsigned char>0, <unsigned char>0
                                __pyx_t_20 = ((unsigned char)0);
                                __pyx_t_21 = ((unsigned char)0);
                                __pyx_t_22 = ((unsigned char)0);
                                __pyx_v_r = __pyx_t_20;
                                __pyx_v_g = __pyx_t_21;
                                __pyx_v_b = __pyx_t_22;
 04307: 
+04308:                     for kernel_offset in range(-kernel_half, kernel_half + 1):
                                __pyx_t_23 = (__pyx_v_kernel_half + 1);
                                __pyx_t_24 = __pyx_t_23;
                                for (__pyx_t_25 = (-__pyx_v_kernel_half); __pyx_t_25 < __pyx_t_24; __pyx_t_25+=1) {
                                  __pyx_v_kernel_offset = __pyx_t_25;
 04309: 
+04310:                         k = &GAUSS_KERNEL[kernel_offset + kernel_half]
                                  __pyx_v_k = (&(__pyx_v_12PygameShader_6shader_GAUSS_KERNEL[(__pyx_v_kernel_offset + __pyx_v_kernel_half)]));
 04311: 
+04312:                         xx = x + kernel_offset
                                  __pyx_v_xx = (__pyx_v_x + __pyx_v_kernel_offset);
 04313: 
 04314:                         # check boundaries.
 04315:                         # Fetch the edge pixel for the convolution
+04316:                         if xx < <unsigned short int>0:
                                  __pyx_t_26 = ((__pyx_v_xx < ((unsigned short)0)) != 0);
                                  if (__pyx_t_26) {
/* … */
                                    goto __pyx_L18;
                                  }
+04317:                             red, green, blue = c1[0], c2[0], c3[0]
                                    __pyx_t_22 = (__pyx_v_c1[0]);
                                    __pyx_t_21 = (__pyx_v_c2[0]);
                                    __pyx_t_20 = (__pyx_v_c3[0]);
                                    __pyx_v_red = __pyx_t_22;
                                    __pyx_v_green = __pyx_t_21;
                                    __pyx_v_blue = __pyx_t_20;
+04318:                         elif xx > (w - <unsigned short int>1):
                                  __pyx_t_26 = ((__pyx_v_xx > (__pyx_v_w - ((unsigned short)1))) != 0);
                                  if (__pyx_t_26) {
/* … */
                                    goto __pyx_L18;
                                  }
+04319:                             red, green, blue = c4[0], c5[0], c6[0]
                                    __pyx_t_20 = (__pyx_v_c4[0]);
                                    __pyx_t_21 = (__pyx_v_c5[0]);
                                    __pyx_t_22 = (__pyx_v_c6[0]);
                                    __pyx_v_red = __pyx_t_20;
                                    __pyx_v_green = __pyx_t_21;
                                    __pyx_v_blue = __pyx_t_22;
 04320:                         else:
+04321:                             red, green, blue = rgb_array_[xx, y, <unsigned short int>0],\
                                  /*else*/ {
                                    __pyx_t_16 = __pyx_v_xx;
                                    __pyx_t_14 = __pyx_v_y;
                                    __pyx_t_15 = ((unsigned short)0);
                                    __pyx_t_22 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )));
+04322:                                 rgb_array_[xx, y, 1], rgb_array_[xx, y, <unsigned short int>2]
                                    __pyx_t_14 = __pyx_v_xx;
                                    __pyx_t_16 = __pyx_v_y;
                                    __pyx_t_27 = 1;
                                    __pyx_t_21 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )));
                                    __pyx_t_27 = __pyx_v_xx;
                                    __pyx_t_16 = __pyx_v_y;
                                    __pyx_t_15 = ((unsigned short)2);
                                    __pyx_t_20 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )));
                                    __pyx_v_red = __pyx_t_22;
                                    __pyx_v_green = __pyx_t_21;
                                    __pyx_v_blue = __pyx_t_20;
+04323:                             if red + green + blue == <unsigned short int>0:
                                    __pyx_t_26 = ((((__pyx_v_red + __pyx_v_green) + __pyx_v_blue) == ((unsigned short)0)) != 0);
                                    if (__pyx_t_26) {
/* … */
                                    }
                                  }
                                  __pyx_L18:;
+04324:                                 continue
                                      goto __pyx_L16_continue;
 04325: 
+04326:                         r = r + red * k[0]
                                  __pyx_v_r = (__pyx_v_r + (__pyx_v_red * (__pyx_v_k[0])));
+04327:                         g = g + green * k[0]
                                  __pyx_v_g = (__pyx_v_g + (__pyx_v_green * (__pyx_v_k[0])));
+04328:                         b = b + blue * k[0]
                                  __pyx_v_b = (__pyx_v_b + (__pyx_v_blue * (__pyx_v_k[0])));
                                  __pyx_L16_continue:;
                                }
 04329: 
+04330:                     convolve[x, y, <unsigned short int>0] = <unsigned char>r
                                __pyx_t_16 = __pyx_v_x;
                                __pyx_t_27 = __pyx_v_y;
                                __pyx_t_15 = ((unsigned short)0);
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_16 * __pyx_v_convolve.strides[0]) ) + __pyx_t_27 * __pyx_v_convolve.strides[1]) ) + __pyx_t_15 * __pyx_v_convolve.strides[2]) )) = ((unsigned char)__pyx_v_r);
+04331:                     convolve[x, y, <unsigned short int>1] = <unsigned char>g
                                __pyx_t_27 = __pyx_v_x;
                                __pyx_t_16 = __pyx_v_y;
                                __pyx_t_15 = ((unsigned short)1);
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_16 * __pyx_v_convolve.strides[1]) ) + __pyx_t_15 * __pyx_v_convolve.strides[2]) )) = ((unsigned char)__pyx_v_g);
+04332:                     convolve[x, y, <unsigned short int>2] = <unsigned char>b
                                __pyx_t_16 = __pyx_v_x;
                                __pyx_t_27 = __pyx_v_y;
                                __pyx_t_15 = ((unsigned short)2);
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_16 * __pyx_v_convolve.strides[0]) ) + __pyx_t_27 * __pyx_v_convolve.strides[1]) ) + __pyx_t_15 * __pyx_v_convolve.strides[2]) )) = ((unsigned char)__pyx_v_b);
                              }
                          }
                      }
                  }
              }
          }
          #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
 04333: 
 04334:             # Vertical convolution
+04335:             for x in prange(0,  w, schedule='static', num_threads=THREADS):
          __pyx_t_12 = __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_2 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
              if (__pyx_t_2 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_c3) lastprivate(__pyx_v_c4) lastprivate(__pyx_v_c5) lastprivate(__pyx_v_c6) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
          __pyx_t_12 = __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_2 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
              if (__pyx_t_2 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_c3) lastprivate(__pyx_v_c4) lastprivate(__pyx_v_c5) lastprivate(__pyx_v_c6) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                      #endif /* _OPENMP */
                      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_2; __pyx_t_11++){
                          {
                              __pyx_v_x = (int)(0 + 1 * __pyx_t_11);
                              /* Initialize private variables to invalid values */
                              __pyx_v_b = ((float)__PYX_NAN());
                              __pyx_v_blue = ((unsigned char)'?');
                              __pyx_v_c1 = ((unsigned char *)1);
                              __pyx_v_c2 = ((unsigned char *)1);
                              __pyx_v_c3 = ((unsigned char *)1);
                              __pyx_v_c4 = ((unsigned char *)1);
                              __pyx_v_c5 = ((unsigned char *)1);
                              __pyx_v_c6 = ((unsigned char *)1);
                              __pyx_v_g = ((float)__PYX_NAN());
                              __pyx_v_green = ((unsigned char)'?');
                              __pyx_v_k = ((float *)1);
                              __pyx_v_kernel_offset = ((char)'?');
                              __pyx_v_r = ((float)__PYX_NAN());
                              __pyx_v_red = ((unsigned char)'?');
                              __pyx_v_y = ((int)0xbad0bad0);
                              __pyx_v_yy = ((int)0xbad0bad0);
 04336: 
+04337:                 c1 = &convolve[x, <unsigned short int>0, <unsigned short int>0]
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_15 = ((unsigned short)0);
                              __pyx_t_13 = ((unsigned short)0);
                              __pyx_v_c1 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_15 * __pyx_v_convolve.strides[1]) ) + __pyx_t_13 * __pyx_v_convolve.strides[2]) ))));
+04338:                 c2 = &convolve[x, <unsigned short int>0, <unsigned short int>1]
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_13 = ((unsigned short)0);
                              __pyx_t_15 = ((unsigned short)1);
                              __pyx_v_c2 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_13 * __pyx_v_convolve.strides[1]) ) + __pyx_t_15 * __pyx_v_convolve.strides[2]) ))));
+04339:                 c3 = &convolve[x, <unsigned short int>0, <unsigned short int>2]
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_15 = ((unsigned short)0);
                              __pyx_t_13 = ((unsigned short)2);
                              __pyx_v_c3 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_15 * __pyx_v_convolve.strides[1]) ) + __pyx_t_13 * __pyx_v_convolve.strides[2]) ))));
+04340:                 c4 = &convolve[x, h-<unsigned short int>1, <unsigned short int>0]
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_16 = (__pyx_v_h - ((unsigned short)1));
                              __pyx_t_13 = ((unsigned short)0);
                              __pyx_v_c4 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_16 * __pyx_v_convolve.strides[1]) ) + __pyx_t_13 * __pyx_v_convolve.strides[2]) ))));
+04341:                 c5 = &convolve[x, h-<unsigned short int>1, <unsigned short int>1]
                              __pyx_t_16 = __pyx_v_x;
                              __pyx_t_27 = (__pyx_v_h - ((unsigned short)1));
                              __pyx_t_13 = ((unsigned short)1);
                              __pyx_v_c5 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_16 * __pyx_v_convolve.strides[0]) ) + __pyx_t_27 * __pyx_v_convolve.strides[1]) ) + __pyx_t_13 * __pyx_v_convolve.strides[2]) ))));
+04342:                 c6 = &convolve[x, h-<unsigned short int>1, <unsigned short int>2]
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_16 = (__pyx_v_h - ((unsigned short)1));
                              __pyx_t_13 = ((unsigned short)2);
                              __pyx_v_c6 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_16 * __pyx_v_convolve.strides[1]) ) + __pyx_t_13 * __pyx_v_convolve.strides[2]) ))));
 04343: 
+04344:                 for y in range(0, h):
                              __pyx_t_17 = __pyx_v_h;
                              __pyx_t_18 = __pyx_t_17;
                              for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
                                __pyx_v_y = __pyx_t_19;
+04345:                     r, g, b = <unsigned char>0, <unsigned char>0, <unsigned char>0
                                __pyx_t_20 = ((unsigned char)0);
                                __pyx_t_21 = ((unsigned char)0);
                                __pyx_t_22 = ((unsigned char)0);
                                __pyx_v_r = __pyx_t_20;
                                __pyx_v_g = __pyx_t_21;
                                __pyx_v_b = __pyx_t_22;
 04346: 
+04347:                     for kernel_offset in range(-kernel_half, kernel_half + <unsigned short int>1):
                                __pyx_t_28 = (__pyx_v_kernel_half + ((unsigned short)1));
                                __pyx_t_29 = __pyx_t_28;
                                for (__pyx_t_25 = (-__pyx_v_kernel_half); __pyx_t_25 < __pyx_t_29; __pyx_t_25+=1) {
                                  __pyx_v_kernel_offset = __pyx_t_25;
 04348: 
+04349:                         k = &GAUSS_KERNEL[kernel_offset + kernel_half]
                                  __pyx_v_k = (&(__pyx_v_12PygameShader_6shader_GAUSS_KERNEL[(__pyx_v_kernel_offset + __pyx_v_kernel_half)]));
+04350:                         yy = y + kernel_offset
                                  __pyx_v_yy = (__pyx_v_y + __pyx_v_kernel_offset);
 04351: 
+04352:                         if yy < <unsigned short int>0:
                                  __pyx_t_26 = ((__pyx_v_yy < ((unsigned short)0)) != 0);
                                  if (__pyx_t_26) {
/* … */
                                    goto __pyx_L30;
                                  }
+04353:                             red, green, blue = c1[0], c2[0], c3[0]
                                    __pyx_t_22 = (__pyx_v_c1[0]);
                                    __pyx_t_21 = (__pyx_v_c2[0]);
                                    __pyx_t_20 = (__pyx_v_c3[0]);
                                    __pyx_v_red = __pyx_t_22;
                                    __pyx_v_green = __pyx_t_21;
                                    __pyx_v_blue = __pyx_t_20;
+04354:                         elif yy > (h -<unsigned short int>1):
                                  __pyx_t_26 = ((__pyx_v_yy > (__pyx_v_h - ((unsigned short)1))) != 0);
                                  if (__pyx_t_26) {
/* … */
                                    goto __pyx_L30;
                                  }
+04355:                             red, green, blue = c4[0], c5[0], c6[0]
                                    __pyx_t_20 = (__pyx_v_c4[0]);
                                    __pyx_t_21 = (__pyx_v_c5[0]);
                                    __pyx_t_22 = (__pyx_v_c6[0]);
                                    __pyx_v_red = __pyx_t_20;
                                    __pyx_v_green = __pyx_t_21;
                                    __pyx_v_blue = __pyx_t_22;
 04356:                         else:
+04357:                             red, green, blue = convolve[x, yy, <unsigned short int>0],\
                                  /*else*/ {
                                    __pyx_t_16 = __pyx_v_x;
                                    __pyx_t_27 = __pyx_v_yy;
                                    __pyx_t_13 = ((unsigned short)0);
                                    __pyx_t_22 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_16 * __pyx_v_convolve.strides[0]) ) + __pyx_t_27 * __pyx_v_convolve.strides[1]) ) + __pyx_t_13 * __pyx_v_convolve.strides[2]) )));
+04358:                                 convolve[x, yy, 1], convolve[x, yy, <unsigned short int>2]
                                    __pyx_t_27 = __pyx_v_x;
                                    __pyx_t_16 = __pyx_v_yy;
                                    __pyx_t_14 = 1;
                                    __pyx_t_21 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_16 * __pyx_v_convolve.strides[1]) ) + __pyx_t_14 * __pyx_v_convolve.strides[2]) )));
                                    __pyx_t_14 = __pyx_v_x;
                                    __pyx_t_16 = __pyx_v_yy;
                                    __pyx_t_13 = ((unsigned short)2);
                                    __pyx_t_20 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_14 * __pyx_v_convolve.strides[0]) ) + __pyx_t_16 * __pyx_v_convolve.strides[1]) ) + __pyx_t_13 * __pyx_v_convolve.strides[2]) )));
                                    __pyx_v_red = __pyx_t_22;
                                    __pyx_v_green = __pyx_t_21;
                                    __pyx_v_blue = __pyx_t_20;
+04359:                             if red + green + blue == <unsigned short int>0:
                                    __pyx_t_26 = ((((__pyx_v_red + __pyx_v_green) + __pyx_v_blue) == ((unsigned short)0)) != 0);
                                    if (__pyx_t_26) {
/* … */
                                    }
                                  }
                                  __pyx_L30:;
+04360:                                 continue
                                      goto __pyx_L28_continue;
 04361: 
+04362:                         r = r + red * k[0]
                                  __pyx_v_r = (__pyx_v_r + (__pyx_v_red * (__pyx_v_k[0])));
+04363:                         g = g + green * k[0]
                                  __pyx_v_g = (__pyx_v_g + (__pyx_v_green * (__pyx_v_k[0])));
+04364:                         b = b + blue * k[0]
                                  __pyx_v_b = (__pyx_v_b + (__pyx_v_blue * (__pyx_v_k[0])));
                                  __pyx_L28_continue:;
                                }
 04365: 
+04366:                     rgb_array_[x, y, <unsigned short int>0], rgb_array_[x, y, <unsigned short int>1],\
                                __pyx_t_16 = __pyx_v_x;
                                __pyx_t_14 = __pyx_v_y;
                                __pyx_t_13 = ((unsigned short)0);
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_20;
                                __pyx_t_14 = __pyx_v_x;
                                __pyx_t_16 = __pyx_v_y;
                                __pyx_t_13 = ((unsigned short)1);
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_21;
+04367:                     rgb_array_[x, y, <unsigned short int>2] = \
                                __pyx_t_16 = __pyx_v_x;
                                __pyx_t_14 = __pyx_v_y;
                                __pyx_t_13 = ((unsigned short)2);
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_22;
                              }
                          }
                      }
                  }
              }
          }
          #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
        }
+04368:                         <unsigned char>r, <unsigned char>g, <unsigned char>b
                                __pyx_t_20 = ((unsigned char)__pyx_v_r);
                                __pyx_t_21 = ((unsigned char)__pyx_v_g);
                                __pyx_t_22 = ((unsigned char)__pyx_v_b);
 04369: 
 04370: 
 04371: @cython.binding(False)
 04372: @cython.binding(False)
 04373: @cython.boundscheck(False)
 04374: @cython.wraparound(False)
 04375: @cython.nonecheck(False)
 04376: @cython.cdivision(True)
 04377: @cython.profile(False)
+04378: cdef inline void shader_wave24bit_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_wave24bit_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, float __pyx_v_rad, int __pyx_v_size) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_x_pos;
  int __pyx_v_y_pos;
  int __pyx_v_xx;
  int __pyx_v_yy;
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_c1;
  int __pyx_v_w_1;
  int __pyx_v_h_1;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_wave24bit_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_wave24bit_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
  __Pyx_RefNannyFinishContext();
}
 04379:         unsigned char [:, :, :] rgb_array_,
 04380:         float rad,
 04381:         int size):
 04382:     """
 04383:     CREATE A WAVE EFFECT TO THE GAME DISPLAY OR TO A GIVEN SURFACE
 04384: 
 04385:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04386:      please refer to pygame function pixels3d or array3d to convert an image into a
 04387:      3d array (library surfarray)
 04388: 
 04389:     e.g:
 04390:     wave(surface, 8 * math.pi/180.0 + frame_number, 5)
 04391: 
 04392:     :param rgb_array_   : numpy.ndarray shape (w, h, 3) containing all the RGB values
 04393:     :param rad          : float; angle in rad to rotate over time
 04394:     :param size         : int; Number of sub-surfaces
 04395:     :return             : void
 04396:     """
 04397: 
 04398: 
 04399: 
 04400:     cdef Py_ssize_t w, h
+04401:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 04402: 
 04403:     cdef:
+04404:         unsigned char [:, :, ::1] rgb = numpy.array(rgb_array_, copy=True, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(1, 4404, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 4404, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 4404, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_rgb = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 04405:         int x, y, x_pos, y_pos, xx, yy
+04406:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+04407:         float c1 = <float>1.0 / <float>(size * size)
  __pyx_v_c1 = (((float)1.0) / ((float)(__pyx_v_size * __pyx_v_size)));
+04408:         int w_1 = <int>w - 1
  __pyx_v_w_1 = (((int)__pyx_v_w) - 1);
+04409:         int h_1 = <int>h - 1
  __pyx_v_h_1 = (((int)__pyx_v_h) - 1);
 04410: 
+04411:     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:;
      }
  }
 04412: 
+04413:         for y in prange(0, h_1 - size, size, schedule='static', num_threads=THREADS):
        __pyx_t_9 = (__pyx_v_h_1 - __pyx_v_size);
        __pyx_t_10 = __pyx_v_size;
        if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x_pos) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y_pos) lastprivate(__pyx_v_yy) schedule(static)        __pyx_t_10 = __pyx_v_size;
        if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x_pos) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y_pos) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_12; __pyx_t_11++){
                        {
                            __pyx_v_y = (int)(0 + __pyx_t_10 * __pyx_t_11);
                            /* Initialize private variables to invalid values */
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_x = ((int)0xbad0bad0);
                            __pyx_v_x_pos = ((int)0xbad0bad0);
                            __pyx_v_xx = ((int)0xbad0bad0);
                            __pyx_v_y_pos = ((int)0xbad0bad0);
                            __pyx_v_yy = ((int)0xbad0bad0);
 04414: 
+04415:             y_pos = y + size + <int>(<float>sin(rad + <float>y * c1) * <float>size)
                            __pyx_v_y_pos = ((__pyx_v_y + __pyx_v_size) + ((int)(((float)sin((__pyx_v_rad + (((float)__pyx_v_y) * __pyx_v_c1)))) * ((float)__pyx_v_size))));
 04416: 
+04417:             for x in prange(0, w_1 - size, size, schedule='static', num_threads=THREADS):
                            __pyx_t_13 = (__pyx_v_w_1 - __pyx_v_size);
                            __pyx_t_14 = __pyx_v_size;
                            if ((__pyx_t_14 == 0)) abort();
                            {
                                __pyx_t_16 = (__pyx_t_13 - 0 + __pyx_t_14 - __pyx_t_14/abs(__pyx_t_14)) / __pyx_t_14;
                                if (__pyx_t_16 > 0)
                                {
                                    #if 0
                                    #pragma omp parallel
                                    #endif /* _OPENMP */
                                    {
                                        #if 0
                                        #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x_pos) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_yy) schedule(static)                            __pyx_t_14 = __pyx_v_size;
                            if ((__pyx_t_14 == 0)) abort();
                            {
                                __pyx_t_16 = (__pyx_t_13 - 0 + __pyx_t_14 - __pyx_t_14/abs(__pyx_t_14)) / __pyx_t_14;
                                if (__pyx_t_16 > 0)
                                {
                                    #if 0
                                    #pragma omp parallel
                                    #endif /* _OPENMP */
                                    {
                                        #if 0
                                        #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x_pos) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                                        #endif /* _OPENMP */
                                        for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_16; __pyx_t_15++){
                                            {
                                                __pyx_v_x = (int)(0 + __pyx_t_14 * __pyx_t_15);
                                                /* Initialize private variables to invalid values */
                                                __pyx_v_i = ((int)0xbad0bad0);
                                                __pyx_v_j = ((int)0xbad0bad0);
                                                __pyx_v_x_pos = ((int)0xbad0bad0);
                                                __pyx_v_xx = ((int)0xbad0bad0);
                                                __pyx_v_yy = ((int)0xbad0bad0);
 04418: 
+04419:                 x_pos = x + size + <int> (<float>sin(rad + <float> x * c1) * <float> size)
                                                __pyx_v_x_pos = ((__pyx_v_x + __pyx_v_size) + ((int)(((float)sin((__pyx_v_rad + (((float)__pyx_v_x) * __pyx_v_c1)))) * ((float)__pyx_v_size))));
 04420: 
+04421:                 for i in range(0, size + 1):
                                                __pyx_t_17 = (__pyx_v_size + 1);
                                                __pyx_t_18 = __pyx_t_17;
                                                for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
                                                  __pyx_v_i = __pyx_t_19;
 04422: 
+04423:                     for j in range(0, size + 1):
                                                  __pyx_t_20 = (__pyx_v_size + 1);
                                                  __pyx_t_21 = __pyx_t_20;
                                                  for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                                                    __pyx_v_j = __pyx_t_22;
 04424: 
+04425:                         xx = x_pos + i
                                                    __pyx_v_xx = (__pyx_v_x_pos + __pyx_v_i);
+04426:                         yy = y_pos + j
                                                    __pyx_v_yy = (__pyx_v_y_pos + __pyx_v_j);
 04427: 
+04428:                         if xx > w_1:
                                                    __pyx_t_23 = ((__pyx_v_xx > __pyx_v_w_1) != 0);
                                                    if (__pyx_t_23) {
/* … */
                                                      goto __pyx_L18;
                                                    }
+04429:                             xx = w_1
                                                      __pyx_v_xx = __pyx_v_w_1;
+04430:                         elif xx < 0:
                                                    __pyx_t_23 = ((__pyx_v_xx < 0) != 0);
                                                    if (__pyx_t_23) {
/* … */
                                                    }
                                                    __pyx_L18:;
+04431:                             xx = 0
                                                      __pyx_v_xx = 0;
+04432:                         if yy > h_1:
                                                    __pyx_t_23 = ((__pyx_v_yy > __pyx_v_h_1) != 0);
                                                    if (__pyx_t_23) {
/* … */
                                                      goto __pyx_L19;
                                                    }
+04433:                             yy = h_1
                                                      __pyx_v_yy = __pyx_v_h_1;
+04434:                         elif yy < 0:
                                                    __pyx_t_23 = ((__pyx_v_yy < 0) != 0);
                                                    if (__pyx_t_23) {
/* … */
                                                    }
                                                    __pyx_L19:;
+04435:                             yy = 0
                                                      __pyx_v_yy = 0;
+04436:                         rgb_array_[xx, yy, 0] = rgb[x + i, y + j, 0]
                                                    __pyx_t_24 = (__pyx_v_x + __pyx_v_i);
                                                    __pyx_t_25 = (__pyx_v_y + __pyx_v_j);
                                                    __pyx_t_26 = 0;
                                                    __pyx_t_27 = __pyx_v_xx;
                                                    __pyx_t_28 = __pyx_v_yy;
                                                    __pyx_t_29 = 0;
                                                    *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_28 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_29 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_24 * __pyx_v_rgb.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb.strides[1]) )) + __pyx_t_26)) )));
+04437:                         rgb_array_[xx, yy, 1] = rgb[x + i, y + j, 1]
                                                    __pyx_t_26 = (__pyx_v_x + __pyx_v_i);
                                                    __pyx_t_25 = (__pyx_v_y + __pyx_v_j);
                                                    __pyx_t_24 = 1;
                                                    __pyx_t_29 = __pyx_v_xx;
                                                    __pyx_t_28 = __pyx_v_yy;
                                                    __pyx_t_27 = 1;
                                                    *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_29 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_28 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_26 * __pyx_v_rgb.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb.strides[1]) )) + __pyx_t_24)) )));
+04438:                         rgb_array_[xx, yy, 2] = rgb[x + i, y + j, 2]
                                                    __pyx_t_24 = (__pyx_v_x + __pyx_v_i);
                                                    __pyx_t_25 = (__pyx_v_y + __pyx_v_j);
                                                    __pyx_t_26 = 2;
                                                    __pyx_t_27 = __pyx_v_xx;
                                                    __pyx_t_28 = __pyx_v_yy;
                                                    __pyx_t_29 = 2;
                                                    *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_28 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_29 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_24 * __pyx_v_rgb.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb.strides[1]) )) + __pyx_t_26)) )));
                                                  }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 04439: 
 04440: 
 04441: 
 04442: 
 04443: @cython.binding(False)
 04444: @cython.binding(False)
 04445: @cython.boundscheck(False)
 04446: @cython.wraparound(False)
 04447: @cython.nonecheck(False)
 04448: @cython.cdivision(True)
 04449: @cython.profile(False)
+04450: cdef inline void shader_swirl24bit_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_swirl24bit_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, float __pyx_v_degrees) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_diffx;
  int __pyx_v_diffy;
  int __pyx_v_angle;
  float __pyx_v_columns;
  float __pyx_v_rows;
  float __pyx_v_r;
  float __pyx_v_di;
  float __pyx_v_dj;
  float __pyx_v_c1;
  float __pyx_v_c2;
  __Pyx_memviewslice __pyx_v_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_r_max;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_swirl24bit_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_swirl24bit_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
  __Pyx_RefNannyFinishContext();
}
 04451:         unsigned char [:, :, :] rgb_array_,
 04452:         float degrees
 04453: ):
 04454:     """
 04455:     SWIRL AN IMAGE (ANGLE APPROXIMATION METHOD)
 04456: 
 04457:     This algorithm uses a table of cos and sin.
 04458: 
 04459:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04460:      please refer to pygame function pixels3d or array3d to convert an image into a
 04461:      3d array (library surfarray)
 04462: 
 04463:     e.g:
 04464:     swirl(surface, frame_number / 1000.0)
 04465: 
 04466:     :param rgb_array_   : numpy.ndarray shape (w, h, 3) containing all the RGB color values
 04467:     :param degrees      : float; swirl angle in degrees
 04468:     :return             : void
 04469:     """
 04470: 
 04471:     cdef Py_ssize_t w, h
+04472:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 04473: 
 04474:     cdef:
 04475:         int i, j, diffx, diffy, angle
 04476:         float columns, rows, r, di, dj, c1, c2
+04477:         unsigned char [:, :, ::1] rgb = numpy.array(rgb_array_, copy=True, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 4477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 4477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(1, 4477, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 4477, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 4477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 4477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_rgb = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 04478:         float r_max
 04479: 
 04480: 
+04481:     columns = <float>0.5 * (<float>w - <float>1.0)
  __pyx_v_columns = (((float)0.5) * (((float)__pyx_v_w) - ((float)1.0)));
+04482:     rows    = <float>0.5 * (<float>h - <float>1.0)
  __pyx_v_rows = (((float)0.5) * (((float)__pyx_v_h) - ((float)1.0)));
 04483: 
+04484:     r_max = <float>sqrt(columns * columns + rows * rows)
  __pyx_v_r_max = ((float)sqrt(((__pyx_v_columns * __pyx_v_columns) + (__pyx_v_rows * __pyx_v_rows))));
 04485: 
+04486:     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:;
      }
  }
+04487:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_angle) lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_di) lastprivate(__pyx_v_diffx) lastprivate(__pyx_v_diffy) lastprivate(__pyx_v_dj) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_angle) lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_di) lastprivate(__pyx_v_diffx) lastprivate(__pyx_v_diffy) lastprivate(__pyx_v_dj) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_9; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_angle = ((int)0xbad0bad0);
                            __pyx_v_c1 = ((float)__PYX_NAN());
                            __pyx_v_c2 = ((float)__PYX_NAN());
                            __pyx_v_di = ((float)__PYX_NAN());
                            __pyx_v_diffx = ((int)0xbad0bad0);
                            __pyx_v_diffy = ((int)0xbad0bad0);
                            __pyx_v_dj = ((float)__PYX_NAN());
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_r = ((float)__PYX_NAN());
+04488:             for i in range(w):
                            __pyx_t_10 = __pyx_v_w;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_i = __pyx_t_12;
 04489: 
+04490:                 di = <float>i - columns
                              __pyx_v_di = (((float)__pyx_v_i) - __pyx_v_columns);
+04491:                 dj = <float>j - rows
                              __pyx_v_dj = (((float)__pyx_v_j) - __pyx_v_rows);
 04492: 
+04493:                 r = <float>sqrt(di * di + dj * dj) / <float>r_max
                              __pyx_v_r = (((float)sqrt(((__pyx_v_di * __pyx_v_di) + (__pyx_v_dj * __pyx_v_dj)))) / ((float)__pyx_v_r_max));
+04494:                 angle = <int>(degrees * r % 360)
                              __pyx_v_angle = ((int)fmodf((__pyx_v_degrees * __pyx_v_r), 360.0));
 04495: 
+04496:                 c1 = COS_TABLE[angle]
                              __pyx_v_c1 = (__pyx_v_12PygameShader_6shader_COS_TABLE[__pyx_v_angle]);
+04497:                 c2 = SIN_TABLE[angle]
                              __pyx_v_c2 = (__pyx_v_12PygameShader_6shader_SIN_TABLE[__pyx_v_angle]);
+04498:                 diffx = <int>(di * c1 - dj * c2 + columns)
                              __pyx_v_diffx = ((int)(((__pyx_v_di * __pyx_v_c1) - (__pyx_v_dj * __pyx_v_c2)) + __pyx_v_columns));
+04499:                 diffy = <int>(di * c2 + dj * c1 + rows)
                              __pyx_v_diffy = ((int)(((__pyx_v_di * __pyx_v_c2) + (__pyx_v_dj * __pyx_v_c1)) + __pyx_v_rows));
 04500: 
+04501:                 if (diffx >-1) and (diffx < w) and \
                              __pyx_t_14 = ((__pyx_v_diffx > -1L) != 0);
                              if (__pyx_t_14) {
                              } else {
                                __pyx_t_13 = __pyx_t_14;
                                goto __pyx_L13_bool_binop_done;
                              }
                              __pyx_t_14 = ((__pyx_v_diffx < __pyx_v_w) != 0);
                              if (__pyx_t_14) {
                              } else {
                                __pyx_t_13 = __pyx_t_14;
                                goto __pyx_L13_bool_binop_done;
                              }
/* … */
                              if (__pyx_t_13) {
/* … */
                              }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+04502:                    (diffy >-1) and (diffy < h):
                              __pyx_t_14 = ((__pyx_v_diffy > -1L) != 0);
                              if (__pyx_t_14) {
                              } else {
                                __pyx_t_13 = __pyx_t_14;
                                goto __pyx_L13_bool_binop_done;
                              }
                              __pyx_t_14 = ((__pyx_v_diffy < __pyx_v_h) != 0);
                              __pyx_t_13 = __pyx_t_14;
                              __pyx_L13_bool_binop_done:;
+04503:                     rgb_array_[i, j, 0], rgb_array_[i, j, 1],\
                                __pyx_t_17 = __pyx_v_i;
                                __pyx_t_16 = __pyx_v_j;
                                __pyx_t_15 = 0;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_17 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_18;
                                __pyx_t_15 = __pyx_v_i;
                                __pyx_t_16 = __pyx_v_j;
                                __pyx_t_17 = 1;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_19;
+04504:                         rgb_array_[i, j, 2] = rgb[diffx, diffy, 0], \
                                __pyx_t_15 = __pyx_v_diffx;
                                __pyx_t_16 = __pyx_v_diffy;
                                __pyx_t_17 = 0;
                                __pyx_t_18 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_15 * __pyx_v_rgb.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb.strides[1]) )) + __pyx_t_17)) )));
/* … */
                                __pyx_t_17 = __pyx_v_i;
                                __pyx_t_16 = __pyx_v_j;
                                __pyx_t_15 = 2;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_17 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_20;
+04505:                                               rgb[diffx, diffy, 1], rgb[diffx, diffy, 2]
                                __pyx_t_17 = __pyx_v_diffx;
                                __pyx_t_16 = __pyx_v_diffy;
                                __pyx_t_15 = 1;
                                __pyx_t_19 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_17 * __pyx_v_rgb.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb.strides[1]) )) + __pyx_t_15)) )));
                                __pyx_t_15 = __pyx_v_diffx;
                                __pyx_t_16 = __pyx_v_diffy;
                                __pyx_t_17 = 2;
                                __pyx_t_20 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_15 * __pyx_v_rgb.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb.strides[1]) )) + __pyx_t_17)) )));
 04506: 
 04507: 
 04508: @cython.binding(False)
 04509: @cython.binding(False)
 04510: @cython.boundscheck(False)
 04511: @cython.wraparound(False)
 04512: @cython.nonecheck(False)
 04513: @cython.cdivision(True)
 04514: @cython.profile(False)
+04515: cdef inline void shader_swirl24bit_inplace_c1(unsigned char [:, :, :] rgb_array_, float degrees):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_swirl24bit_inplace_c1(__Pyx_memviewslice __pyx_v_rgb_array_, float __pyx_v_degrees) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_diffx;
  int __pyx_v_diffy;
  float __pyx_v_columns;
  float __pyx_v_rows;
  float __pyx_v_r;
  float __pyx_v_di;
  float __pyx_v_dj;
  float __pyx_v_c1;
  float __pyx_v_c2;
  float __pyx_v_angle;
  __Pyx_memviewslice __pyx_v_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_rad;
  float __pyx_v_r_max;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_swirl24bit_inplace_c1", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_swirl24bit_inplace_c1", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
  __Pyx_RefNannyFinishContext();
}
 04516:     """
 04517:     SWIRL AN IMAGE WITHOUT ANGLE APPROXIMATION
 04518: 
 04519:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04520:      please refer to pygame function pixels3d or array3d to convert an image into a 3d
 04521:      array (library surfarray)
 04522: 
 04523:     e.g:
 04524:     swirl(surface_, frame_number / 1000)
 04525: 
 04526:     :param rgb_array_   : numpy.ndarray shape (w, h, 3) containing all the RGB color values
 04527:     :param degrees      : float; swirl angle in degrees
 04528:     :return             : void
 04529:     """
 04530: 
 04531:     cdef Py_ssize_t w, h
+04532:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 04533: 
 04534:     cdef:
 04535:         int i, j, diffx, diffy
 04536:         float columns, rows, r, di, dj, c1, c2, angle
+04537:         unsigned char [:, :, :] rgb = numpy.array(rgb_array_, copy=True)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(1, 4537, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 4537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_rgb = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+04538:         float rad = degrees * DEG_TO_RAD
  __pyx_v_rad = (__pyx_v_degrees * __pyx_v_12PygameShader_6shader_DEG_TO_RAD);
 04539:         float r_max
 04540: 
 04541: 
+04542:     columns = <float>0.5 * (w - <float>1.0)
  __pyx_v_columns = (((float)0.5) * (__pyx_v_w - ((float)1.0)));
+04543:     rows    = <float>0.5 * (h - <float>1.0)
  __pyx_v_rows = (((float)0.5) * (__pyx_v_h - ((float)1.0)));
+04544:     r_max   = <float>sqrt(columns * columns + rows * rows)
  __pyx_v_r_max = ((float)sqrt(((__pyx_v_columns * __pyx_v_columns) + (__pyx_v_rows * __pyx_v_rows))));
 04545: 
+04546:     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:;
      }
  }
+04547:         for i in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_angle) lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_di) lastprivate(__pyx_v_diffx) lastprivate(__pyx_v_diffy) lastprivate(__pyx_v_dj) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static)
/* … */
        __pyx_t_3 = __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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_angle) lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_di) lastprivate(__pyx_v_diffx) lastprivate(__pyx_v_diffy) lastprivate(__pyx_v_dj) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_9; __pyx_t_2++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_angle = ((float)__PYX_NAN());
                            __pyx_v_c1 = ((float)__PYX_NAN());
                            __pyx_v_c2 = ((float)__PYX_NAN());
                            __pyx_v_di = ((float)__PYX_NAN());
                            __pyx_v_diffx = ((int)0xbad0bad0);
                            __pyx_v_diffy = ((int)0xbad0bad0);
                            __pyx_v_dj = ((float)__PYX_NAN());
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_r = ((float)__PYX_NAN());
+04548:             for j in range(h):
                            __pyx_t_10 = __pyx_v_h;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_j = __pyx_t_12;
 04549: 
+04550:                 di = <float>i - columns
                              __pyx_v_di = (((float)__pyx_v_i) - __pyx_v_columns);
+04551:                 dj = <float>j - rows
                              __pyx_v_dj = (((float)__pyx_v_j) - __pyx_v_rows);
 04552: 
+04553:                 r = <float>sqrt(di * di + dj * dj)
                              __pyx_v_r = ((float)sqrt(((__pyx_v_di * __pyx_v_di) + (__pyx_v_dj * __pyx_v_dj))));
+04554:                 angle = <float>(rad * r/r_max)
                              __pyx_v_angle = ((float)((__pyx_v_rad * __pyx_v_r) / __pyx_v_r_max));
 04555: 
+04556:                 c1 = <float>cos(angle)
                              __pyx_v_c1 = ((float)cos(__pyx_v_angle));
+04557:                 c2 = <float>sin(angle)
                              __pyx_v_c2 = ((float)sin(__pyx_v_angle));
+04558:                 diffx = <int>(di * c1 - dj * c2 + columns)
                              __pyx_v_diffx = ((int)(((__pyx_v_di * __pyx_v_c1) - (__pyx_v_dj * __pyx_v_c2)) + __pyx_v_columns));
+04559:                 diffy = <int>(di * c2 + dj * c1 + rows)
                              __pyx_v_diffy = ((int)(((__pyx_v_di * __pyx_v_c2) + (__pyx_v_dj * __pyx_v_c1)) + __pyx_v_rows));
 04560: 
+04561:                 if (diffx >-1) and (diffx < w) and \
                              __pyx_t_14 = ((__pyx_v_diffx > -1L) != 0);
                              if (__pyx_t_14) {
                              } else {
                                __pyx_t_13 = __pyx_t_14;
                                goto __pyx_L13_bool_binop_done;
                              }
                              __pyx_t_14 = ((__pyx_v_diffx < __pyx_v_w) != 0);
                              if (__pyx_t_14) {
                              } else {
                                __pyx_t_13 = __pyx_t_14;
                                goto __pyx_L13_bool_binop_done;
                              }
/* … */
                              if (__pyx_t_13) {
/* … */
                              }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+04562:                    (diffy >-1) and (diffy < h):
                              __pyx_t_14 = ((__pyx_v_diffy > -1L) != 0);
                              if (__pyx_t_14) {
                              } else {
                                __pyx_t_13 = __pyx_t_14;
                                goto __pyx_L13_bool_binop_done;
                              }
                              __pyx_t_14 = ((__pyx_v_diffy < __pyx_v_h) != 0);
                              __pyx_t_13 = __pyx_t_14;
                              __pyx_L13_bool_binop_done:;
+04563:                     rgb_array_[i, j, 0], rgb_array_[i, j, 1],\
                                __pyx_t_17 = __pyx_v_i;
                                __pyx_t_16 = __pyx_v_j;
                                __pyx_t_15 = 0;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_17 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_18;
                                __pyx_t_15 = __pyx_v_i;
                                __pyx_t_16 = __pyx_v_j;
                                __pyx_t_17 = 1;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_19;
+04564:                         rgb_array_[i, j, 2] = rgb[diffx, diffy, 0], \
                                __pyx_t_15 = __pyx_v_diffx;
                                __pyx_t_16 = __pyx_v_diffy;
                                __pyx_t_17 = 0;
                                __pyx_t_18 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_15 * __pyx_v_rgb.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb.strides[2]) )));
/* … */
                                __pyx_t_17 = __pyx_v_i;
                                __pyx_t_16 = __pyx_v_j;
                                __pyx_t_15 = 2;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_17 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_20;
+04565:                                               rgb[diffx, diffy, 1], rgb[diffx, diffy, 2]
                                __pyx_t_17 = __pyx_v_diffx;
                                __pyx_t_16 = __pyx_v_diffy;
                                __pyx_t_15 = 1;
                                __pyx_t_19 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_17 * __pyx_v_rgb.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb.strides[2]) )));
                                __pyx_t_15 = __pyx_v_diffx;
                                __pyx_t_16 = __pyx_v_diffy;
                                __pyx_t_17 = 2;
                                __pyx_t_20 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_15 * __pyx_v_rgb.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb.strides[2]) )));
 04566: 
 04567: 
 04568: 
 04569: 
 04570: @cython.binding(False)
 04571: @cython.binding(False)
 04572: @cython.boundscheck(False)
 04573: @cython.wraparound(False)
 04574: @cython.nonecheck(False)
 04575: @cython.cdivision(True)
 04576: @cython.profile(False)
+04577: cdef inline void shader_plasma24bit_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_plasma24bit_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, int __pyx_v_frame, struct __pyx_opt_args_12PygameShader_6shader_shader_plasma24bit_inplace_c *__pyx_optional_args) {
  float __pyx_v_hue_ = __pyx_k__19;
  float __pyx_v_sat_ = __pyx_k__20;
  float __pyx_v_value_ = __pyx_k__21;
  float __pyx_v_a_ = __pyx_k__22;
  float __pyx_v_b_ = __pyx_k__23;
  float __pyx_v_c_ = __pyx_k__24;
  CYTHON_UNUSED Py_ssize_t __pyx_v_width;
  Py_ssize_t __pyx_v_height;
  float __pyx_v_xx;
  float __pyx_v_yy;
  float __pyx_v_t;
  float __pyx_v_h;
  float __pyx_v_s;
  float __pyx_v_v;
  int __pyx_v_i;
  int __pyx_v_x;
  int __pyx_v_y;
  float __pyx_v_f;
  float __pyx_v_p;
  float __pyx_v_q;
  float __pyx_v_t_;
  float __pyx_v_hue;
  float __pyx_v_r;
  float __pyx_v_g;
  float __pyx_v_b;
  unsigned char *__pyx_v_rr;
  unsigned char *__pyx_v_gg;
  unsigned char *__pyx_v_bb;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_plasma24bit_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_hue_ = __pyx_optional_args->hue_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_sat_ = __pyx_optional_args->sat_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_value_ = __pyx_optional_args->value_;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_a_ = __pyx_optional_args->a_;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_b_ = __pyx_optional_args->b_;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_c_ = __pyx_optional_args->c_;
              }
            }
          }
        }
      }
    }
  }
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_plasma24bit_inplace_c {
  int __pyx_n;
  float hue_;
  float sat_;
  float value_;
  float a_;
  float b_;
  float c_;
};
 04578:         unsigned char [:, :, :] rgb_array_,
 04579:         int frame,
+04580:         float hue_=<float>1.0/<float>6.0,
  __pyx_k__19 = (((float)1.0) / ((float)6.0));
+04581:         float sat_=<float>1.0/<float>6.0,
  __pyx_k__20 = (((float)1.0) / ((float)6.0));
+04582:         float value_=<float>1.0/<float>8.0,
  __pyx_k__21 = (((float)1.0) / ((float)8.0));
+04583:         float a_=<float>ONE_255,
  __pyx_k__22 = ((float)0.00392156862745098);
+04584:         float b_=<float>ONE_TWELVE,
  __pyx_k__23 = ((float)0.08333333333333333);
+04585:         float c_=<float>ONE_TWELVE):
  __pyx_k__24 = ((float)0.08333333333333333);
 04586:     """
 04587:     CREATE A BASIC PLASMA EFFECT ON THE TOP OF A PYGAME SURFACE
 04588: 
 04589:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04590:      please refer to pygame function pixels3d or array3d to convert an image into a
 04591:      3d array (library surfarray)
 04592: 
 04593:     e.g:
 04594:     plasma_config(surface, frame_number)
 04595: 
 04596:     :param a_           : float; default value 1.0/255.0 control the plasma equation
 04597:     :param b_           : float; default value 1.0/12.0 control the plasma equation
 04598:     :param c_           : float; default value 1.0/12.0 control the plasma equation
 04599:     :param value_       : float; default value 1.0/8.0 value factor
 04600:     :param sat_         : float; default value 1.0/6.0 saturation value
 04601:     :param hue_         : float; default value 1.0/6.0 hue value factor
 04602:     :param rgb_array_   : numpy.ndarray shape( w, h, 3) containing all the RGB color values
 04603:     :param frame        : integer; Variable that need to change over time
 04604:     :return             : void
 04605:     """
 04606: 
 04607:     cdef Py_ssize_t width, height
+04608:     width, height = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_width = __pyx_t_2;
  __pyx_v_height = __pyx_t_3;
 04609: 
 04610:     cdef:
 04611:         float xx, yy, t
 04612:         float h, s, v
+04613:         int i = 0, x, y
  __pyx_v_i = 0;
 04614:         float f, p, q, t_
 04615:         float hue, r, g, b
 04616:         unsigned char *rr
 04617:         unsigned char *gg
 04618:         unsigned char *bb
 04619: 
+04620:     t = <float>frame
  __pyx_v_t = ((float)__pyx_v_frame);
 04621: 
+04622:     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:;
      }
  }
+04623:         for x in prange(width, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_f) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_h) lastprivate(__pyx_v_hue) lastprivate(__pyx_v_i) lastprivate(__pyx_v_p) lastprivate(__pyx_v_q) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_s) lastprivate(__pyx_v_t_) lastprivate(__pyx_v_v) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_3 = __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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_f) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_h) lastprivate(__pyx_v_hue) lastprivate(__pyx_v_i) lastprivate(__pyx_v_p) lastprivate(__pyx_v_q) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_s) lastprivate(__pyx_v_t_) lastprivate(__pyx_v_v) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((float)__PYX_NAN());
                            __pyx_v_bb = ((unsigned char *)1);
                            __pyx_v_f = ((float)__PYX_NAN());
                            __pyx_v_g = ((float)__PYX_NAN());
                            __pyx_v_gg = ((unsigned char *)1);
                            __pyx_v_h = ((float)__PYX_NAN());
                            __pyx_v_hue = ((float)__PYX_NAN());
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_p = ((float)__PYX_NAN());
                            __pyx_v_q = ((float)__PYX_NAN());
                            __pyx_v_r = ((float)__PYX_NAN());
                            __pyx_v_rr = ((unsigned char *)1);
                            __pyx_v_s = ((float)__PYX_NAN());
                            __pyx_v_t_ = ((float)__PYX_NAN());
                            __pyx_v_v = ((float)__PYX_NAN());
                            __pyx_v_xx = ((float)__PYX_NAN());
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_yy = ((float)__PYX_NAN());
+04624:             for y in range(height):
                            __pyx_t_5 = __pyx_v_height;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_y = __pyx_t_7;
 04625: 
+04626:                 xx = <float>x * <float>0.5
                              __pyx_v_xx = (((float)__pyx_v_x) * ((float)0.5));
+04627:                 yy = <float>y * <float>0.5
                              __pyx_v_yy = (((float)__pyx_v_y) * ((float)0.5));
 04628: 
 04629:                 hue = <float>4.0 + <float>sin((xx * <float>0.5 + yy * <float>0.5) * a_) \
+04630:                       + <float>sin((xx * b_ + t) * c_)
                              __pyx_v_hue = ((((float)4.0) + ((float)sin((((__pyx_v_xx * ((float)0.5)) + (__pyx_v_yy * ((float)0.5))) * __pyx_v_a_)))) + ((float)sin((((__pyx_v_xx * __pyx_v_b_) + __pyx_v_t) * __pyx_v_c_))));
 04631: 
+04632:                 h, s, v = hue * hue_, hue * sat_, hue * value_
                              __pyx_t_8 = (__pyx_v_hue * __pyx_v_hue_);
                              __pyx_t_9 = (__pyx_v_hue * __pyx_v_sat_);
                              __pyx_t_10 = (__pyx_v_hue * __pyx_v_value_);
                              __pyx_v_h = __pyx_t_8;
                              __pyx_v_s = __pyx_t_9;
                              __pyx_v_v = __pyx_t_10;
 04633: 
+04634:                 i = <int>(h * <float>6.0)
                              __pyx_v_i = ((int)(__pyx_v_h * ((float)6.0)));
+04635:                 f = (h * <float>6.0) - i
                              __pyx_v_f = ((__pyx_v_h * ((float)6.0)) - __pyx_v_i);
+04636:                 p = v*(<float>1.0 - s)
                              __pyx_v_p = (__pyx_v_v * (((float)1.0) - __pyx_v_s));
+04637:                 q = v*(<float>1.0 - s * f)
                              __pyx_v_q = (__pyx_v_v * (((float)1.0) - (__pyx_v_s * __pyx_v_f)));
+04638:                 t_ = v*(<float>1.0 - s * (<float>1.0 - f))
                              __pyx_v_t_ = (__pyx_v_v * (((float)1.0) - (__pyx_v_s * (((float)1.0) - __pyx_v_f))));
+04639:                 i = i % 6
                              __pyx_v_i = (__pyx_v_i % 6);
 04640: 
+04641:                 if i == 0:
                              __pyx_t_11 = ((__pyx_v_i == 0) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04642:                     r, g, b =  v, t_, p
                                __pyx_t_10 = __pyx_v_v;
                                __pyx_t_9 = __pyx_v_t_;
                                __pyx_t_8 = __pyx_v_p;
                                __pyx_v_r = __pyx_t_10;
                                __pyx_v_g = __pyx_t_9;
                                __pyx_v_b = __pyx_t_8;
+04643:                 if i == 1:
                              __pyx_t_11 = ((__pyx_v_i == 1) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04644:                      r, g, b = q, v, p
                                __pyx_t_8 = __pyx_v_q;
                                __pyx_t_9 = __pyx_v_v;
                                __pyx_t_10 = __pyx_v_p;
                                __pyx_v_r = __pyx_t_8;
                                __pyx_v_g = __pyx_t_9;
                                __pyx_v_b = __pyx_t_10;
+04645:                 if i == 2:
                              __pyx_t_11 = ((__pyx_v_i == 2) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04646:                      r, g, b = p, v, t_
                                __pyx_t_10 = __pyx_v_p;
                                __pyx_t_9 = __pyx_v_v;
                                __pyx_t_8 = __pyx_v_t_;
                                __pyx_v_r = __pyx_t_10;
                                __pyx_v_g = __pyx_t_9;
                                __pyx_v_b = __pyx_t_8;
+04647:                 if i == 3:
                              __pyx_t_11 = ((__pyx_v_i == 3) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04648:                      r, g, b = p, q, v
                                __pyx_t_8 = __pyx_v_p;
                                __pyx_t_9 = __pyx_v_q;
                                __pyx_t_10 = __pyx_v_v;
                                __pyx_v_r = __pyx_t_8;
                                __pyx_v_g = __pyx_t_9;
                                __pyx_v_b = __pyx_t_10;
+04649:                 if i == 4:
                              __pyx_t_11 = ((__pyx_v_i == 4) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04650:                      r, g, b = t_, p, v
                                __pyx_t_10 = __pyx_v_t_;
                                __pyx_t_9 = __pyx_v_p;
                                __pyx_t_8 = __pyx_v_v;
                                __pyx_v_r = __pyx_t_10;
                                __pyx_v_g = __pyx_t_9;
                                __pyx_v_b = __pyx_t_8;
+04651:                 if i == 5:
                              __pyx_t_11 = ((__pyx_v_i == 5) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04652:                      r, g, b = v, p, q
                                __pyx_t_8 = __pyx_v_v;
                                __pyx_t_9 = __pyx_v_p;
                                __pyx_t_10 = __pyx_v_q;
                                __pyx_v_r = __pyx_t_8;
                                __pyx_v_g = __pyx_t_9;
                                __pyx_v_b = __pyx_t_10;
 04653: 
+04654:                 if s == 0.0:
                              __pyx_t_11 = ((__pyx_v_s == 0.0) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04655:                      r, g, b = v, v, v
                                __pyx_t_10 = __pyx_v_v;
                                __pyx_t_9 = __pyx_v_v;
                                __pyx_t_8 = __pyx_v_v;
                                __pyx_v_r = __pyx_t_10;
                                __pyx_v_g = __pyx_t_9;
                                __pyx_v_b = __pyx_t_8;
 04656: 
+04657:                 rr = &rgb_array_[x, y, 0]
                              __pyx_t_12 = __pyx_v_x;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_14 = 0;
                              __pyx_v_rr = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[2]) ))));
+04658:                 gg = &rgb_array_[x, y, 1]
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_12 = 1;
                              __pyx_v_gg = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))));
+04659:                 bb = &rgb_array_[x, y, 2]
                              __pyx_t_12 = __pyx_v_x;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_14 = 2;
                              __pyx_v_bb = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[2]) ))));
 04660: 
+04661:                 if rr[0] < 256:
                              __pyx_t_11 = (((__pyx_v_rr[0]) < 0x100) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04662:                     rr[0] = <unsigned char>(min(rr[0] + r * <float>128.0, <float>255.0))
                                __pyx_t_8 = ((float)255.0);
                                __pyx_t_9 = ((__pyx_v_rr[0]) + (__pyx_v_r * ((float)128.0)));
                                if (((__pyx_t_8 < __pyx_t_9) != 0)) {
                                  __pyx_t_10 = __pyx_t_8;
                                } else {
                                  __pyx_t_10 = __pyx_t_9;
                                }
                                (__pyx_v_rr[0]) = ((unsigned char)__pyx_t_10);
 04663: 
+04664:                 if gg[0] < 256:
                              __pyx_t_11 = (((__pyx_v_gg[0]) < 0x100) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
+04665:                     gg[0] = <unsigned char>(min(gg[0] + g * <float>128.0, <float>255.0))
                                __pyx_t_10 = ((float)255.0);
                                __pyx_t_8 = ((__pyx_v_gg[0]) + (__pyx_v_g * ((float)128.0)));
                                if (((__pyx_t_10 < __pyx_t_8) != 0)) {
                                  __pyx_t_9 = __pyx_t_10;
                                } else {
                                  __pyx_t_9 = __pyx_t_8;
                                }
                                (__pyx_v_gg[0]) = ((unsigned char)__pyx_t_9);
 04666: 
+04667:                 if bb[0] < 256:
                              __pyx_t_11 = (((__pyx_v_bb[0]) < 0x100) != 0);
                              if (__pyx_t_11) {
/* … */
                              }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+04668:                     bb[0] = <unsigned char>(min(bb[0] + b * <float>128.0, <float>255.0))
                                __pyx_t_9 = ((float)255.0);
                                __pyx_t_10 = ((__pyx_v_bb[0]) + (__pyx_v_b * ((float)128.0)));
                                if (((__pyx_t_9 < __pyx_t_10) != 0)) {
                                  __pyx_t_8 = __pyx_t_9;
                                } else {
                                  __pyx_t_8 = __pyx_t_10;
                                }
                                (__pyx_v_bb[0]) = ((unsigned char)__pyx_t_8);
 04669: 
 04670: 
 04671: @cython.binding(False)
 04672: @cython.binding(False)
 04673: @cython.boundscheck(False)
 04674: @cython.wraparound(False)
 04675: @cython.nonecheck(False)
 04676: @cython.cdivision(True)
 04677: @cython.profile(False)
+04678: cdef inline void shader_plasma_c(surface_, float frame, unsigned int [::1] palette_):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_plasma_c(PyObject *__pyx_v_surface_, float __pyx_v_frame, __Pyx_memviewslice __pyx_v_palette_) {
  Py_ssize_t __pyx_v_width;
  Py_ssize_t __pyx_v_height;
  PyObject *__pyx_v_rgb_array = NULL;
  PyObject *__pyx_v_e = NULL;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_ii;
  int __pyx_v_c;
  __Pyx_memviewslice __pyx_v_rgb_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned char *__pyx_v_rr;
  unsigned char *__pyx_v_gg;
  unsigned char *__pyx_v_bb;
  float __pyx_v_color_;
  float __pyx_v_w2;
  float __pyx_v_h2;
  Py_ssize_t __pyx_v_length;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_plasma_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __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_12);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_plasma_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rgb_array);
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_, 1);
  __Pyx_RefNannyFinishContext();
}
 04679: 
 04680:     """
 04681:     CREATE A PLASMA EFFECT INPLACE
 04682: 
 04683:     e.g:
 04684:     plasma(surface, frame_number)
 04685: 
 04686:     :param surface_: pygame Surface
 04687:     :param frame   : float; frame number
 04688:     :param palette_: color palette
 04689:     :return        : void
 04690:     """
 04691:     cdef Py_ssize_t width, height
+04692:     width, height = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 4692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 4692, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 4692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 4692, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 4692, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 4692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 4692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_width = __pyx_t_6;
  __pyx_v_height = __pyx_t_7;
 04693: 
+04694:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __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;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L1_error;
    __pyx_L10_try_end:;
  }
+04695:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4695, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4695, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_rgb_array = __pyx_t_1;
      __pyx_t_1 = 0;
 04696: 
+04697:     except Exception as e:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_11) {
      __Pyx_AddTraceback("PygameShader.shader.shader_plasma_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(1, 4697, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_e = __pyx_t_3;
+04698:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_4 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 4698, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 4698, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_Raise(__pyx_t_12, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __PYX_ERR(1, 4698, __pyx_L7_except_error)
    }
    goto __pyx_L7_except_error;
    __pyx_L7_except_error:;
 04699: 
 04700:     cdef:
 04701:         int x, y, ii,c
 04702: 
+04703:         unsigned char [:, :, :] rgb_array_ = rgb_array
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(1, 4703, __pyx_L1_error)
  __pyx_v_rgb_array_ = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
 04704: 
 04705:         unsigned char *rr
 04706:         unsigned char *gg
 04707:         unsigned char *bb
 04708:         float color_
+04709:         float w2 = <float>width * <float>HALF
  __pyx_v_w2 = (((float)__pyx_v_width) * ((float)0.5));
+04710:         float h2 = <float>height * <float>HALF
  __pyx_v_h2 = (((float)__pyx_v_height) * ((float)0.5));
+04711:         Py_ssize_t length = len(palette_)
  __pyx_t_14 = __Pyx_MemoryView_Len(__pyx_v_palette_); 
  __pyx_v_length = __pyx_t_14;
 04712: 
+04713:     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_L15;
        }
        __pyx_L15:;
      }
  }
 04714: 
+04715:         for y in prange(height, schedule='static', num_threads=THREADS):
        __pyx_t_7 = __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_15 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_15 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_bb) lastprivate(__pyx_v_c) lastprivate(__pyx_v_color_) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_7 = __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_15 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_15 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_bb) lastprivate(__pyx_v_c) lastprivate(__pyx_v_color_) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_15; __pyx_t_6++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_6);
                            /* Initialize private variables to invalid values */
                            __pyx_v_bb = ((unsigned char *)1);
                            __pyx_v_c = ((int)0xbad0bad0);
                            __pyx_v_color_ = ((float)__PYX_NAN());
                            __pyx_v_gg = ((unsigned char *)1);
                            __pyx_v_ii = ((int)0xbad0bad0);
                            __pyx_v_rr = ((unsigned char *)1);
                            __pyx_v_x = ((int)0xbad0bad0);
+04716:             for x in range(width):
                            __pyx_t_16 = __pyx_v_width;
                            __pyx_t_17 = __pyx_t_16;
                            for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_17; __pyx_t_11+=1) {
                              __pyx_v_x = __pyx_t_11;
 04717: 
+04718:                 rr = &rgb_array_[x, y, 0]
                              __pyx_t_18 = __pyx_v_x;
                              __pyx_t_19 = __pyx_v_y;
                              __pyx_t_20 = 0;
                              __pyx_v_rr = (&(*((unsigned char *) ( /* dim=2 */ (( /* 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_rgb_array_.strides[2]) ))));
+04719:                 gg = &rgb_array_[x, y, 1]
                              __pyx_t_20 = __pyx_v_x;
                              __pyx_t_19 = __pyx_v_y;
                              __pyx_t_18 = 1;
                              __pyx_v_gg = (&(*((unsigned char *) ( /* dim=2 */ (( /* 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_rgb_array_.strides[2]) ))));
+04720:                 bb = &rgb_array_[x, y, 2]
                              /* "PygameShader/shader.pyx":4720
 *                 rr = &rgb_array_[x, y, 0]
 *                 gg = &rgb_array_[x, y, 1]
 *                 bb = &rgb_array_[x, y, 2]             # <<<<<<<<<<<<<<
 * 
 *                 color_ = <float>128.0 + (<float>128.0 * <float>sin(x *
 */
                              __pyx_t_18 = __pyx_v_x;
                              __pyx_t_19 = __pyx_v_y;
                              __pyx_t_20 = 2;
                              __pyx_v_bb = (&(*((unsigned char *) ( /* dim=2 */ (( /* 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_rgb_array_.strides[2]) ))));
 04721: 
 04722:                 color_ = <float>128.0 + (<float>128.0 * <float>sin(x *
 04723:                                                                    <float>ONE_255 + frame)) \
 04724:                     + <float>128.0 + (<float>128.0 * <float>sin(frame *
 04725:                                                                 <float>ONE_32 + y * <float>ONE_64)) \
 04726:                     + <float>128.0 + (<float>128.0 * <float>sin(
 04727:                     sqrt((x - w2) * (x - w2) + (y - h2) * (y - h2)) * <float>ONE_255)) \
+04728:                     + <float>128.0 + (<float>128.0 * <float>sin(
                              __pyx_v_color_ = (((((((((float)128.0) + (((float)128.0) * ((float)sin(((__pyx_v_x * ((float)0.00392156862745098)) + __pyx_v_frame))))) + ((float)128.0)) + (((float)128.0) * ((float)sin(((__pyx_v_frame * ((float)0.03125)) + (__pyx_v_y * ((float)0.015625))))))) + ((float)128.0)) + (((float)128.0) * ((float)sin((sqrt((((__pyx_v_x - __pyx_v_w2) * (__pyx_v_x - __pyx_v_w2)) + ((__pyx_v_y - __pyx_v_h2) * (__pyx_v_y - __pyx_v_h2)))) * ((float)0.00392156862745098)))))) + ((float)128.0)) + (((float)128.0) * ((float)sin((((float)sqrt((((__pyx_v_x * __pyx_v_x) + (__pyx_v_y * __pyx_v_y)) + __pyx_v_frame))) * ((float)0.015625))))));
 04729:                     <float>sqrt(x * x + y * y + frame) * <float>ONE_64))
 04730: 
+04731:                 c = min(<int>(color_ / <float>8.0), <int>length)
                              __pyx_t_21 = ((int)__pyx_v_length);
                              __pyx_t_22 = ((int)(__pyx_v_color_ / ((float)8.0)));
                              if (((__pyx_t_21 < __pyx_t_22) != 0)) {
                                __pyx_t_23 = __pyx_t_21;
                              } else {
                                __pyx_t_23 = __pyx_t_22;
                              }
                              __pyx_v_c = __pyx_t_23;
 04732: 
+04733:                 ii = palette_[c]
                              __pyx_t_20 = __pyx_v_c;
                              __pyx_v_ii = (*((unsigned int *) ( /* dim=0 */ ((char *) (((unsigned int *) __pyx_v_palette_.data) + __pyx_t_20)) )));
 04734: 
+04735:                 rr[0] = (ii >> 16) & 255
                              (__pyx_v_rr[0]) = ((__pyx_v_ii >> 16) & 0xFF);
+04736:                 gg[0] = (ii >> 8) & 255
                              (__pyx_v_gg[0]) = ((__pyx_v_ii >> 8) & 0xFF);
+04737:                 bb[0] = ii & 255
                              (__pyx_v_bb[0]) = (__pyx_v_ii & 0xFF);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 04738: 
 04739: 
 04740: @cython.binding(False)
 04741: @cython.binding(False)
 04742: @cython.boundscheck(False)
 04743: @cython.wraparound(False)
 04744: @cython.nonecheck(False)
 04745: @cython.cdivision(True)
 04746: @cython.profile(False)
+04747: cdef inline float [:, :, :, ::1] rgb_to_hsl_model_c():
static CYTHON_INLINE __Pyx_memviewslice __pyx_f_12PygameShader_6shader_rgb_to_hsl_model_c(void) {
  __Pyx_memviewslice __pyx_v_rgb_to_hsl = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct hsl __pyx_v_hsl_;
  int __pyx_v_r;
  int __pyx_v_g;
  int __pyx_v_b;
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_hsl_model_c", 0);
/* … */
  /* 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_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __pyx_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("PygameShader.shader.rgb_to_hsl_model_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_to_hsl, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04748:     """
 04749:     CONVERT RGB INTO HSL MODEL
 04750: 
 04751:     The array can be used when the rgb to hsl is extensively used
 04752: 
 04753:     All the values will be stored into an array shape (r, g, b, 3) type float
 04754:     :return: Numpy.ndarray shape (r, g, b, 3) type float
 04755:     """
+04756:     cdef float [:, :, :, ::1] rgb_to_hsl = numpy.empty((256, 256, 256, 3), float32)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  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 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_tuple__25, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4756, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_tuple__25, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4756, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4756, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_tuple__25);
    __Pyx_GIVEREF(__pyx_tuple__25);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_tuple__25);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4756, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_d_d_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 4756, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_rgb_to_hsl = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
/* … */
  __pyx_tuple__25 = PyTuple_Pack(4, __pyx_int_256, __pyx_int_256, __pyx_int_256, __pyx_int_3); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 4756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
 04757:     cdef hsl hsl_
 04758:     cdef int r, g, b
+04759:     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:;
      }
  }
+04760:         for r in prange(0, 256, schedule='static', num_threads=THREADS):
        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_9 = (0x100 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) firstprivate(__pyx_v_r) lastprivate(__pyx_v_r) schedule(static)
/* … */
        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_9 = (0x100 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) firstprivate(__pyx_v_r) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_r = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((int)0xbad0bad0);
                            __pyx_v_g = ((int)0xbad0bad0);
+04761:             for g in range(0, 256):
                            for (__pyx_t_5 = 0; __pyx_t_5 < 0x100; __pyx_t_5+=1) {
                              __pyx_v_g = __pyx_t_5;
+04762:                 for b in range(0, 256):
                              for (__pyx_t_10 = 0; __pyx_t_10 < 0x100; __pyx_t_10+=1) {
                                __pyx_v_b = __pyx_t_10;
+04763:                     hsl_ = struct_rgb_to_hsl(
                                __pyx_v_hsl_ = struct_rgb_to_hsl((__pyx_v_r * ((float)0.00392156862745098)), (__pyx_v_g * ((float)0.00392156862745098)), (__pyx_v_b * ((float)0.00392156862745098)));
 04764:                         r * <float>ONE_255, g * <float>ONE_255, b * <float>ONE_255)
+04765:                     rgb_to_hsl[r, g, b, 0] = min(<float>(hsl_.h * <float>255.0), <float>255.0)
                                __pyx_t_11 = ((float)255.0);
                                __pyx_t_12 = ((float)(__pyx_v_hsl_.h * ((float)255.0)));
                                if (((__pyx_t_11 < __pyx_t_12) != 0)) {
                                  __pyx_t_13 = __pyx_t_11;
                                } else {
                                  __pyx_t_13 = __pyx_t_12;
                                }
                                __pyx_t_14 = __pyx_v_r;
                                __pyx_t_15 = __pyx_v_g;
                                __pyx_t_16 = __pyx_v_b;
                                __pyx_t_17 = 0;
                                *((float *) ( /* dim=3 */ ((char *) (((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_to_hsl.data + __pyx_t_14 * __pyx_v_rgb_to_hsl.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_to_hsl.strides[1]) ) + __pyx_t_16 * __pyx_v_rgb_to_hsl.strides[2]) )) + __pyx_t_17)) )) = __pyx_t_13;
+04766:                     rgb_to_hsl[r, g, b, 1] = min(<float>(hsl_.s * <float>255.0), <float>255.0)
                                __pyx_t_13 = ((float)255.0);
                                __pyx_t_11 = ((float)(__pyx_v_hsl_.s * ((float)255.0)));
                                if (((__pyx_t_13 < __pyx_t_11) != 0)) {
                                  __pyx_t_12 = __pyx_t_13;
                                } else {
                                  __pyx_t_12 = __pyx_t_11;
                                }
                                __pyx_t_17 = __pyx_v_r;
                                __pyx_t_16 = __pyx_v_g;
                                __pyx_t_15 = __pyx_v_b;
                                __pyx_t_14 = 1;
                                *((float *) ( /* dim=3 */ ((char *) (((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_to_hsl.data + __pyx_t_17 * __pyx_v_rgb_to_hsl.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_to_hsl.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_to_hsl.strides[2]) )) + __pyx_t_14)) )) = __pyx_t_12;
+04767:                     rgb_to_hsl[r, g, b, 2] = min(<float>(hsl_.l * <float>255.0), <float>255.0)
                                __pyx_t_12 = ((float)255.0);
                                __pyx_t_13 = ((float)(__pyx_v_hsl_.l * ((float)255.0)));
                                if (((__pyx_t_12 < __pyx_t_13) != 0)) {
                                  __pyx_t_11 = __pyx_t_12;
                                } else {
                                  __pyx_t_11 = __pyx_t_13;
                                }
                                __pyx_t_14 = __pyx_v_r;
                                __pyx_t_15 = __pyx_v_g;
                                __pyx_t_16 = __pyx_v_b;
                                __pyx_t_17 = 2;
                                *((float *) ( /* dim=3 */ ((char *) (((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_to_hsl.data + __pyx_t_14 * __pyx_v_rgb_to_hsl.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_to_hsl.strides[1]) ) + __pyx_t_16 * __pyx_v_rgb_to_hsl.strides[2]) )) + __pyx_t_17)) )) = __pyx_t_11;
                              }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 04768: 
+04769:     return asarray(rgb_to_hsl, dtype=float32)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_rgb_to_hsl, 4, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 4769, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_d_d_dc_float(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 4769, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
  goto __pyx_L0;
 04770: 
 04771: 
 04772: @cython.binding(False)
 04773: @cython.binding(False)
 04774: @cython.boundscheck(False)
 04775: @cython.wraparound(False)
 04776: @cython.nonecheck(False)
 04777: @cython.cdivision(True)
 04778: @cython.profile(False)
+04779: cdef inline unsigned char [:, :, :, ::1] hsl_to_rgb_model_c():
static CYTHON_INLINE __Pyx_memviewslice __pyx_f_12PygameShader_6shader_hsl_to_rgb_model_c(void) {
  __Pyx_memviewslice __pyx_v_hsl_to_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct rgb __pyx_v_rgb_;
  int __pyx_v_h;
  int __pyx_v_s;
  int __pyx_v_l;
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hsl_to_rgb_model_c", 0);
/* … */
  /* 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_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __pyx_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("PygameShader.shader.hsl_to_rgb_model_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_hsl_to_rgb, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04780:     """
 04781:     CONVERT HSL INTO RGB MODEL
 04782: 
 04783:     The array can be used when the hsl to rgb is extensively used
 04784: 
 04785:     All the values will be stored into an array shape (r, g, b, 3) type float
 04786:     :return: Numpy.ndarray shape (r, g, b, 3) type float
 04787:     """
+04788:     cdef unsigned char [:, :, :, ::1] hsl_to_rgb = numpy.empty((256, 256, 256, 3), uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  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 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_tuple__25, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4788, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_tuple__25, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4788, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4788, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_tuple__25);
    __Pyx_GIVEREF(__pyx_tuple__25);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_tuple__25);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4788, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_d_d_dc_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 4788, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_hsl_to_rgb = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
 04789:     cdef rgb rgb_
 04790:     cdef int r, g, b
 04791:     cdef int h, s, l
 04792: 
+04793:     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:;
      }
  }
+04794:         for h in prange(0, 256, schedule='static', num_threads=THREADS):
        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_9 = (0x100 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_h) lastprivate(__pyx_v_h) lastprivate(__pyx_v_l) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) schedule(static)
/* … */
        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_9 = (0x100 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_h) lastprivate(__pyx_v_h) lastprivate(__pyx_v_l) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_h = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_l = ((int)0xbad0bad0);
                            __pyx_v_s = ((int)0xbad0bad0);
+04795:             for s in range(0, 256):
                            /* "PygameShader/shader.pyx":4795
 *     with nogil:
 *         for h in prange(0, 256, schedule='static', num_threads=THREADS):
 *             for s in range(0, 256):             # <<<<<<<<<<<<<<
 *                 for l in range(0, 256):
 *                     rgb_ = struct_hsl_to_rgb(h * <float>ONE_255, s *
 */
                            for (__pyx_t_5 = 0; __pyx_t_5 < 0x100; __pyx_t_5+=1) {
                              __pyx_v_s = __pyx_t_5;
+04796:                 for l in range(0, 256):
                              for (__pyx_t_10 = 0; __pyx_t_10 < 0x100; __pyx_t_10+=1) {
                                __pyx_v_l = __pyx_t_10;
+04797:                     rgb_ = struct_hsl_to_rgb(h * <float>ONE_255, s *
                                __pyx_v_rgb_ = struct_hsl_to_rgb((__pyx_v_h * ((float)0.00392156862745098)), (__pyx_v_s * ((float)0.00392156862745098)), (__pyx_v_l * ((float)0.00392156862745098)));
 04798:                                              <float>ONE_255, l * <float>ONE_255)
+04799:                     hsl_to_rgb[h, s, l, 0] =\
                                __pyx_t_14 = __pyx_v_h;
                                __pyx_t_15 = __pyx_v_s;
                                __pyx_t_16 = __pyx_v_l;
                                __pyx_t_17 = 0;
                                *((unsigned char *) ( /* dim=3 */ ((char *) (((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_hsl_to_rgb.data + __pyx_t_14 * __pyx_v_hsl_to_rgb.strides[0]) ) + __pyx_t_15 * __pyx_v_hsl_to_rgb.strides[1]) ) + __pyx_t_16 * __pyx_v_hsl_to_rgb.strides[2]) )) + __pyx_t_17)) )) = __pyx_t_13;
+04800:                         min(<unsigned char> (rgb_.r * <float>255.0), <unsigned char>255)
                                __pyx_t_11 = ((unsigned char)0xFF);
                                __pyx_t_12 = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
                                if (((__pyx_t_11 < __pyx_t_12) != 0)) {
                                  __pyx_t_13 = __pyx_t_11;
                                } else {
                                  __pyx_t_13 = __pyx_t_12;
                                }
+04801:                     hsl_to_rgb[h, s, l, 1] = \
                                __pyx_t_17 = __pyx_v_h;
                                __pyx_t_16 = __pyx_v_s;
                                __pyx_t_15 = __pyx_v_l;
                                __pyx_t_14 = 1;
                                *((unsigned char *) ( /* dim=3 */ ((char *) (((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_hsl_to_rgb.data + __pyx_t_17 * __pyx_v_hsl_to_rgb.strides[0]) ) + __pyx_t_16 * __pyx_v_hsl_to_rgb.strides[1]) ) + __pyx_t_15 * __pyx_v_hsl_to_rgb.strides[2]) )) + __pyx_t_14)) )) = __pyx_t_12;
+04802:                         min(<unsigned char> (rgb_.g * <float>255.0), <unsigned char>255)
                                __pyx_t_13 = ((unsigned char)0xFF);
                                __pyx_t_11 = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
                                if (((__pyx_t_13 < __pyx_t_11) != 0)) {
                                  __pyx_t_12 = __pyx_t_13;
                                } else {
                                  __pyx_t_12 = __pyx_t_11;
                                }
+04803:                     hsl_to_rgb[h, s, l, 2] = \
                                __pyx_t_14 = __pyx_v_h;
                                __pyx_t_15 = __pyx_v_s;
                                __pyx_t_16 = __pyx_v_l;
                                __pyx_t_17 = 2;
                                *((unsigned char *) ( /* dim=3 */ ((char *) (((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_hsl_to_rgb.data + __pyx_t_14 * __pyx_v_hsl_to_rgb.strides[0]) ) + __pyx_t_15 * __pyx_v_hsl_to_rgb.strides[1]) ) + __pyx_t_16 * __pyx_v_hsl_to_rgb.strides[2]) )) + __pyx_t_17)) )) = __pyx_t_11;
                              }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+04804:                         min(<unsigned char> (rgb_.b * <float>255.0), <unsigned char>255)
                                __pyx_t_12 = ((unsigned char)0xFF);
                                __pyx_t_13 = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.0)));
                                if (((__pyx_t_12 < __pyx_t_13) != 0)) {
                                  __pyx_t_11 = __pyx_t_12;
                                } else {
                                  __pyx_t_11 = __pyx_t_13;
                                }
 04805: 
+04806:     return asarray(hsl_to_rgb, dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_hsl_to_rgb, 4, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 4806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 4806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 4806, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 4806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_d_d_dc_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 4806, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
  goto __pyx_L0;
 04807: 
 04808: @cython.binding(False)
 04809: @cython.binding(False)
 04810: @cython.boundscheck(False)
 04811: @cython.wraparound(False)
 04812: @cython.nonecheck(False)
 04813: @cython.cdivision(True)
 04814: @cython.profile(False)
+04815: cdef inline void shader_hsl_surface24bit_inplace_c(unsigned char [:, :, :] rgb_array, float shift_):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_hsl_surface24bit_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array, float __pyx_v_shift_) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  struct hsl __pyx_v_hsl_;
  struct rgb __pyx_v_rgb_;
  float __pyx_v_h_;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_hsl_surface24bit_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 04816: 
 04817:     """
 04818:     ROTATE THE HUE OF THE GAME DISPLAY OR GIVEN TEXTURE
 04819: 
 04820:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04821:     please refer to pygame function pixels3d or array3d to convert an image into a
 04822:     3d array (library surfarray)
 04823: 
 04824:     e.g:
 04825:     hsl(surface, 0.2)
 04826: 
 04827:     :param rgb_array    : numpy.ndarray of shape(w, h, 3) of unsigned char, rgb values
 04828:     :param shift_       : float; Hue value in range [-1.0 ... 1.0]
 04829:     :return             : void
 04830:     """
 04831: 
 04832:     cdef Py_ssize_t w, h
+04833:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 04834: 
 04835:     cdef:
+04836:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 04837:         hsl hsl_
 04838:         rgb rgb_
 04839:         float h_
 04840:         unsigned char *r
 04841:         unsigned char *g
 04842:         unsigned char *b
 04843: 
 04844: 
+04845:     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:;
      }
  }
+04846:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_h_) lastprivate(__pyx_v_hsl_) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_h_) lastprivate(__pyx_v_hsl_) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_h_ = ((float)__PYX_NAN());
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
+04847:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+04848:                 r = &rgb_array[i, j, 0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+04849:                 g = &rgb_array[i, j, 1]
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_10 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[2]) ))));
+04850:                 b = &rgb_array[i, j, 2]
                              /* "PygameShader/shader.pyx":4850
 *                 r = &rgb_array[i, j, 0]
 *                 g = &rgb_array[i, j, 1]
 *                 b = &rgb_array[i, j, 2]             # <<<<<<<<<<<<<<
 *                 hsl_ = struct_rgb_to_hsl(
 *                     r[0] * <float>ONE_255, g[0] *
 */
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+04851:                 hsl_ = struct_rgb_to_hsl(
                              __pyx_v_hsl_ = struct_rgb_to_hsl(((__pyx_v_r[0]) * ((float)0.00392156862745098)), ((__pyx_v_g[0]) * ((float)0.00392156862745098)), ((__pyx_v_b[0]) * ((float)0.00392156862745098)));
 04852:                     r[0] * <float>ONE_255, g[0] *
 04853:                     <float>ONE_255, b[0] * <float>ONE_255)
 04854: 
 04855:                 #h_ = min((hsl_.h + shift_), 1.0)
 04856:                 #h_ = max(h_, 0.0)
+04857:                 h_ = hsl_.h + shift_
                              __pyx_v_h_ = (__pyx_v_hsl_.h + __pyx_v_shift_);
+04858:                 rgb_ = struct_hsl_to_rgb(h_, hsl_.s, hsl_.l)
                              __pyx_v_rgb_ = struct_hsl_to_rgb(__pyx_v_h_, __pyx_v_hsl_.s, __pyx_v_hsl_.l);
 04859: 
+04860:                 r[0] = <unsigned char>(rgb_.r * <float>255.0)
                              (__pyx_v_r[0]) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+04861:                 g[0] = <unsigned char>(rgb_.g * <float>255.0)
                              (__pyx_v_g[0]) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+04862:                 b[0] = <unsigned char>(rgb_.b * <float>255.0)
                              (__pyx_v_b[0]) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.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
      }
 04863: 
 04864: 
 04865: 
 04866: @cython.binding(False)
 04867: @cython.binding(False)
 04868: @cython.boundscheck(False)
 04869: @cython.wraparound(False)
 04870: @cython.nonecheck(False)
 04871: @cython.cdivision(True)
 04872: @cython.profile(False)
+04873: cdef inline void shader_hsl_surface24bit_fast_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_hsl_surface24bit_fast_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array, float __pyx_v_shift_, __Pyx_memviewslice __pyx_v_hsl_model_, __Pyx_memviewslice __pyx_v_rgb_model_) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_h_;
  unsigned char __pyx_v_h__;
  unsigned char __pyx_v_s__;
  unsigned char __pyx_v_l__;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_hsl_surface24bit_fast_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 04874:         unsigned char [:, :, :] rgb_array,
 04875:         float shift_,
 04876:         float [:, :, :, ::1] hsl_model_,
 04877:         unsigned char [:, :, :, ::1] rgb_model_):
 04878: 
 04879:     """
 04880:     ROTATE THE HUE OF AN IMAGE USING STORED HSL TO RGB AND RGB TO HSL VALUES
 04881: 
 04882:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04883:     please refer to pygame function pixels3d or array3d to convert an image into a
 04884:     3d array (library surfarray)
 04885: 
 04886:     e.g:
 04887:     hsl(surface, 0.2, hsl_model, rgb_model)
 04888: 
 04889:     :param rgb_array    : numpy.ndarray of shape(w, h, 3) of unsigned char, rgb values
 04890:     :param shift_       : float; Hue value in range [-1.0 ... 1.0]
 04891:     :param hsl_model_   : numpy.ndarray shape (r, g, b, 3) of hsl values r, g & b
 04892:     in range [0 ... 255]
 04893:     :param rgb_model_   : numpy.ndarray shape (h, s, l, 3) of hsl values h, s & l
 04894:     in range [0.0 ... 1.0]
 04895:     :return: void
 04896:     """
 04897: 
 04898: 
 04899: 
 04900:     cdef Py_ssize_t w, h
+04901:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 04902: 
 04903:     cdef:
+04904:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 04905: 
 04906:         float h_
 04907:         unsigned char h__, s__, l__
 04908: 
 04909:         unsigned char *r
 04910:         unsigned char *g
 04911:         unsigned char *b
 04912: 
 04913: 
+04914:     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:;
      }
  }
+04915:         for j in prange(h, schedule='dynamic', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_h_) lastprivate(__pyx_v_h__) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_l__) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s__) schedule(dynamic)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_h_) lastprivate(__pyx_v_h__) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_l__) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s__) schedule(dynamic) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_h_ = ((float)__PYX_NAN());
                            __pyx_v_h__ = ((unsigned char)'?');
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_l__ = ((unsigned char)'?');
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_s__ = ((unsigned char)'?');
+04916:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
 04917: 
+04918:                 r = &rgb_array[i, j, 0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+04919:                 g = &rgb_array[i, j, 1]
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_10 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[2]) ))));
+04920:                 b = &rgb_array[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
 04921: 
+04922:                 h_ = hsl_model_[r[0], g[0], b[0], 0]
                              __pyx_t_11 = (__pyx_v_r[0]);
                              __pyx_t_12 = (__pyx_v_g[0]);
                              __pyx_t_13 = (__pyx_v_b[0]);
                              __pyx_t_10 = 0;
                              __pyx_v_h_ = (*((float *) ( /* dim=3 */ ((char *) (((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_hsl_model_.data + __pyx_t_11 * __pyx_v_hsl_model_.strides[0]) ) + __pyx_t_12 * __pyx_v_hsl_model_.strides[1]) ) + __pyx_t_13 * __pyx_v_hsl_model_.strides[2]) )) + __pyx_t_10)) )));
 04923: 
+04924:                 h__ = <unsigned char> (<float>min((h_ * ONE_255 + shift_), <float>1.0) * <float>255.0)
                              __pyx_t_14 = ((float)1.0);
                              __pyx_t_15 = ((__pyx_v_h_ * 0.00392156862745098) + __pyx_v_shift_);
                              if (((__pyx_t_14 < __pyx_t_15) != 0)) {
                                __pyx_t_16 = __pyx_t_14;
                              } else {
                                __pyx_t_16 = __pyx_t_15;
                              }
                              __pyx_v_h__ = ((unsigned char)(((float)__pyx_t_16) * ((float)255.0)));
 04925: 
+04926:                 s__ = <unsigned char> hsl_model_[r[0], g[0], b[0], 1]
                              __pyx_t_13 = (__pyx_v_r[0]);
                              __pyx_t_12 = (__pyx_v_g[0]);
                              __pyx_t_11 = (__pyx_v_b[0]);
                              __pyx_t_10 = 1;
                              __pyx_v_s__ = ((unsigned char)(*((float *) ( /* dim=3 */ ((char *) (((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_hsl_model_.data + __pyx_t_13 * __pyx_v_hsl_model_.strides[0]) ) + __pyx_t_12 * __pyx_v_hsl_model_.strides[1]) ) + __pyx_t_11 * __pyx_v_hsl_model_.strides[2]) )) + __pyx_t_10)) ))));
+04927:                 l__ = <unsigned char> hsl_model_[r[0], g[0], b[0], 2]
                              __pyx_t_11 = (__pyx_v_r[0]);
                              __pyx_t_12 = (__pyx_v_g[0]);
                              __pyx_t_13 = (__pyx_v_b[0]);
                              __pyx_t_10 = 2;
                              __pyx_v_l__ = ((unsigned char)(*((float *) ( /* dim=3 */ ((char *) (((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_hsl_model_.data + __pyx_t_11 * __pyx_v_hsl_model_.strides[0]) ) + __pyx_t_12 * __pyx_v_hsl_model_.strides[1]) ) + __pyx_t_13 * __pyx_v_hsl_model_.strides[2]) )) + __pyx_t_10)) ))));
 04928: 
+04929:                 r[0] = (&rgb_model_[h__, s__, l__, 0])[0]
                              __pyx_t_13 = __pyx_v_h__;
                              __pyx_t_12 = __pyx_v_s__;
                              __pyx_t_11 = __pyx_v_l__;
                              __pyx_t_10 = 0;
                              (__pyx_v_r[0]) = ((&(*((unsigned char *) ( /* dim=3 */ ((char *) (((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_model_.data + __pyx_t_13 * __pyx_v_rgb_model_.strides[0]) ) + __pyx_t_12 * __pyx_v_rgb_model_.strides[1]) ) + __pyx_t_11 * __pyx_v_rgb_model_.strides[2]) )) + __pyx_t_10)) ))))[0]);
+04930:                 g[0] = (&rgb_model_[h__, s__, l__, 1])[0]
                              __pyx_t_11 = __pyx_v_h__;
                              __pyx_t_12 = __pyx_v_s__;
                              __pyx_t_13 = __pyx_v_l__;
                              __pyx_t_10 = 1;
                              (__pyx_v_g[0]) = ((&(*((unsigned char *) ( /* dim=3 */ ((char *) (((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_model_.data + __pyx_t_11 * __pyx_v_rgb_model_.strides[0]) ) + __pyx_t_12 * __pyx_v_rgb_model_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_model_.strides[2]) )) + __pyx_t_10)) ))))[0]);
+04931:                 b[0] = (&rgb_model_[h__, s__, l__, 2])[0]
                              __pyx_t_13 = __pyx_v_h__;
                              __pyx_t_12 = __pyx_v_s__;
                              __pyx_t_11 = __pyx_v_l__;
                              __pyx_t_10 = 2;
                              (__pyx_v_b[0]) = ((&(*((unsigned char *) ( /* dim=3 */ ((char *) (((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_model_.data + __pyx_t_13 * __pyx_v_rgb_model_.strides[0]) ) + __pyx_t_12 * __pyx_v_rgb_model_.strides[1]) ) + __pyx_t_11 * __pyx_v_rgb_model_.strides[2]) )) + __pyx_t_10)) ))))[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
      }
 04932: 
 04933: 
 04934: 
 04935: @cython.binding(False)
 04936: @cython.binding(False)
 04937: @cython.boundscheck(False)
 04938: @cython.wraparound(False)
 04939: @cython.nonecheck(False)
 04940: @cython.cdivision(True)
 04941: @cython.profile(False)
+04942: cdef inline void shader_brightness24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_brightness24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_shader_brightness24_inplace_c *__pyx_optional_args) {
  float __pyx_v_shift_ = ((float)0.0);
  Py_ssize_t __pyx_v_width;
  CYTHON_UNUSED Py_ssize_t __pyx_v_height;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  float __pyx_v_l;
  struct hsl __pyx_v_hsl_;
  struct rgb __pyx_v_rgb_;
  CYTHON_UNUSED int __pyx_v_exclude_color;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_brightness24_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_shift_ = __pyx_optional_args->shift_;
    }
  }
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_brightness24_inplace_c {
  int __pyx_n;
  float shift_;
};
 04943:         unsigned char [:, :, :] rgb_array_, float shift_=0):
 04944:     """
 04945:     SHADER BRIGHTNESS
 04946: 
 04947:     This shader control the pygame display brightness level
 04948:     It uses two external functions coded in C, struct_rgb_to_hsl & struct_hsl_to_rgb
 04949: 
 04950:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 04951:     please refer to pygame function pixels3d or array3d to convert an image into
 04952:     a 3d array (library surfarray)
 04953: 
 04954:     e.g:
 04955:     brightness(surface, 0.2)
 04956: 
 04957:     :param rgb_array_: numpy ndarray shape (w, h, 3) containing RGB pixels values
 04958:     :param shift_    : float; values in range [-1.0 ... 1.0], 0 no change,
 04959:     -1 lowest brightness, +1 highest brightness
 04960:     :return          : void
 04961:     """
 04962: 
 04963:     cdef Py_ssize_t width, height
+04964:     width, height = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_width = __pyx_t_2;
  __pyx_v_height = __pyx_t_3;
 04965: 
 04966:     cdef:
+04967:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 04968:         unsigned char *r
 04969:         unsigned char *g
 04970:         unsigned char *b
 04971:         float l, h, s
 04972:         hsl hsl_
 04973:         rgb rgb_
 04974:         float high, low, high_
 04975:         unsigned char exclude_r, exclude_g, exclude_b
+04976:         bint exclude_color = False
  __pyx_v_exclude_color = 0;
 04977: 
+04978:     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:;
      }
  }
+04979:         for j in prange(height, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_l) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) schedule(static)
/* … */
        __pyx_t_3 = __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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_l) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* 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_l = ((float)__PYX_NAN());
                            __pyx_v_r = ((unsigned char *)1);
+04980:             for i in range(width):
                            __pyx_t_5 = __pyx_v_width;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
 04981: 
+04982:                 r, g, b = &rgb_array_[i, j, 0], &rgb_array_[i, j, 1], &rgb_array_[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_t_11 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_8 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) ))));
                              __pyx_t_12 = __pyx_v_i;
                              __pyx_t_13 = __pyx_v_j;
                              __pyx_t_14 = 1;
                              __pyx_t_15 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[2]) ))));
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 2;
                              __pyx_t_19 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_rgb_array_.strides[2]) ))));
                              __pyx_v_r = __pyx_t_11;
                              __pyx_v_g = __pyx_t_15;
                              __pyx_v_b = __pyx_t_19;
 04983: 
+04984:                 hsl_ = struct_rgb_to_hsl(
                              __pyx_v_hsl_ = struct_rgb_to_hsl(((__pyx_v_r[0]) * ((float)0.00392156862745098)), ((__pyx_v_g[0]) * ((float)0.00392156862745098)), ((__pyx_v_b[0]) * ((float)0.00392156862745098)));
 04985:                     r[0] * <float>ONE_255, g[0] *
 04986:                     <float>ONE_255, b[0] * <float>ONE_255)
 04987: 
+04988:                 l = min((hsl_.l + shift_), <float>1.0)
                              __pyx_t_20 = ((float)1.0);
                              __pyx_t_21 = (__pyx_v_hsl_.l + __pyx_v_shift_);
                              if (((__pyx_t_20 < __pyx_t_21) != 0)) {
                                __pyx_t_22 = __pyx_t_20;
                              } else {
                                __pyx_t_22 = __pyx_t_21;
                              }
                              __pyx_v_l = __pyx_t_22;
+04989:                 l = max(l, <float>0.0)
                              __pyx_t_22 = ((float)0.0);
                              __pyx_t_20 = __pyx_v_l;
                              if (((__pyx_t_22 > __pyx_t_20) != 0)) {
                                __pyx_t_21 = __pyx_t_22;
                              } else {
                                __pyx_t_21 = __pyx_t_20;
                              }
                              __pyx_v_l = __pyx_t_21;
 04990: 
+04991:                 rgb_ = struct_hsl_to_rgb(hsl_.h, hsl_.s, l)
                              __pyx_v_rgb_ = struct_hsl_to_rgb(__pyx_v_hsl_.h, __pyx_v_hsl_.s, __pyx_v_l);
 04992: 
+04993:                 r[0] = <unsigned char> (rgb_.r * <float>255.0)
                              (__pyx_v_r[0]) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+04994:                 g[0] = <unsigned char> (rgb_.g * <float>255.0)
                              (__pyx_v_g[0]) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+04995:                 b[0] = <unsigned char> (rgb_.b * <float>255.0)
                              (__pyx_v_b[0]) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.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
      }
 04996: 
 04997: 
 04998: # TODO CHECK WHY NOT PRANGE
 04999: @cython.binding(False)
 05000: @cython.binding(False)
 05001: @cython.boundscheck(False)
 05002: @cython.wraparound(False)
 05003: @cython.nonecheck(False)
 05004: @cython.cdivision(True)
 05005: @cython.profile(False)
+05006: cdef inline void shader_brightness24_exclude_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_brightness24_exclude_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_shader_brightness24_exclude_inplace_c *__pyx_optional_args) {
  float __pyx_v_shift_ = ((float)0.0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_brightness24_exclude_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_brightness24_exclude_inplace_c {
  int __pyx_n;
  float shift_;
  PyObject *color_;
};
+05007:         unsigned char [:, :, :] rgb_array_, float shift_=0.0, color_=(0, 0, 0)):
  PyObject *__pyx_v_color_ = ((PyObject *)__pyx_tuple__9);
  Py_ssize_t __pyx_v_width;
  Py_ssize_t __pyx_v_height;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char __pyx_v_r;
  unsigned char __pyx_v_g;
  unsigned char __pyx_v_b;
  float __pyx_v_l;
  struct hsl __pyx_v_hsl_;
  struct rgb __pyx_v_rgb_;
  unsigned char __pyx_v_rr;
  unsigned char __pyx_v_gg;
  unsigned char __pyx_v_bb;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_brightness24_exclude_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_shift_ = __pyx_optional_args->shift_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_color_ = __pyx_optional_args->color_;
      }
    }
  }
 05008:     """
 05009:     SHADER BRIGHTNESS (EXCLUDE A SPECIFIC COLOR FROM THE PROCESS, DEFAULT BLACK COLOR)
 05010: 
 05011:     This shader control the pygame display brightness level
 05012:     It uses two external functions coded in C, struct_rgb_to_hsl & struct_hsl_to_rgb
 05013: 
 05014:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 05015:      please refer to pygame function pixels3d or array3d to convert an image into a
 05016:      3d array (library surfarray)
 05017: 
 05018:     e.g:
 05019:     brightness_exclude(surface, 0.2)
 05020: 
 05021:     :param rgb_array_: numpy ndarray shape (w, h, 3) containing RGB pixels values
 05022:     :param shift_    : float; values in range [-1.0 ... 1.0], 0 no change,
 05023:     -1 lowest brightness, +1 highest brightness
 05024:     :param color_    : tuple; Color to exclude from the brightness process
 05025:     :return          : void
 05026:     """
 05027: 
 05028:     cdef Py_ssize_t width, height
+05029:     width, height = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_width = __pyx_t_2;
  __pyx_v_height = __pyx_t_3;
 05030: 
 05031:     cdef:
+05032:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 05033:         unsigned char r
 05034:         unsigned char g
 05035:         unsigned char b
 05036:         float l, h, s
 05037:         hsl hsl_
 05038:         rgb rgb_
 05039:         float high, low, high_
+05040:         unsigned char rr=color_[0], gg=color_[1], bb=color_[2]
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_color_, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_As_unsigned_char(__pyx_t_4); if (unlikely((__pyx_t_5 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 5040, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_rr = __pyx_t_5;
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_color_, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_As_unsigned_char(__pyx_t_4); if (unlikely((__pyx_t_5 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 5040, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_gg = __pyx_t_5;
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_color_, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_As_unsigned_char(__pyx_t_4); if (unlikely((__pyx_t_5 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 5040, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_bb = __pyx_t_5;
 05041: 
+05042:     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:;
      }
  }
+05043:         for j in range(height): #, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_height;
        __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;
+05044:             for i in range(width):
          __pyx_t_7 = __pyx_v_width;
          __pyx_t_8 = __pyx_t_7;
          for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
            __pyx_v_i = __pyx_t_9;
 05045: 
+05046:                 r, g, b = rgb_array_[i, j, 0], rgb_array_[i, j, 1], rgb_array_[i, j, 2]
            __pyx_t_10 = __pyx_v_i;
            __pyx_t_11 = __pyx_v_j;
            __pyx_t_12 = 0;
            __pyx_t_5 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )));
            __pyx_t_12 = __pyx_v_i;
            __pyx_t_11 = __pyx_v_j;
            __pyx_t_10 = 1;
            __pyx_t_13 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )));
            __pyx_t_10 = __pyx_v_i;
            __pyx_t_11 = __pyx_v_j;
            __pyx_t_12 = 2;
            __pyx_t_14 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )));
            __pyx_v_r = __pyx_t_5;
            __pyx_v_g = __pyx_t_13;
            __pyx_v_b = __pyx_t_14;
 05047: 
+05048:                 if not ((r==rr) and (g==gg) and (b==bb)):
            __pyx_t_16 = ((__pyx_v_r == __pyx_v_rr) != 0);
            if (__pyx_t_16) {
            } else {
              __pyx_t_15 = __pyx_t_16;
              goto __pyx_L11_bool_binop_done;
            }
            __pyx_t_16 = ((__pyx_v_g == __pyx_v_gg) != 0);
            if (__pyx_t_16) {
            } else {
              __pyx_t_15 = __pyx_t_16;
              goto __pyx_L11_bool_binop_done;
            }
            __pyx_t_16 = ((__pyx_v_b == __pyx_v_bb) != 0);
            __pyx_t_15 = __pyx_t_16;
            __pyx_L11_bool_binop_done:;
            __pyx_t_16 = ((!__pyx_t_15) != 0);
            if (__pyx_t_16) {
/* … */
            }
          }
        }
      }
 05049: 
+05050:                     hsl_ = struct_rgb_to_hsl(
              __pyx_v_hsl_ = struct_rgb_to_hsl((__pyx_v_r * ((float)0.00392156862745098)), (__pyx_v_g * ((float)0.00392156862745098)), (__pyx_v_b * ((float)0.00392156862745098)));
 05051:                         r * <float>ONE_255, g * <float>ONE_255, b * <float>ONE_255)
 05052: 
+05053:                     l = min((hsl_.l + shift_), <float>1.0)
              __pyx_t_17 = ((float)1.0);
              __pyx_t_18 = (__pyx_v_hsl_.l + __pyx_v_shift_);
              if (((__pyx_t_17 < __pyx_t_18) != 0)) {
                __pyx_t_19 = __pyx_t_17;
              } else {
                __pyx_t_19 = __pyx_t_18;
              }
              __pyx_v_l = __pyx_t_19;
+05054:                     l = max(l, <float>0.0)
              __pyx_t_19 = ((float)0.0);
              __pyx_t_17 = __pyx_v_l;
              if (((__pyx_t_19 > __pyx_t_17) != 0)) {
                __pyx_t_18 = __pyx_t_19;
              } else {
                __pyx_t_18 = __pyx_t_17;
              }
              __pyx_v_l = __pyx_t_18;
 05055: 
+05056:                     rgb_ = struct_hsl_to_rgb(hsl_.h, hsl_.s, l)
              __pyx_v_rgb_ = struct_hsl_to_rgb(__pyx_v_hsl_.h, __pyx_v_hsl_.s, __pyx_v_l);
 05057: 
+05058:                     rgb_array_[i, j, 0] = <unsigned char> (rgb_.r * <float>255.0)
              __pyx_t_12 = __pyx_v_i;
              __pyx_t_11 = __pyx_v_j;
              __pyx_t_10 = 0;
              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+05059:                     rgb_array_[i, j, 1] = <unsigned char> (rgb_.g * <float>255.0)
              __pyx_t_10 = __pyx_v_i;
              __pyx_t_11 = __pyx_v_j;
              __pyx_t_12 = 1;
              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+05060:                     rgb_array_[i, j, 2] = <unsigned char> (rgb_.b * <float>255.0)
              __pyx_t_12 = __pyx_v_i;
              __pyx_t_11 = __pyx_v_j;
              __pyx_t_10 = 2;
              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.0)));
 05061: 
 05062: 
 05063: 
 05064: @cython.binding(False)
 05065: @cython.binding(False)
 05066: @cython.boundscheck(False)
 05067: @cython.wraparound(False)
 05068: @cython.nonecheck(False)
 05069: @cython.cdivision(True)
 05070: @cython.profile(False)
+05071: cdef inline void shader_brightness24_bpf_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_brightness24_bpf_c(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_shader_brightness24_bpf_c *__pyx_optional_args) {
  float __pyx_v_shift_ = ((float)0.0);
  unsigned char __pyx_v_bpf_treshold_ = ((unsigned char)64);
  Py_ssize_t __pyx_v_width;
  CYTHON_UNUSED Py_ssize_t __pyx_v_height;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char __pyx_v_r;
  unsigned char __pyx_v_g;
  unsigned char __pyx_v_b;
  float __pyx_v_l;
  struct hsl __pyx_v_hsl_;
  struct rgb __pyx_v_rgb_;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_brightness24_bpf_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_shift_ = __pyx_optional_args->shift_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_bpf_treshold_ = __pyx_optional_args->bpf_treshold_;
      }
    }
  }
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_brightness24_bpf_c {
  int __pyx_n;
  float shift_;
  unsigned char bpf_treshold_;
};
 05072:         unsigned char [:, :, :] rgb_array_,
 05073:         float shift_=0.0,
 05074:         unsigned char bpf_treshold_=64):
 05075:     """
 05076: 
 05077:     :param rgb_array_: numpy ndarray shape (w, h, 3) containing RGB pixels values
 05078:     :param shift_    : float; values in range [-1.0 ... 1.0], 0 no change,
 05079:     -1 lowest brightness, +1 highest brightness
 05080:     :param bpf_treshold_ : integer; Bright pass filter threshold value
 05081:     :return          : void
 05082:     """
 05083: 
 05084: 
 05085:     cdef Py_ssize_t width, height
+05086:     width, height = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_width = __pyx_t_2;
  __pyx_v_height = __pyx_t_3;
 05087: 
 05088:     cdef:
+05089:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 05090:         unsigned char r
 05091:         unsigned char g
 05092:         unsigned char b
 05093:         float l, h, s
 05094:         hsl hsl_
 05095:         rgb rgb_
 05096:         float high, low, high_
 05097: 
 05098: 
+05099:     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:;
      }
  }
+05100:         for j in prange(height, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_l) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) schedule(static)
/* … */
        __pyx_t_3 = __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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_l) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char)'?');
                            __pyx_v_g = ((unsigned char)'?');
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_l = ((float)__PYX_NAN());
                            __pyx_v_r = ((unsigned char)'?');
+05101:             for i in range(width):
                            __pyx_t_5 = __pyx_v_width;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
 05102: 
+05103:                 r, g, b = rgb_array_[i, j, 0], rgb_array_[i, j, 1], rgb_array_[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_t_11 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_8 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )));
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 1;
                              __pyx_t_12 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array_.strides[2]) )));
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 2;
                              __pyx_t_13 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_8 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )));
                              __pyx_v_r = __pyx_t_11;
                              __pyx_v_g = __pyx_t_12;
                              __pyx_v_b = __pyx_t_13;
 05104: 
+05105:                 if r + g + b < bpf_treshold_:
                              __pyx_t_14 = ((((__pyx_v_r + __pyx_v_g) + __pyx_v_b) < __pyx_v_bpf_treshold_) != 0);
                              if (__pyx_t_14) {
/* … */
                              }
+05106:                     continue
                                goto __pyx_L10_continue;
 05107: 
+05108:                 hsl_ = struct_rgb_to_hsl(
                              __pyx_v_hsl_ = struct_rgb_to_hsl((__pyx_v_r * ((float)0.00392156862745098)), (__pyx_v_g * ((float)0.00392156862745098)), (__pyx_v_b * ((float)0.00392156862745098)));
 05109:                     r * <float>ONE_255, g * <float>ONE_255, b * <float>ONE_255)
 05110: 
+05111:                 l = min((hsl_.l + shift_), <float>1.0)
                              __pyx_t_15 = ((float)1.0);
                              __pyx_t_16 = (__pyx_v_hsl_.l + __pyx_v_shift_);
                              if (((__pyx_t_15 < __pyx_t_16) != 0)) {
                                __pyx_t_17 = __pyx_t_15;
                              } else {
                                __pyx_t_17 = __pyx_t_16;
                              }
                              __pyx_v_l = __pyx_t_17;
+05112:                 l = max(l, <float>0.0)
                              __pyx_t_17 = ((float)0.0);
                              __pyx_t_15 = __pyx_v_l;
                              if (((__pyx_t_17 > __pyx_t_15) != 0)) {
                                __pyx_t_16 = __pyx_t_17;
                              } else {
                                __pyx_t_16 = __pyx_t_15;
                              }
                              __pyx_v_l = __pyx_t_16;
 05113: 
+05114:                 rgb_ = struct_hsl_to_rgb(hsl_.h, hsl_.s, l)
                              __pyx_v_rgb_ = struct_hsl_to_rgb(__pyx_v_hsl_.h, __pyx_v_hsl_.s, __pyx_v_l);
 05115: 
+05116:                 rgb_array_[i, j, 0] = <unsigned char> (rgb_.r * <float>255.0 )
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array_.strides[2]) )) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+05117:                 rgb_array_[i, j, 1] = <unsigned char> (rgb_.g * <float>255.0 )
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_8 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+05118:                 rgb_array_[i, j, 2] = <unsigned char> (rgb_.b * <float>255.0 )
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array_.strides[2]) )) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.0)));
                              __pyx_L10_continue:;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 05119: 
 05120: 
 05121: 
 05122: @cython.binding(False)
 05123: @cython.binding(False)
 05124: @cython.boundscheck(False)
 05125: @cython.wraparound(False)
 05126: @cython.nonecheck(False)
 05127: @cython.cdivision(True)
 05128: @cython.profile(False)
+05129: cdef inline void shader_brightness_24_inplace1_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_brightness_24_inplace1_c(__Pyx_memviewslice __pyx_v_rgb_array_, float __pyx_v_shift_, __Pyx_memviewslice __pyx_v_rgb_to_hsl_model) {
  CYTHON_UNUSED Py_ssize_t __pyx_v_width;
  Py_ssize_t __pyx_v_height;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  float __pyx_v_l;
  float __pyx_v_h;
  float __pyx_v_s;
  struct rgb __pyx_v_rgb_;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_brightness_24_inplace1_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 05130:         unsigned char [:, :, :] rgb_array_, float shift_, float [:, :, :, :] rgb_to_hsl_model):
 05131:     """
 05132:     SHADER BRIGHTNESS USING STORED RGB TO HSL VALUES (SLOWEST VERSION)
 05133: 
 05134:     This method is fetching all the HSL values from an array instead
 05135:     In theory this method should be faster than the direct calculation therefore the size of the
 05136:     array degrade the performance somehow.
 05137: 
 05138:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 05139:     please refer to pygame function pixels3d or array3d to convert an image into a
 05140:     3d array (library surfarray)
 05141: 
 05142:     e.g:
 05143:     brightness_model(surface, 0.2 rgb_to_hsl_model)
 05144: 
 05145:     :param rgb_array_      : numpy.ndarray containing RGB values array shapes (w, h, 3) uint8
 05146:     :param shift_          : float; value in range[-1.0 ... 1.0]
 05147:     :param rgb_to_hsl_model: Array shape (r, g, b, 3) containing all pre-calculated HSL values
 05148:     :return                : void
 05149:     """
 05150: 
 05151:     cdef Py_ssize_t width, height
+05152:     width, height = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_width = __pyx_t_2;
  __pyx_v_height = __pyx_t_3;
 05153: 
 05154:     cdef:
+05155:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 05156:         unsigned char *r
 05157:         unsigned char *g
 05158:         unsigned char *b
 05159:         float l, h, s
 05160: 
 05161:         rgb rgb_
 05162:         float high, low, high_
 05163: 
+05164:     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:;
      }
  }
 05165: 
+05166:         for i in prange(width, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_h) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_l) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) schedule(static)
/* … */
        __pyx_t_3 = __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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_h) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_l) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_h = ((float)__PYX_NAN());
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_l = ((float)__PYX_NAN());
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_s = ((float)__PYX_NAN());
+05167:             for j in range(height):
                            __pyx_t_5 = __pyx_v_height;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_j = __pyx_t_7;
 05168: 
+05169:                 r, g, b = &rgb_array_[i, j, 0], &rgb_array_[i, j, 1], &rgb_array_[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_t_11 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_8 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) ))));
                              __pyx_t_12 = __pyx_v_i;
                              __pyx_t_13 = __pyx_v_j;
                              __pyx_t_14 = 1;
                              __pyx_t_15 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[2]) ))));
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 2;
                              __pyx_t_19 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_rgb_array_.strides[2]) ))));
                              __pyx_v_r = __pyx_t_11;
                              __pyx_v_g = __pyx_t_15;
                              __pyx_v_b = __pyx_t_19;
 05170: 
+05171:                 h = rgb_to_hsl_model[r[0], g[0], b[0], 0]
                              __pyx_t_20 = (__pyx_v_r[0]);
                              __pyx_t_21 = (__pyx_v_g[0]);
                              __pyx_t_22 = (__pyx_v_b[0]);
                              __pyx_t_18 = 0;
                              __pyx_v_h = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_to_hsl_model.data + __pyx_t_20 * __pyx_v_rgb_to_hsl_model.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_to_hsl_model.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_to_hsl_model.strides[2]) ) + __pyx_t_18 * __pyx_v_rgb_to_hsl_model.strides[3]) )));
+05172:                 s = rgb_to_hsl_model[r[0], g[0], b[0], 1]
                              __pyx_t_22 = (__pyx_v_r[0]);
                              __pyx_t_21 = (__pyx_v_g[0]);
                              __pyx_t_20 = (__pyx_v_b[0]);
                              __pyx_t_18 = 1;
                              __pyx_v_s = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_to_hsl_model.data + __pyx_t_22 * __pyx_v_rgb_to_hsl_model.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_to_hsl_model.strides[1]) ) + __pyx_t_20 * __pyx_v_rgb_to_hsl_model.strides[2]) ) + __pyx_t_18 * __pyx_v_rgb_to_hsl_model.strides[3]) )));
+05173:                 l = rgb_to_hsl_model[r[0], g[0], b[0], 2]
                              __pyx_t_20 = (__pyx_v_r[0]);
                              __pyx_t_21 = (__pyx_v_g[0]);
                              __pyx_t_22 = (__pyx_v_b[0]);
                              __pyx_t_18 = 2;
                              __pyx_v_l = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_to_hsl_model.data + __pyx_t_20 * __pyx_v_rgb_to_hsl_model.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_to_hsl_model.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_to_hsl_model.strides[2]) ) + __pyx_t_18 * __pyx_v_rgb_to_hsl_model.strides[3]) )));
 05174: 
+05175:                 l = min((l + shift_), <float>1.0)
                              __pyx_t_23 = ((float)1.0);
                              __pyx_t_24 = (__pyx_v_l + __pyx_v_shift_);
                              if (((__pyx_t_23 < __pyx_t_24) != 0)) {
                                __pyx_t_25 = __pyx_t_23;
                              } else {
                                __pyx_t_25 = __pyx_t_24;
                              }
                              __pyx_v_l = __pyx_t_25;
+05176:                 l = max(l, <float>0.0)
                              __pyx_t_25 = ((float)0.0);
                              __pyx_t_23 = __pyx_v_l;
                              if (((__pyx_t_25 > __pyx_t_23) != 0)) {
                                __pyx_t_24 = __pyx_t_25;
                              } else {
                                __pyx_t_24 = __pyx_t_23;
                              }
                              __pyx_v_l = __pyx_t_24;
 05177: 
+05178:                 rgb_ = struct_hsl_to_rgb(h, s, l)
                              __pyx_v_rgb_ = struct_hsl_to_rgb(__pyx_v_h, __pyx_v_s, __pyx_v_l);
+05179:                 r[0] = <unsigned char> (rgb_.r * <float>255.0)
                              (__pyx_v_r[0]) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+05180:                 g[0] = <unsigned char> (rgb_.g * <float>255.0)
                              (__pyx_v_g[0]) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+05181:                 b[0] = <unsigned char> (rgb_.b * <float>255.0)
                              (__pyx_v_b[0]) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.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
      }
 05182: 
 05183: 
 05184: 
 05185: 
 05186: @cython.binding(False)
 05187: @cython.binding(False)
 05188: @cython.boundscheck(False)
 05189: @cython.wraparound(False)
 05190: @cython.nonecheck(False)
 05191: @cython.cdivision(True)
 05192: @cython.profile(False)
+05193: cdef inline void shader_saturation_array24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_saturation_array24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, float __pyx_v_shift_) {
  Py_ssize_t __pyx_v_width;
  CYTHON_UNUSED Py_ssize_t __pyx_v_height;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  float __pyx_v_s;
  struct hsl __pyx_v_hsl_;
  struct rgb __pyx_v_rgb_;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_saturation_array24_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("PygameShader.shader.shader_saturation_array24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 05194:         unsigned char [:, :, :] rgb_array_, float shift_):
 05195:     """
 05196:     SHADER SATURATION
 05197: 
 05198:     This shader control the saturation level of the pygame display or surface/texture
 05199: 
 05200:     The Array (rgb_array) must be a numpy array shape (w, h, 3)
 05201:     containing RGB pixels, please refer to pygame
 05202:     function pixels3d or array3d to convert an image into a 3d array (library surfarray)
 05203: 
 05204:     e.g:
 05205:     saturation(surface, 0.2)
 05206: 
 05207:     :param rgb_array_: numpy.ndarray shape (w, h, 3) containing RGB values uint8
 05208:     :param shift_    : float; value in range[-1.0...1.0], control the saturation level
 05209:     :return          : void
 05210:     """
 05211: 
+05212:     assert -1.0 <= shift_ <= 1.0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = (-1.0 <= __pyx_v_shift_);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_shift_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_shift_must_be_in_range);
      __PYX_ERR(1, 5212, __pyx_L1_error)
    }
  }
  #endif
 05213:         "Argument shift must be in range[-1.0 ... 1.0]"
 05214: 
 05215:     cdef Py_ssize_t width, height
+05216:     width, height = rgb_array_.shape[:2]
  __pyx_t_2 = __pyx_v_rgb_array_.shape;
  __pyx_t_3 = (__pyx_t_2[0]);
  __pyx_t_4 = (__pyx_t_2[1]);
  __pyx_v_width = __pyx_t_3;
  __pyx_v_height = __pyx_t_4;
 05217: 
 05218:     cdef:
+05219:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 05220:         unsigned char *r
 05221:         unsigned char *g
 05222:         unsigned char *b
 05223:         float s
 05224:         hsl hsl_
 05225:         rgb rgb_
 05226: 
 05227: 
+05228:     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:;
      }
  }
+05229:         for j in prange(height, schedule='static', num_threads=THREADS):
        __pyx_t_4 = __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_5 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) schedule(static)
/* … */
        __pyx_t_4 = __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_5 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_5; __pyx_t_3++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_3);
                            /* 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_r = ((unsigned char *)1);
                            __pyx_v_s = ((float)__PYX_NAN());
+05230:             for i in range(width):
                            __pyx_t_6 = __pyx_v_width;
                            __pyx_t_7 = __pyx_t_6;
                            for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
                              __pyx_v_i = __pyx_t_8;
+05231:                 r, g, b = &rgb_array_[i, j, 0], &rgb_array_[i, j, 1], &rgb_array_[i, j, 2]
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_10 = __pyx_v_j;
                              __pyx_t_11 = 0;
                              __pyx_t_12 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_9 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[2]) ))));
                              __pyx_t_13 = __pyx_v_i;
                              __pyx_t_14 = __pyx_v_j;
                              __pyx_t_15 = 1;
                              __pyx_t_16 = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
                              __pyx_t_17 = __pyx_v_i;
                              __pyx_t_18 = __pyx_v_j;
                              __pyx_t_19 = 2;
                              __pyx_t_20 = (&(*((unsigned char *) ( /* dim=2 */ (( /* 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_rgb_array_.strides[2]) ))));
                              __pyx_v_r = __pyx_t_12;
                              __pyx_v_g = __pyx_t_16;
                              __pyx_v_b = __pyx_t_20;
+05232:                 hsl_ = struct_rgb_to_hsl(<float>r[0] * <float>ONE_255,
                              __pyx_v_hsl_ = struct_rgb_to_hsl((((float)(__pyx_v_r[0])) * ((float)0.00392156862745098)), (((float)(__pyx_v_g[0])) * ((float)0.00392156862745098)), (((float)(__pyx_v_b[0])) * ((float)0.00392156862745098)));
 05233:                                          <float>g[0] * <float>ONE_255,
 05234:                                          <float>b[0] * <float>ONE_255)
 05235: 
+05236:                 s = min((hsl_.s + shift_), <float>0.5)
                              __pyx_t_21 = ((float)0.5);
                              __pyx_t_22 = (__pyx_v_hsl_.s + __pyx_v_shift_);
                              if (((__pyx_t_21 < __pyx_t_22) != 0)) {
                                __pyx_t_23 = __pyx_t_21;
                              } else {
                                __pyx_t_23 = __pyx_t_22;
                              }
                              __pyx_v_s = __pyx_t_23;
+05237:                 s = max(s, <float>0.0)
                              __pyx_t_23 = ((float)0.0);
                              __pyx_t_21 = __pyx_v_s;
                              if (((__pyx_t_23 > __pyx_t_21) != 0)) {
                                __pyx_t_22 = __pyx_t_23;
                              } else {
                                __pyx_t_22 = __pyx_t_21;
                              }
                              __pyx_v_s = __pyx_t_22;
+05238:                 rgb_ = struct_hsl_to_rgb(hsl_.h, s, hsl_.l)
                              __pyx_v_rgb_ = struct_hsl_to_rgb(__pyx_v_hsl_.h, __pyx_v_s, __pyx_v_hsl_.l);
+05239:                 r[0] = <unsigned char>(rgb_.r * <float>255.0)
                              (__pyx_v_r[0]) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+05240:                 g[0] = <unsigned char>(rgb_.g * <float>255.0)
                              (__pyx_v_g[0]) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+05241:                 b[0] = <unsigned char>(rgb_.b * <float>255.0)
                              (__pyx_v_b[0]) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.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
      }
 05242: 
 05243: 
 05244: 
 05245: 
 05246: 
 05247: @cython.binding(False)
 05248: @cython.binding(False)
 05249: @cython.boundscheck(False)
 05250: @cython.wraparound(False)
 05251: @cython.nonecheck(False)
 05252: @cython.cdivision(True)
 05253: @cython.profile(False)
 05254: # e.g
 05255: # heatwave_vertical(
 05256: #         surface_, numpy.full((w, h), 255, dtype=numpy.uint8),
 05257: #         b*random.uniform(55.0, 100), 0, sigma_=random.uniform(0.4, 1), mu_=b*2)
+05258: cdef inline void shader_heatwave24_vertical_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_heatwave24_vertical_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_mask, float __pyx_v_amplitude_, float __pyx_v_center_, float __pyx_v_sigma_, float __pyx_v_mu_) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb_array_copy = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_yy;
  int __pyx_v_h_1;
  __Pyx_memviewslice __pyx_v_f_gauss = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_heatwave24_vertical_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_heatwave24_vertical_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_copy, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_f_gauss, 1);
  __Pyx_RefNannyFinishContext();
}
 05259:         unsigned char [:, :, :] rgb_array_,
 05260:         unsigned char [:, :] mask,
 05261:         float amplitude_,
 05262:         float center_,
 05263:         float sigma_,
 05264:         float mu_):
 05265:     """
 05266:     APPLY A GAUSSIAN TRANSFORMATION TO AN ARRAY
 05267: 
 05268:     This effect can be use for simulate air turbulence or heat flow/convection
 05269: 
 05270:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels, please refer to pygame
 05271:     function pixels3d or array3d to convert an image into a 3d array (library surfarray)
 05272: 
 05273: 
 05274:     :param rgb_array_: numpy.ndarray shape (width, height, 3) uint8 containing RGB pixels
 05275:     :param mask      : numpy.ndarray shape (x, y) uint8, (values 255 or 0).
 05276:     Apply transformation to the original array
 05277:     if the value @(x, y) is 255 else remain unchanged.
 05278:     :param amplitude_: Control the maximum of the gaussian equation.
 05279:     No transformation if factor_ equal zero
 05280:     :param center_   : Control the center of the gaussian equation (if center_ equal zero,
 05281:      the Gauss equation is centered
 05282:     at x=0 and maximum is 0.4 with amplitude_ = 1.0)
 05283:     :param sigma_    : float; sigma value of the gauss equation
 05284:     :param mu_       : float; mu value of the gauss equation
 05285:     :return          : void
 05286:     """
 05287:     # TODO MASK
 05288: 
 05289:     cdef Py_ssize_t w, h
+05290:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 05291: 
 05292:     cdef:
+05293:         unsigned char [:, :, :] rgb_array_copy = numpy.array(rgb_array_, copy=False)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 5293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 5293, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 5293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_rgb_array_copy = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+05294:         int x = 0, y = 0
  __pyx_v_x = 0;
  __pyx_v_y = 0;
 05295:         int yy
+05296:         int h_1 = <int>h - 1
  __pyx_v_h_1 = (((int)__pyx_v_h) - 1);
 05297:         unsigned char *r
+05298:         float [::1] f_gauss = linspace(-4, 4, w, dtype=float32)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_linspace); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_int_neg_4);
  __Pyx_GIVEREF(__pyx_int_neg_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_neg_4);
  __Pyx_INCREF(__pyx_int_4);
  __Pyx_GIVEREF(__pyx_int_4);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 5298, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 5298, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_f_gauss = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 05299: 
 05300: 
+05301:     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:;
      }
  }
 05302: 
+05303:         for x in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_10 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_3 = __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_10 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_10; __pyx_t_2++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_yy = ((int)0xbad0bad0);
 05304: 
+05305:             for y in range(h):
                            __pyx_t_11 = __pyx_v_h;
                            __pyx_t_12 = __pyx_t_11;
                            for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
                              __pyx_v_y = __pyx_t_13;
 05306: 
+05307:                 yy =<int>(gauss(f_gauss[x], center_, sigma_, mu_) * amplitude_ + y)
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_16.__pyx_n = 2;
                              __pyx_t_16.sigma = __pyx_v_sigma_;
                              __pyx_t_16.mu = __pyx_v_mu_;
                              __pyx_t_15 = __pyx_f_12PygameShader_6shader_gauss((*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_f_gauss.data) + __pyx_t_14)) ))), __pyx_v_center_, &__pyx_t_16); 
                              __pyx_v_yy = ((int)((__pyx_t_15 * __pyx_v_amplitude_) + __pyx_v_y));
 05308: 
 05309:                 # printf("\n %i ", yy)
+05310:                 if yy > h_1:
                              __pyx_t_17 = ((__pyx_v_yy > __pyx_v_h_1) != 0);
                              if (__pyx_t_17) {
/* … */
                              }
+05311:                     yy = h_1
                                __pyx_v_yy = __pyx_v_h_1;
 05312: 
+05313:                 if yy < 0:
                              __pyx_t_17 = ((__pyx_v_yy < 0) != 0);
                              if (__pyx_t_17) {
/* … */
                              }
+05314:                     yy = 0
                                __pyx_v_yy = 0;
 05315: 
+05316:                 rgb_array_[x, y, 0] = rgb_array_copy[x, yy, 0]
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_18 = __pyx_v_yy;
                              __pyx_t_19 = 0;
                              __pyx_t_20 = __pyx_v_x;
                              __pyx_t_21 = __pyx_v_y;
                              __pyx_t_22 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_20 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_19 * __pyx_v_rgb_array_copy.strides[2]) )));
+05317:                 rgb_array_[x, y, 1] = rgb_array_copy[x, yy, 1]
                              __pyx_t_19 = __pyx_v_x;
                              __pyx_t_18 = __pyx_v_yy;
                              __pyx_t_14 = 1;
                              __pyx_t_22 = __pyx_v_x;
                              __pyx_t_21 = __pyx_v_y;
                              __pyx_t_20 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_22 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_19 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[2]) )));
+05318:                 rgb_array_[x, y, 2] = rgb_array_copy[x, yy, 2]
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_18 = __pyx_v_yy;
                              __pyx_t_19 = 2;
                              __pyx_t_20 = __pyx_v_x;
                              __pyx_t_21 = __pyx_v_y;
                              __pyx_t_22 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_20 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_18 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_19 * __pyx_v_rgb_array_copy.strides[2]) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 05319: 
 05320: 
 05321: 
 05322: @cython.binding(False)
 05323: @cython.boundscheck(False)
 05324: @cython.wraparound(False)
 05325: @cython.nonecheck(False)
 05326: @cython.cdivision(False)
 05327: @cython.profile(False)
 05328: # e.g horizontal_glitch(surface, 0.5, 0.08, frame % 20)
+05329: cdef inline void shader_horizontal_glitch24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_horizontal_glitch24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, float __pyx_v_rad1_, float __pyx_v_frequency_, float __pyx_v_amplitude_) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_rad;
  float __pyx_v_angle;
  float __pyx_v_angle1;
  __Pyx_memviewslice __pyx_v_rgb_array_copy = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_ii;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_horizontal_glitch24_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_horizontal_glitch24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_copy, 1);
  __Pyx_RefNannyFinishContext();
}
 05330:         unsigned char [:, :, :] rgb_array_,
 05331:         float rad1_,
 05332:         float frequency_,
 05333:         float amplitude_):
 05334: 
 05335:     """
 05336:     SHADER GLITCH EFFECT
 05337: 
 05338:     Deform the pygame display to create a glitch appearance
 05339: 
 05340:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 05341:     please refer to pygame function pixels3d or array3d to convert an image into a
 05342:     3d array (library surfarray)
 05343: 
 05344:     :param rgb_array_: numpy.ndarray shape (w, h, 3) uint8 containing RGB pixels
 05345:     :param rad1_     : float; Angle in radians, this value control the angle variation over the time
 05346:     :param frequency_:  float; signal frequency, factor that amplify the angle variation
 05347:     :param amplitude_: float; cos amplitude value
 05348:     :return:
 05349:     """
 05350:     cdef Py_ssize_t w, h
+05351:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 05352: 
 05353:     cdef:
+05354:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+05355:         float rad = <float>(<float>3.14/<float>180.0)
  __pyx_v_rad = ((float)(((float)3.14) / ((float)180.0)));
+05356:         float angle = <float>0.0
  __pyx_v_angle = ((float)0.0);
+05357:         float angle1 = <float>0.0
  __pyx_v_angle1 = ((float)0.0);
+05358:         unsigned char [:, :, :] rgb_array_copy = numpy.array(rgb_array_, copy=True)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 5358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(1, 5358, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 5358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_rgb_array_copy = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+05359:         int ii=0
  __pyx_v_ii = 0;
 05360: 
+05361:     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_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }
 05362: 
+05363:         for j in range(h):
        __pyx_t_3 = __pyx_v_h;
        __pyx_t_2 = __pyx_t_3;
        for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_2; __pyx_t_9+=1) {
          __pyx_v_j = __pyx_t_9;
 05364: 
+05365:             for i in range(w):
          __pyx_t_10 = __pyx_v_w;
          __pyx_t_11 = __pyx_t_10;
          for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
            __pyx_v_i = __pyx_t_12;
 05366: 
+05367:                 ii = (i + <int>(<float>cos(angle) * amplitude_))
            __pyx_v_ii = (__pyx_v_i + ((int)(((float)cos(__pyx_v_angle)) * __pyx_v_amplitude_)));
+05368:                 if ii > <int>w - 1:
            __pyx_t_13 = ((__pyx_v_ii > (((int)__pyx_v_w) - 1)) != 0);
            if (__pyx_t_13) {
/* … */
            }
+05369:                     ii = <int>w - 1
              __pyx_v_ii = (((int)__pyx_v_w) - 1);
+05370:                 if ii < 0:
            __pyx_t_13 = ((__pyx_v_ii < 0) != 0);
            if (__pyx_t_13) {
/* … */
            }
+05371:                     ii = 0
              __pyx_v_ii = 0;
 05372: 
+05373:                 rgb_array_[i, j, 0],\
            __pyx_t_16 = __pyx_v_i;
            __pyx_t_15 = __pyx_v_j;
            __pyx_t_14 = 0;
            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_17;
+05374:                 rgb_array_[i, j, 1],\
            __pyx_t_14 = __pyx_v_i;
            __pyx_t_15 = __pyx_v_j;
            __pyx_t_16 = 1;
            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_18;
+05375:                 rgb_array_[i, j, 2] = rgb_array_copy[ii, j, 0],\
            __pyx_t_14 = __pyx_v_ii;
            __pyx_t_15 = __pyx_v_j;
            __pyx_t_16 = 0;
            __pyx_t_17 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_16 * __pyx_v_rgb_array_copy.strides[2]) )));
/* … */
            __pyx_t_16 = __pyx_v_i;
            __pyx_t_15 = __pyx_v_j;
            __pyx_t_14 = 2;
            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_t_19;
          }
+05376:                     rgb_array_copy[ii, j, 1], rgb_array_copy[ii, j, 2]
            __pyx_t_16 = __pyx_v_ii;
            __pyx_t_15 = __pyx_v_j;
            __pyx_t_14 = 1;
            __pyx_t_18 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_16 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[2]) )));
            __pyx_t_14 = __pyx_v_ii;
            __pyx_t_15 = __pyx_v_j;
            __pyx_t_16 = 2;
            __pyx_t_19 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_16 * __pyx_v_rgb_array_copy.strides[2]) )));
 05377: 
+05378:             angle1 = angle1 + frequency_ * rad
          __pyx_v_angle1 = (__pyx_v_angle1 + (__pyx_v_frequency_ * __pyx_v_rad));
+05379:             angle = angle + (rad1_ * rad + rand() % angle1 - rand() % angle1)
          __pyx_t_12 = rand();
          if (unlikely(__pyx_v_angle1 == 0)) {
            #ifdef WITH_THREAD
            PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
            #endif
            PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()");
            #ifdef WITH_THREAD
            __Pyx_PyGILState_Release(__pyx_gilstate_save);
            #endif
            __PYX_ERR(1, 5379, __pyx_L4_error)
          }
          __pyx_t_20 = rand();
          if (unlikely(__pyx_v_angle1 == 0)) {
            #ifdef WITH_THREAD
            PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
            #endif
            PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()");
            #ifdef WITH_THREAD
            __Pyx_PyGILState_Release(__pyx_gilstate_save);
            #endif
            __PYX_ERR(1, 5379, __pyx_L4_error)
          }
          __pyx_v_angle = (__pyx_v_angle + (((__pyx_v_rad1_ * __pyx_v_rad) + __Pyx_mod_float(__pyx_t_12, __pyx_v_angle1)) - __Pyx_mod_float(__pyx_t_20, __pyx_v_angle1)));
        }
      }
 05380: 
 05381: 
 05382: 
 05383: 
 05384: @cython.binding(False)
 05385: @cython.binding(False)
 05386: @cython.boundscheck(False)
 05387: @cython.wraparound(False)
 05388: @cython.nonecheck(False)
 05389: @cython.cdivision(True)
 05390: @cython.profile(False)
+05391: cdef inline void shader_bpf24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_bpf24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_shader_bpf24_inplace_c *__pyx_optional_args) {
  int __pyx_v_threshold = ((int)0x80);
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_lum;
  float __pyx_v_c;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_bpf24_inplace_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_threshold = __pyx_optional_args->threshold;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("PygameShader.shader.shader_bpf24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_shader_bpf24_inplace_c {
  int __pyx_n;
  int threshold;
  int transpose;
};
 05392:         unsigned char [:, :, :] rgb_array_, int threshold = 128, bint transpose=False):
 05393:     """
 05394:     SHADER BRIGHT PASS FILTER (INPLACE)
 05395: 
 05396:     Conserve only the brightest pixels in an array
 05397: 
 05398:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 05399:      please refer to pygame function pixels3d or array3d to convert an image into a
 05400:      3d array (library surfarray)
 05401: 
 05402:     :param rgb_array_: numpy.ndarray shape (w, h, 3) uint8 containing RGB pixels
 05403:     :param threshold : integer; Bright pass threshold default 128
 05404:     :param transpose : bool; True| False transpose the final array
 05405:     :return          :  void
 05406:     """
 05407: 
+05408:     assert 0 <= threshold <= 255, "Argument threshold must be in range [0 ... 255]"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = (0 <= __pyx_v_threshold);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_threshold <= 0xFF);
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_threshold_must_be_in_ra);
      __PYX_ERR(1, 5408, __pyx_L1_error)
    }
  }
  #endif
 05409: 
 05410:     cdef:
 05411:         Py_ssize_t w, h
+05412:     w, h = rgb_array_.shape[:2]
  __pyx_t_2 = __pyx_v_rgb_array_.shape;
  __pyx_t_3 = (__pyx_t_2[0]);
  __pyx_t_4 = (__pyx_t_2[1]);
  __pyx_v_w = __pyx_t_3;
  __pyx_v_h = __pyx_t_4;
 05413: 
 05414:     cdef:
+05415:         int i = 0, j = 0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 05416:         float lum, c
 05417:         unsigned char *r
 05418:         unsigned char *g
 05419:         unsigned char *b
 05420: 
+05421:     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:;
      }
  }
+05422:         for j in prange(0, h, schedule='static', num_threads=THREADS):
        __pyx_t_4 = __pyx_v_h;
        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_5 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_c) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_lum) lastprivate(__pyx_v_r) schedule(static)
/* … */
        __pyx_t_4 = __pyx_v_h;
        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_5 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_c) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_lum) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_5; __pyx_t_3++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_3);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_c = ((float)__PYX_NAN());
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_lum = ((float)__PYX_NAN());
                            __pyx_v_r = ((unsigned char *)1);
+05423:             for i in range(0, w):
                            __pyx_t_6 = __pyx_v_w;
                            __pyx_t_7 = __pyx_t_6;
                            for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
                              __pyx_v_i = __pyx_t_8;
 05424: 
 05425:                 # ITU-R BT.601 luma coefficients
+05426:                 r = &rgb_array_[i, j, 0]
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_10 = __pyx_v_j;
                              __pyx_t_11 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_9 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[2]) ))));
+05427:                 g = &rgb_array_[i, j, 1]
                              __pyx_t_11 = __pyx_v_i;
                              __pyx_t_10 = __pyx_v_j;
                              __pyx_t_9 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_9 * __pyx_v_rgb_array_.strides[2]) ))));
+05428:                 b = &rgb_array_[i, j, 2]
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_10 = __pyx_v_j;
                              __pyx_t_11 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_9 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[2]) ))));
 05429: 
+05430:                 lum = r[0] * <float>0.299 + g[0] * <float>0.587 + b[0] * <float>0.114
                              __pyx_v_lum = ((((__pyx_v_r[0]) * ((float)0.299)) + ((__pyx_v_g[0]) * ((float)0.587))) + ((__pyx_v_b[0]) * ((float)0.114)));
 05431: 
+05432:                 if lum > threshold:
                              __pyx_t_1 = ((__pyx_v_lum > __pyx_v_threshold) != 0);
                              if (__pyx_t_1) {
/* … */
                                goto __pyx_L12;
                              }
+05433:                     c = (lum - threshold) / lum
                                __pyx_v_c = ((__pyx_v_lum - __pyx_v_threshold) / __pyx_v_lum);
+05434:                     r[0] = <unsigned char>(r[0] * c)
                                (__pyx_v_r[0]) = ((unsigned char)((__pyx_v_r[0]) * __pyx_v_c));
+05435:                     g[0] = <unsigned char>(g[0] * c)
                                (__pyx_v_g[0]) = ((unsigned char)((__pyx_v_g[0]) * __pyx_v_c));
+05436:                     b[0] = <unsigned char>(b[0] * c)
                                (__pyx_v_b[0]) = ((unsigned char)((__pyx_v_b[0]) * __pyx_v_c));
 05437:                 else:
+05438:                     r[0], g[0], b[0] = 0, 0, 0
                              /*else*/ {
                                __pyx_t_12 = 0;
                                __pyx_t_13 = 0;
                                __pyx_t_14 = 0;
                                (__pyx_v_r[0]) = __pyx_t_12;
                                (__pyx_v_g[0]) = __pyx_t_13;
                                (__pyx_v_b[0]) = __pyx_t_14;
                              }
                              __pyx_L12:;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 05439: 
 05440: 
 05441: 
 05442: @cython.binding(False)
 05443: @cython.binding(False)
 05444: @cython.boundscheck(False)
 05445: @cython.wraparound(False)
 05446: @cython.nonecheck(False)
 05447: @cython.cdivision(True)
 05448: @cython.profile(False)
+05449: cdef inline bpf24_c(
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_bpf24_c(__Pyx_memviewslice __pyx_v_input_array_, struct __pyx_opt_args_12PygameShader_6shader_bpf24_c *__pyx_optional_args) {
  int __pyx_v_threshold = ((int)0x80);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_lum;
  float __pyx_v_c;
  __Pyx_memviewslice __pyx_v_output_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bpf24_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_threshold = __pyx_optional_args->threshold;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __Pyx_AddTraceback("PygameShader.shader.bpf24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_output_array_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+05450:         unsigned char [:, :, :] input_array_,
struct __pyx_opt_args_12PygameShader_6shader_bpf24_c {
  int __pyx_n;
  int threshold;
  int transpose;
};
 05451:         int threshold = 128,
 05452:         bint transpose=False):
 05453:     """
 05454:     SHADER BRIGHT PASS FILTER
 05455: 
 05456:     Conserve only the brightest pixels in an array
 05457: 
 05458:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 05459:     please refer to pygame function pixels3d or array3d to convert an image into a
 05460:     3d array (library surfarray)
 05461: 
 05462:     :param input_array_: numpy.ndarray shape (w, h, 3) uint8 containing RGB pixels
 05463:     :param threshold   : float Bright pass threshold default 128
 05464:     :param transpose   : bool; True| False transpose the final array
 05465:     :return            :  Return the modified array shape (w, h, 3) uint8
 05466:     """
+05467:     assert 0 <= threshold <= 255, "Argument threshold must be in range [0 ... 255]"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = (0 <= __pyx_v_threshold);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_threshold <= 0xFF);
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_threshold_must_be_in_ra);
      __PYX_ERR(1, 5467, __pyx_L1_error)
    }
  }
  #endif
 05468: 
 05469:     cdef:
 05470:         Py_ssize_t w, h
+05471:     w, h = input_array_.shape[:2]
  __pyx_t_2 = __pyx_v_input_array_.shape;
  __pyx_t_3 = (__pyx_t_2[0]);
  __pyx_t_4 = (__pyx_t_2[1]);
  __pyx_v_w = __pyx_t_3;
  __pyx_v_h = __pyx_t_4;
 05472: 
 05473:     cdef:
+05474:         int i = 0, j = 0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 05475:         float lum, c
+05476:         unsigned char [:, :, :] output_array_ = numpy.zeros((h, w, 3), uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 5476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_int_3);
  __pyx_t_6 = 0;
  __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_uint8); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_9, __pyx_t_8};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5476, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_9, __pyx_t_8};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5476, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_8);
    __pyx_t_9 = 0;
    __pyx_t_8 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(1, 5476, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_output_array_ = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
 05477:         unsigned char *r
 05478:         unsigned char *g
 05479:         unsigned char *b
 05480: 
+05481:     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:;
      }
  }
+05482:         for j in prange(0, h, schedule='static', num_threads=THREADS):
        __pyx_t_4 = __pyx_v_h;
        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_4 - 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_c) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_lum) lastprivate(__pyx_v_r) schedule(static)
/* … */
        __pyx_t_4 = __pyx_v_h;
        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_4 - 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_c) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_lum) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_13; __pyx_t_3++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_3);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_c = ((float)__PYX_NAN());
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_lum = ((float)__PYX_NAN());
                            __pyx_v_r = ((unsigned char *)1);
+05483:             for i in range(0, w):
                            __pyx_t_14 = __pyx_v_w;
                            __pyx_t_15 = __pyx_t_14;
                            for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_15; __pyx_t_10+=1) {
                              __pyx_v_i = __pyx_t_10;
 05484: 
 05485:                 # ITU-R BT.601 luma coefficients
+05486:                 r = &input_array_[i, j, 0]
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_input_array_.data + __pyx_t_16 * __pyx_v_input_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_input_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_input_array_.strides[2]) ))));
+05487:                 g = &input_array_[i, j, 1]
                              __pyx_t_18 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_input_array_.data + __pyx_t_18 * __pyx_v_input_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_input_array_.strides[1]) ) + __pyx_t_16 * __pyx_v_input_array_.strides[2]) ))));
+05488:                 b = &input_array_[i, j, 2]
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_input_array_.data + __pyx_t_16 * __pyx_v_input_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_input_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_input_array_.strides[2]) ))));
 05489: 
+05490:                 lum = r[0] * <float>0.299 + g[0] * <float>0.587 + b[0] * <float>0.114
                              __pyx_v_lum = ((((__pyx_v_r[0]) * ((float)0.299)) + ((__pyx_v_g[0]) * ((float)0.587))) + ((__pyx_v_b[0]) * ((float)0.114)));
 05491: 
+05492:                 if lum > threshold:
                              __pyx_t_1 = ((__pyx_v_lum > __pyx_v_threshold) != 0);
                              if (__pyx_t_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
      }
+05493:                     c = (lum - threshold) / lum
                                __pyx_v_c = ((__pyx_v_lum - __pyx_v_threshold) / __pyx_v_lum);
+05494:                     output_array_[j, i, 0] = <unsigned char>(r[0] * c)
                                __pyx_t_18 = __pyx_v_j;
                                __pyx_t_17 = __pyx_v_i;
                                __pyx_t_16 = 0;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_output_array_.data + __pyx_t_18 * __pyx_v_output_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_output_array_.strides[1]) ) + __pyx_t_16 * __pyx_v_output_array_.strides[2]) )) = ((unsigned char)((__pyx_v_r[0]) * __pyx_v_c));
+05495:                     output_array_[j, i, 1] = <unsigned char>(g[0] * c)
                                __pyx_t_16 = __pyx_v_j;
                                __pyx_t_17 = __pyx_v_i;
                                __pyx_t_18 = 1;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_output_array_.data + __pyx_t_16 * __pyx_v_output_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_output_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_output_array_.strides[2]) )) = ((unsigned char)((__pyx_v_g[0]) * __pyx_v_c));
+05496:                     output_array_[j, i, 2] = <unsigned char>(b[0] * c)
                                __pyx_t_18 = __pyx_v_j;
                                __pyx_t_17 = __pyx_v_i;
                                __pyx_t_16 = 2;
                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_output_array_.data + __pyx_t_18 * __pyx_v_output_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_output_array_.strides[1]) ) + __pyx_t_16 * __pyx_v_output_array_.strides[2]) )) = ((unsigned char)((__pyx_v_b[0]) * __pyx_v_c));
 05497: 
+05498:     return pygame.image.frombuffer(output_array_, (w, h), 'RGB')
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pygame); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_image); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __pyx_memoryview_fromslice(__pyx_v_output_array_, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 5498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_9);
  __pyx_t_8 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_11, __pyx_t_6, __pyx_n_s_RGB};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5498, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_11, __pyx_t_6, __pyx_n_s_RGB};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5498, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_t_6);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_10, __pyx_n_s_RGB);
    __pyx_t_11 = 0;
    __pyx_t_6 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 05499: 
 05500: 
 05501: 
 05502: 
 05503: 
 05504: @cython.binding(False)
 05505: @cython.binding(False)
 05506: @cython.boundscheck(False)
 05507: @cython.wraparound(False)
 05508: @cython.nonecheck(False)
 05509: @cython.cdivision(True)
 05510: @cython.profile(False)
+05511: cpdef inline filtering24_c(object surface_, mask_):
static PyObject *__pyx_pw_12PygameShader_6shader_143filtering24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_filtering24_c(PyObject *__pyx_v_surface_, PyObject *__pyx_v_mask_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_v_w;
  int __pyx_v_h;
  int __pyx_v_w_;
  int __pyx_v_h_;
  PyObject *__pyx_v_rgb_ = NULL;
  __Pyx_memviewslice __pyx_v_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_rgb1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_mask = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtering24_c", 0);
/* … */
  /* 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_11);
  __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_XDEC_MEMVIEW(&__pyx_t_22, 1);
  __Pyx_AddTraceback("PygameShader.shader.filtering24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rgb_);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_mask, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_143filtering24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_142filtering24_c[] = "\n    MULTIPLY MASK VALUES WITH AN ARRAY REPRESENTING THE SURFACE PIXELS (COMPATIBLE 24 BIT ONLY).\n    Mask values are floats in range (0 ... 1.0)\n\n    :param surface_: pygame.Surface compatible 24-bit\n    :param mask_: 2d array (MemoryViewSlice) containing alpha values (float).\n    The mask_ output image is monochromatic (values range [0 ... 1.0] and R=B=G.\n    :return: Return a pygame.Surface 24 bit\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_143filtering24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  PyObject *__pyx_v_mask_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtering24_c (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_mask_2,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_mask_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("filtering24_c", 1, 2, 2, 1); __PYX_ERR(1, 5511, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "filtering24_c") < 0)) __PYX_ERR(1, 5511, __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_mask_ = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("filtering24_c", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 5511, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.filtering24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_142filtering24_c(__pyx_self, __pyx_v_surface_, __pyx_v_mask_);
  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_6shader_142filtering24_c(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, PyObject *__pyx_v_mask_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtering24_c", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_filtering24_c(__pyx_v_surface_, __pyx_v_mask_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5511, __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.shader.filtering24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05512:     """
 05513:     MULTIPLY MASK VALUES WITH AN ARRAY REPRESENTING THE SURFACE PIXELS (COMPATIBLE 24 BIT ONLY).
 05514:     Mask values are floats in range (0 ... 1.0)
 05515: 
 05516:     :param surface_: pygame.Surface compatible 24-bit
 05517:     :param mask_: 2d array (MemoryViewSlice) containing alpha values (float).
 05518:     The mask_ output image is monochromatic (values range [0 ... 1.0] and R=B=G.
 05519:     :return: Return a pygame.Surface 24 bit
 05520:     """
 05521:     cdef int w, h, w_, h_
+05522:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 5522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 5522, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 5522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 5522, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 5522, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5522, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5522, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
+05523:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __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;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L1_error;
    __pyx_L10_try_end:;
  }
+05524:         w_, h_ = mask_.shape[:2]
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mask_, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5524, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_1, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5524, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
        PyObject* sequence = __pyx_t_3;
        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(1, 5524, __pyx_L5_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        #else
        __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5524, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5524, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5524, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
        index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_1);
        index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_2);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 5524, __pyx_L5_error)
        __pyx_t_5 = NULL;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L12_unpacking_done;
        __pyx_L11_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_5 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(1, 5524, __pyx_L5_error)
        __pyx_L12_unpacking_done:;
      }
      __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5524, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5524, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_w_ = __pyx_t_7;
      __pyx_v_h_ = __pyx_t_6;
+05525:     except (ValueError, pygame.error):
    __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pygame); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5525, __pyx_L7_except_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_error); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5525, __pyx_L7_except_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_builtin_ValueError) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_11);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1);
    __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0;
    if (__pyx_t_6) {
      __Pyx_AddTraceback("PygameShader.shader.filtering24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(1, 5525, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_3);
+05526:        raise ValueError(
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5526, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 5526, __pyx_L7_except_error)
    }
    goto __pyx_L7_except_error;
    __pyx_L7_except_error:;
 05527:            '\nArgument mask_ type not understood, '
+05528:            'expecting numpy.ndarray type (w, h) got %s ' % type(mask_))
      __pyx_t_11 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_mask__type_not_underst, ((PyObject *)Py_TYPE(__pyx_v_mask_))); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5528, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_11);
 05529: 
 05530: 
+05531:     assert w == w_ and h == h_, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_13 = ((__pyx_v_w == __pyx_v_w_) != 0);
    if (__pyx_t_13) {
    } else {
      __pyx_t_12 = __pyx_t_13;
      goto __pyx_L15_bool_binop_done;
    }
    __pyx_t_13 = ((__pyx_v_h == __pyx_v_h_) != 0);
    __pyx_t_12 = __pyx_t_13;
    __pyx_L15_bool_binop_done:;
    if (unlikely(!__pyx_t_12)) {
 05532:         '\nSurface and mask size does not match (w:%s, h:%s), ' \
+05533:         '(w:%s, h:%s) ' % (w, h, w_, h_)
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5533, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5533, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5533, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_h_); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5533, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5533, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_4);
      __pyx_t_3 = 0;
      __pyx_t_2 = 0;
      __pyx_t_1 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Surface_and_mask_size_does_not, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5533, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 5531, __pyx_L1_error)
    }
  }
  #endif
 05534: 
+05535:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L22_try_end;
    __pyx_L17_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
    goto __pyx_L1_error;
    __pyx_L18_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
    __pyx_L22_try_end:;
  }
+05536:         rgb_ = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5536, __pyx_L17_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_1, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5536, __pyx_L17_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_v_rgb_ = __pyx_t_4;
      __pyx_t_4 = 0;
+05537:     except (ValueError, pygame.error):
    __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_11, &__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5537, __pyx_L19_except_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_error); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5537, __pyx_L19_except_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_builtin_ValueError) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_ErrRestore(__pyx_t_4, __pyx_t_11, __pyx_t_1);
    __pyx_t_4 = 0; __pyx_t_11 = 0; __pyx_t_1 = 0;
    if (__pyx_t_6) {
      __Pyx_AddTraceback("PygameShader.shader.filtering24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_11, &__pyx_t_4) < 0) __PYX_ERR(1, 5537, __pyx_L19_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GOTREF(__pyx_t_4);
+05538:         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_L32_try_end;
        __pyx_L25_error:;
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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_L19_except_error;
        __pyx_L32_try_end:;
      }
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L18_exception_handled;
    }
    goto __pyx_L19_except_error;
    __pyx_L19_except_error:;
+05539:             rgb_ = array3d(surface_)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_array3d); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5539, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_17 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_3 = (__pyx_t_17) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_17, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_surface_);
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5539, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF_SET(__pyx_v_rgb_, __pyx_t_3);
          __pyx_t_3 = 0;
+05540:         except (ValueError, pygame.error):
        __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_17);
        __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_pygame); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 5540, __pyx_L27_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(1, 5540, __pyx_L27_except_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_6 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_builtin_ValueError) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_19);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_17);
        __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_17 = 0;
        if (__pyx_t_6) {
          __Pyx_AddTraceback("PygameShader.shader.filtering24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_17, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(1, 5540, __pyx_L27_except_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_3);
+05541:             raise ValueError('Incompatible surface.')
          __pyx_t_19 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 5541, __pyx_L27_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(1, 5541, __pyx_L27_except_error)
        }
        goto __pyx_L27_except_error;
        __pyx_L27_except_error:;
/* … */
  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_Incompatible_surface); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(1, 5541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__26);
  __Pyx_GIVEREF(__pyx_tuple__26);
 05542: 
 05543:     cdef:
+05544:         unsigned char [:, :, :] rgb = rgb_.transpose(1, 0, 2)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_rgb_, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_11, PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(1, 5544, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_rgb = __pyx_t_20;
  __pyx_t_20.memview = NULL;
  __pyx_t_20.data = NULL;
/* … */
  __pyx_tuple__27 = PyTuple_Pack(3, __pyx_int_1, __pyx_int_0, __pyx_int_2); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 5544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
+05545:         unsigned char [:, :, ::1] rgb1 = numpy.empty((h, w, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_int_3);
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_4};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5545, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_4};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5545, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_17 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 5545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_6, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_17, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_21 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_11, PyBUF_WRITABLE); if (unlikely(!__pyx_t_21.memview)) __PYX_ERR(1, 5545, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_rgb1 = __pyx_t_21;
  __pyx_t_21.memview = NULL;
  __pyx_t_21.data = NULL;
+05546:         float [:, :] mask = numpy.asarray(mask_, numpy.float32)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 5546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_17);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_17, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_17)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_mask_, __pyx_t_4};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5546, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_17)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_mask_, __pyx_t_4};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5546, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_v_mask_);
    __Pyx_GIVEREF(__pyx_v_mask_);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_6, __pyx_v_mask_);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_2, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_11, PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(1, 5546, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_mask = __pyx_t_22;
  __pyx_t_22.memview = NULL;
  __pyx_t_22.data = NULL;
 05547:         int i, j
+05548:     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_L37;
        }
        __pyx_L37:;
      }
  }
+05549:         for i in prange(0, w, schedule='static', num_threads=THREADS):
        __pyx_t_6 = __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_24 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_24 > 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)
/* … */
        __pyx_t_6 = __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_24 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_24 > 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(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_24; __pyx_t_23++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_23);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
+05550:             for j in range(h):
                            __pyx_t_7 = __pyx_v_h;
                            __pyx_t_25 = __pyx_t_7;
                            for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                              __pyx_v_j = __pyx_t_26;
+05551:                 rgb1[j, i, 0] = <unsigned char>(rgb[j, i, 0] * mask[i, j])
                              __pyx_t_27 = __pyx_v_j;
                              __pyx_t_28 = __pyx_v_i;
                              __pyx_t_29 = 0;
                              __pyx_t_30 = __pyx_v_i;
                              __pyx_t_31 = __pyx_v_j;
                              __pyx_t_32 = __pyx_v_j;
                              __pyx_t_33 = __pyx_v_i;
                              __pyx_t_34 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb1.data + __pyx_t_32 * __pyx_v_rgb1.strides[0]) ) + __pyx_t_33 * __pyx_v_rgb1.strides[1]) )) + __pyx_t_34)) )) = ((unsigned char)((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_27 * __pyx_v_rgb.strides[0]) ) + __pyx_t_28 * __pyx_v_rgb.strides[1]) ) + __pyx_t_29 * __pyx_v_rgb.strides[2]) ))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mask.data + __pyx_t_30 * __pyx_v_mask.strides[0]) ) + __pyx_t_31 * __pyx_v_mask.strides[1]) )))));
+05552:                 rgb1[j, i, 1] = <unsigned char>(rgb[j, i, 1] * mask[i, j])
                              __pyx_t_31 = __pyx_v_j;
                              __pyx_t_30 = __pyx_v_i;
                              __pyx_t_29 = 1;
                              __pyx_t_28 = __pyx_v_i;
                              __pyx_t_27 = __pyx_v_j;
                              __pyx_t_34 = __pyx_v_j;
                              __pyx_t_33 = __pyx_v_i;
                              __pyx_t_32 = 1;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb1.data + __pyx_t_34 * __pyx_v_rgb1.strides[0]) ) + __pyx_t_33 * __pyx_v_rgb1.strides[1]) )) + __pyx_t_32)) )) = ((unsigned char)((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_31 * __pyx_v_rgb.strides[0]) ) + __pyx_t_30 * __pyx_v_rgb.strides[1]) ) + __pyx_t_29 * __pyx_v_rgb.strides[2]) ))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mask.data + __pyx_t_28 * __pyx_v_mask.strides[0]) ) + __pyx_t_27 * __pyx_v_mask.strides[1]) )))));
+05553:                 rgb1[j, i, 2] = <unsigned char>(rgb[j, i, 2] * mask[i, j])
                              __pyx_t_27 = __pyx_v_j;
                              __pyx_t_28 = __pyx_v_i;
                              __pyx_t_29 = 2;
                              __pyx_t_30 = __pyx_v_i;
                              __pyx_t_31 = __pyx_v_j;
                              __pyx_t_32 = __pyx_v_j;
                              __pyx_t_33 = __pyx_v_i;
                              __pyx_t_34 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb1.data + __pyx_t_32 * __pyx_v_rgb1.strides[0]) ) + __pyx_t_33 * __pyx_v_rgb1.strides[1]) )) + __pyx_t_34)) )) = ((unsigned char)((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_27 * __pyx_v_rgb.strides[0]) ) + __pyx_t_28 * __pyx_v_rgb.strides[1]) ) + __pyx_t_29 * __pyx_v_rgb.strides[2]) ))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mask.data + __pyx_t_30 * __pyx_v_mask.strides[0]) ) + __pyx_t_31 * __pyx_v_mask.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
      }
 05554: 
+05555:     return frombuffer(rgb1, (w, h), 'RGB')
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 5555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_rgb1, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_17);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_17, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_17)) {
    PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_n_s_RGB};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5555, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_17)) {
    PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_n_s_RGB};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5555, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_6, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_6, __pyx_t_3);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_6, __pyx_n_s_RGB);
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_4, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_r = __pyx_t_11;
  __pyx_t_11 = 0;
  goto __pyx_L0;
 05556: 
 05557: 
 05558: @cython.binding(False)
 05559: @cython.binding(False)
 05560: @cython.boundscheck(False)
 05561: @cython.wraparound(False)
 05562: @cython.nonecheck(False)
 05563: @cython.cdivision(True)
 05564: @cython.profile(False)
+05565: cdef inline void shader_bloom_effect_array24_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_bloom_effect_array24_c(PyObject *__pyx_v_surface_, int __pyx_v_threshold_, struct __pyx_opt_args_12PygameShader_6shader_shader_bloom_effect_array24_c *__pyx_optional_args) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __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_14);
  __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_bloom_effect_array24_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s2);
  __Pyx_XDECREF(__pyx_v_s4);
  __Pyx_XDECREF(__pyx_v_s8);
  __Pyx_XDECREF(__pyx_v_s16);
  __Pyx_XDECREF(__pyx_v_s2_array);
  __Pyx_XDECREF(__pyx_v_b2_blurred);
  __Pyx_XDECREF(__pyx_v_s4_array);
  __Pyx_XDECREF(__pyx_v_b4_blurred);
  __Pyx_XDECREF(__pyx_v_s8_array);
  __Pyx_XDECREF(__pyx_v_b8_blurred);
  __Pyx_XDECREF(__pyx_v_s16_array);
  __Pyx_XDECREF(__pyx_v_b16_blurred);
  __Pyx_XDECREF(__pyx_v_surface_);
  __Pyx_RefNannyFinishContext();
}
 05566:         surface_,
 05567:         int threshold_,
+05568:         bint fast_ = False,
  int __pyx_v_fast_ = ((int)0);
+05569:         object mask_ = None
  PyObject *__pyx_v_mask_ = ((PyObject *)Py_None);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  CYTHON_UNUSED int __pyx_v_bit_size;
  int __pyx_v_w2;
  int __pyx_v_h2;
  int __pyx_v_w4;
  int __pyx_v_h4;
  int __pyx_v_w8;
  int __pyx_v_h8;
  int __pyx_v_w16;
  int __pyx_v_h16;
  int __pyx_v_x2;
  int __pyx_v_x4;
  int __pyx_v_x8;
  int __pyx_v_x16;
  PyObject *__pyx_v_s2 = NULL;
  PyObject *__pyx_v_s4 = NULL;
  PyObject *__pyx_v_s8 = NULL;
  PyObject *__pyx_v_s16 = NULL;
  PyObject *__pyx_v_s2_array = NULL;
  PyObject *__pyx_v_b2_blurred = NULL;
  PyObject *__pyx_v_s4_array = NULL;
  PyObject *__pyx_v_b4_blurred = NULL;
  PyObject *__pyx_v_s8_array = NULL;
  PyObject *__pyx_v_b8_blurred = NULL;
  PyObject *__pyx_v_s16_array = NULL;
  PyObject *__pyx_v_b16_blurred = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_bloom_effect_array24_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fast_ = __pyx_optional_args->fast_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_mask_ = __pyx_optional_args->mask_;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_surface_);
 05570: ):
 05571:     """
 05572:     CREATE A BLOOM EFFECT
 05573: 
 05574:     * Surface must be a pygame Surface 24-32 bit format
 05575: 
 05576:     :param surface_     : pygame.Surface; Game display or texture
 05577:     :param threshold_   : integer; Threshold value uint8 in range [0 ... 255].
 05578:     The threshold value is used by a bright
 05579:      pass filter to determine the bright pixels above the given threshold.
 05580:       Below 128 the bloom effect will be more
 05581:      noticeable and above 128 a bit less.
 05582:     :param fast_        : bool; True | False; If True the bloom effect will be approximated
 05583:     and only the x16 subsurface
 05584:     will be processed to maximize the overall processing time, default is False).
 05585:     :param mask_        :
 05586:     :return             : void
 05587:     """
 05588: 
+05589:     assert 0 <= threshold_ <= 255, "Argument threshold must be in range [0 ... 255]"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = (0 <= __pyx_v_threshold_);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_threshold_ <= 0xFF);
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_threshold_must_be_in_ra);
      __PYX_ERR(1, 5589, __pyx_L1_error)
    }
  }
  #endif
 05590: 
 05591:     cdef:
 05592:         Py_ssize_t  w, h
 05593:         int bit_size
 05594:         int w2, h2, w4, h4, w8, h8, w16, h16
+05595:         bint x2, x4, x8, x16 = False
  __pyx_v_x16 = 0;
 05596: 
+05597:     w, h = surface_.get_size()
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(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_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    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(1, 5597, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5597, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5597, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5597, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 5597, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 5597, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 5597, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 5597, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_w = __pyx_t_7;
  __pyx_v_h = __pyx_t_8;
+05598:     bit_size = surface_.get_bitsize()
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bitsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __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_2 = (__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_2)) __PYX_ERR(1, 5598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_bit_size = __pyx_t_9;
 05599: 
 05600: 
+05601:     w2, h2   = <int>w >> 1, <int>h >> 1
  __pyx_t_10 = (((int)__pyx_v_w) >> 1);
  __pyx_t_11 = (((int)__pyx_v_h) >> 1);
  __pyx_v_w2 = __pyx_t_10;
  __pyx_v_h2 = __pyx_t_11;
+05602:     w4, h4   = w2 >> 1, h2 >> 1
  __pyx_t_11 = (__pyx_v_w2 >> 1);
  __pyx_t_10 = (__pyx_v_h2 >> 1);
  __pyx_v_w4 = __pyx_t_11;
  __pyx_v_h4 = __pyx_t_10;
+05603:     w8, h8   = w4 >> 1, h4 >> 1
  __pyx_t_10 = (__pyx_v_w4 >> 1);
  __pyx_t_11 = (__pyx_v_h4 >> 1);
  __pyx_v_w8 = __pyx_t_10;
  __pyx_v_h8 = __pyx_t_11;
+05604:     w16, h16 = w8 >> 1, h8 >> 1
  __pyx_t_11 = (__pyx_v_w8 >> 1);
  __pyx_t_10 = (__pyx_v_h8 >> 1);
  __pyx_v_w16 = __pyx_t_11;
  __pyx_v_h16 = __pyx_t_10;
 05605: 
+05606:     if w16 == 0 or h16 == 0:
  __pyx_t_12 = ((__pyx_v_w16 == 0) != 0);
  if (!__pyx_t_12) {
  } else {
    __pyx_t_1 = __pyx_t_12;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_12 = ((__pyx_v_h16 == 0) != 0);
  __pyx_t_1 = __pyx_t_12;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05607:         raise ValueError(
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5607, __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(1, 5607, __pyx_L1_error)
/* … */
  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_Image_too_small_and_cannot_be_p); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 5607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__28);
  __Pyx_GIVEREF(__pyx_tuple__28);
 05608:             "\nImage too small and cannot be processed.\n"
 05609:             "Try to increase the size of the image")
 05610: 
+05611:     if w2 > 0 and h2 > 0:
  __pyx_t_12 = ((__pyx_v_w2 > 0) != 0);
  if (__pyx_t_12) {
  } else {
    __pyx_t_1 = __pyx_t_12;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_12 = ((__pyx_v_h2 > 0) != 0);
  __pyx_t_1 = __pyx_t_12;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L8;
  }
+05612:         x2 = True
    __pyx_v_x2 = 1;
 05613:     else:
+05614:         x2 = False
  /*else*/ {
    __pyx_v_x2 = 0;
  }
  __pyx_L8:;
 05615: 
+05616:     if w4 > 0 and h4 > 0:
  __pyx_t_12 = ((__pyx_v_w4 > 0) != 0);
  if (__pyx_t_12) {
  } else {
    __pyx_t_1 = __pyx_t_12;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_12 = ((__pyx_v_h4 > 0) != 0);
  __pyx_t_1 = __pyx_t_12;
  __pyx_L12_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L11;
  }
+05617:         x4 = True
    __pyx_v_x4 = 1;
 05618:     else:
+05619:         x4 = False
  /*else*/ {
    __pyx_v_x4 = 0;
  }
  __pyx_L11:;
 05620: 
+05621:     if w8 > 0 and h8 > 0:
  __pyx_t_12 = ((__pyx_v_w8 > 0) != 0);
  if (__pyx_t_12) {
  } else {
    __pyx_t_1 = __pyx_t_12;
    goto __pyx_L15_bool_binop_done;
  }
  __pyx_t_12 = ((__pyx_v_h8 > 0) != 0);
  __pyx_t_1 = __pyx_t_12;
  __pyx_L15_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L14;
  }
+05622:         x8 = True
    __pyx_v_x8 = 1;
 05623:     else:
+05624:         x8 = False
  /*else*/ {
    __pyx_v_x8 = 0;
  }
  __pyx_L14:;
 05625: 
+05626:     if w16 > 0 and h16 > 0:
  __pyx_t_12 = ((__pyx_v_w16 > 0) != 0);
  if (__pyx_t_12) {
  } else {
    __pyx_t_1 = __pyx_t_12;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_12 = ((__pyx_v_h16 > 0) != 0);
  __pyx_t_1 = __pyx_t_12;
  __pyx_L18_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L17;
  }
+05627:         x16 = True
    __pyx_v_x16 = 1;
 05628:     else:
+05629:         x16 = False
  /*else*/ {
    __pyx_v_x16 = 0;
  }
  __pyx_L17:;
 05630: 
+05631:     s2, s4, s8, s16 = None, None, None, None
  __pyx_t_2 = Py_None;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = Py_None;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_3 = Py_None;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = Py_None;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_v_s2 = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_s4 = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_s8 = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_s16 = __pyx_t_5;
  __pyx_t_5 = 0;
 05632: 
 05633:     # SUBSURFACE DOWNSCALE CANNOT
 05634:     # BE PERFORMED AND WILL RAISE AN EXCEPTION
+05635:     if not x2:
  __pyx_t_1 = ((!(__pyx_v_x2 != 0)) != 0);
  if (__pyx_t_1) {
/* … */
  }
+05636:         return
    goto __pyx_L0;
 05637: 
+05638:     if fast_:
  __pyx_t_1 = (__pyx_v_fast_ != 0);
  if (__pyx_t_1) {
/* … */
  }
+05639:         x2, x4, x8 = False, False, False
    __pyx_t_1 = 0;
    __pyx_t_12 = 0;
    __pyx_t_13 = 0;
    __pyx_v_x2 = __pyx_t_1;
    __pyx_v_x4 = __pyx_t_12;
    __pyx_v_x8 = __pyx_t_13;
 05640: 
 05641: 
 05642:     # FIRST SUBSURFACE DOWNSCALE x2
 05643:     # THIS IS THE MOST EXPENSIVE IN TERM OF PROCESSING TIME
+05644:     if x2:
  __pyx_t_13 = (__pyx_v_x2 != 0);
  if (__pyx_t_13) {
/* … */
  }
+05645:         s2 = scale(surface_, (w2, h2))
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_scale); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_w2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_2);
    __pyx_t_4 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_14};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5645, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_14};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5645, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_9, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_9, __pyx_t_14);
      __pyx_t_14 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5645, __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_DECREF_SET(__pyx_v_s2, __pyx_t_5);
    __pyx_t_5 = 0;
+05646:         s2 = bpf24_c(pixels3d(s2), threshold=threshold_)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __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_v_s2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_s2);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5646, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_16.__pyx_n = 1;
    __pyx_t_16.threshold = __pyx_v_threshold_;
    __pyx_t_5 = __pyx_f_12PygameShader_6shader_bpf24_c(__pyx_t_15, &__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
    __Pyx_DECREF_SET(__pyx_v_s2, __pyx_t_5);
    __pyx_t_5 = 0;
+05647:         s2_array = numpy.array(s2.get_view('3'), dtype=numpy.uint8)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_s2, __pyx_n_s_get_view); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_5 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_14, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5647, __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(1, 5647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_numpy); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 5647, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_s2_array = __pyx_t_2;
    __pyx_t_2 = 0;
+05648:         shader_blur5x5_array24_inplace_c(s2_array)
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s2_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5648, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_15, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
 05649:         # b2_blurred = frombuffer(numpy.array(s2_array.transpose(1, 0, 2),
 05650:         # order='C', copy=False), (w2, h2), 'RGB')
+05651:         b2_blurred = make_surface(s2_array)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_s2_array) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_s2_array);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_b2_blurred = __pyx_t_2;
    __pyx_t_2 = 0;
+05652:         s2 = smoothscale(b2_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_b2_blurred, __pyx_t_14};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5652, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_b2_blurred, __pyx_t_14};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5652, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5652, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b2_blurred);
      __Pyx_GIVEREF(__pyx_v_b2_blurred);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_9, __pyx_v_b2_blurred);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_9, __pyx_t_14);
      __pyx_t_14 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5652, __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_DECREF_SET(__pyx_v_s2, __pyx_t_2);
    __pyx_t_2 = 0;
+05653:         surface_.blit(s2, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5653, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5653, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_s2);
    __Pyx_GIVEREF(__pyx_v_s2);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_s2);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_tuple__12);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5653, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5653, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_special_flags, __pyx_t_14) < 0) __PYX_ERR(1, 5653, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5653, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 05654: 
 05655:     # SECOND SUBSURFACE DOWNSCALE x4
 05656:     # THIS IS THE SECOND MOST EXPENSIVE IN TERM OF PROCESSING TIME
+05657:     if x4:
  __pyx_t_13 = (__pyx_v_x4 != 0);
  if (__pyx_t_13) {
/* … */
  }
+05658:         s4 = scale(surface_, (w4, h4))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
    __pyx_t_5 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_3};
      __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5658, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_3};
      __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5658, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5658, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5658, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_s4, __pyx_t_14);
    __pyx_t_14 = 0;
+05659:         s4 = bpf24_c(pixels3d(s4), threshold=threshold_)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5659, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_14 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_s4) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_s4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5659, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_14, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5659, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_16.__pyx_n = 1;
    __pyx_t_16.threshold = __pyx_v_threshold_;
    __pyx_t_14 = __pyx_f_12PygameShader_6shader_bpf24_c(__pyx_t_15, &__pyx_t_16); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5659, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
    __Pyx_DECREF_SET(__pyx_v_s4, __pyx_t_14);
    __pyx_t_14 = 0;
+05660:         s4_array = numpy.array(s4.get_view('3'), dtype=numpy.uint8)
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_numpy); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_s4, __pyx_n_s_get_view); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_14 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_14);
    __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 5660, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5660, __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_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_v_s4_array = __pyx_t_2;
    __pyx_t_2 = 0;
+05661:         shader_blur5x5_array24_inplace_c(s4_array)
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s4_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5661, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_15, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
 05662:         # b4_blurred = frombuffer(numpy.array(s4_array.transpose(1, 0, 2),
 05663:         # order='C', copy=False), (w4, h4), 'RGB')
+05664:         b4_blurred = make_surface(s4_array)
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5664, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_5, __pyx_v_s4_array) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_s4_array);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5664, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_v_b4_blurred = __pyx_t_2;
    __pyx_t_2 = 0;
+05665:         s4 = smoothscale(b4_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5665, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5665, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5665, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5665, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
    __pyx_t_5 = 0;
    __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_14)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_b4_blurred, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5665, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_b4_blurred, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5665, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5665, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b4_blurred);
      __Pyx_GIVEREF(__pyx_v_b4_blurred);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_v_b4_blurred);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5665, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF_SET(__pyx_v_s4, __pyx_t_2);
    __pyx_t_2 = 0;
+05666:         surface_.blit(s4, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_v_s4);
    __Pyx_GIVEREF(__pyx_v_s4);
    PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_s4);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_tuple__12);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_special_flags, __pyx_t_3) < 0) __PYX_ERR(1, 5666, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_14, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 05667: 
 05668:     # THIRD SUBSURFACE DOWNSCALE x8
+05669:     if x8:
  __pyx_t_13 = (__pyx_v_x8 != 0);
  if (__pyx_t_13) {
/* … */
  }
+05670:         s8 = scale(surface_, (w8, h8))
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_scale); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_w8); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
    __pyx_t_14 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5670, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5670, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5670, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_9, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_9, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_14, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5670, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_s8, __pyx_t_3);
    __pyx_t_3 = 0;
+05671:         s8 = bpf24_c(pixels3d(s8), threshold=threshold_)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_14, __pyx_v_s8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_s8);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5671, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_16.__pyx_n = 1;
    __pyx_t_16.threshold = __pyx_v_threshold_;
    __pyx_t_3 = __pyx_f_12PygameShader_6shader_bpf24_c(__pyx_t_15, &__pyx_t_16); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
    __Pyx_DECREF_SET(__pyx_v_s8, __pyx_t_3);
    __pyx_t_3 = 0;
+05672:         s8_array = numpy.array(s8.get_view('3'), dtype=numpy.uint8)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_s8, __pyx_n_s_get_view); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_4, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_14, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_s8_array = __pyx_t_2;
    __pyx_t_2 = 0;
+05673:         shader_blur5x5_array24_inplace_c(s8_array)
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s8_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5673, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_15, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
 05674:         # b8_blurred = frombuffer(numpy.array(s8_array.transpose(1, 0, 2),
 05675:         # order='C', copy=False), (w8, h8), 'RGB')
+05676:         b8_blurred = make_surface(s8_array)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5676, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_14, __pyx_v_s8_array) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_s8_array);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5676, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_b8_blurred = __pyx_t_2;
    __pyx_t_2 = 0;
+05677:         s8 = smoothscale(b8_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_14 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
    __pyx_t_14 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_b8_blurred, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5677, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_b8_blurred, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5677, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b8_blurred);
      __Pyx_GIVEREF(__pyx_v_b8_blurred);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_9, __pyx_v_b8_blurred);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_9, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_14, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_s8, __pyx_t_2);
    __pyx_t_2 = 0;
+05678:         surface_.blit(s8, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_s8);
    __Pyx_GIVEREF(__pyx_v_s8);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_s8);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_tuple__12);
    __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_special_flags, __pyx_t_4) < 0) __PYX_ERR(1, 5678, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 05679: 
 05680:     # FOURTH SUBSURFACE DOWNSCALE x16
 05681:     # LESS SIGNIFICANT IN TERMS OF RENDERING AND PROCESSING TIME
+05682:     if x16:
  __pyx_t_13 = (__pyx_v_x16 != 0);
  if (__pyx_t_13) {
/* … */
  }
+05683:         s16 = scale(surface_, (w16, h16))
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_scale); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w16); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h16); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5683, __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_2);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_14)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_5};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5683, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_5};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5683, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5683, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_9, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_9, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5683, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF_SET(__pyx_v_s16, __pyx_t_4);
    __pyx_t_4 = 0;
+05684:         s16 = bpf24_c(pixels3d(s16), threshold=threshold_)
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
      }
    }
    __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_3, __pyx_v_s16) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_s16);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5684, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_16.__pyx_n = 1;
    __pyx_t_16.threshold = __pyx_v_threshold_;
    __pyx_t_4 = __pyx_f_12PygameShader_6shader_bpf24_c(__pyx_t_15, &__pyx_t_16); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
    __Pyx_DECREF_SET(__pyx_v_s16, __pyx_t_4);
    __pyx_t_4 = 0;
+05685:         s16_array = numpy.array(s16.get_view('3'), dtype=numpy.uint8)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5685, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5685, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_s16, __pyx_n_s_get_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5685, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5685, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5685, __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(1, 5685, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5685, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5685, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 5685, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5685, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_s16_array = __pyx_t_2;
    __pyx_t_2 = 0;
+05686:         shader_blur5x5_array24_inplace_c(s16_array)
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s16_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5686, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_15, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
+05687:         shader_blur5x5_array24_inplace_c(s16_array)
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s16_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 5687, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_15, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
 05688:         # b16_blurred = frombuffer(numpy.array(s16_array.transpose(1, 0, 2),
 05689:         # order='C', copy=False), (w16, h16), 'RGB')
+05690:         b16_blurred = make_surface(s16_array)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5690, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(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_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_s16_array) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_s16_array);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5690, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_b16_blurred = __pyx_t_2;
    __pyx_t_2 = 0;
+05691:         s16 = smoothscale(b16_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5691, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5691, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_14 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5691, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5691, __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_14);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_14);
    __pyx_t_3 = 0;
    __pyx_t_14 = 0;
    __pyx_t_14 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_v_b16_blurred, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5691, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_v_b16_blurred, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5691, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_14) {
        __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_14); __pyx_t_14 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b16_blurred);
      __Pyx_GIVEREF(__pyx_v_b16_blurred);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_9, __pyx_v_b16_blurred);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_9, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_s16, __pyx_t_2);
    __pyx_t_2 = 0;
+05692:         surface_.blit(s16, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_s16);
    __Pyx_GIVEREF(__pyx_v_s16);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_s16);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_tuple__12);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_special_flags, __pyx_t_5) < 0) __PYX_ERR(1, 5692, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __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;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 05693: 
 05694:     # todo filtering is not an inplace function and will returned a surface
 05695:     # todo Bloom is an inplace method an cannot return a surface, so check the filtering here
+05696:     if mask_ is not None:
  __pyx_t_13 = (__pyx_v_mask_ != Py_None);
  __pyx_t_12 = (__pyx_t_13 != 0);
  if (__pyx_t_12) {
/* … */
  }
+05697:         surface_ = filtering24_c(surface_, mask_)
    __pyx_t_5 = __pyx_f_12PygameShader_6shader_filtering24_c(__pyx_v_surface_, __pyx_v_mask_, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF_SET(__pyx_v_surface_, __pyx_t_5);
    __pyx_t_5 = 0;
 05698: 
 05699: 
 05700: 
 05701: 
 05702: 
 05703: @cython.binding(False)
 05704: @cython.binding(False)
 05705: @cython.boundscheck(False)
 05706: @cython.wraparound(False)
 05707: @cython.nonecheck(False)
 05708: @cython.cdivision(True)
 05709: @cython.profile(False)
+05710: cpdef inline object shader_bloom_fast(
static PyObject *__pyx_pw_12PygameShader_6shader_145shader_bloom_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_shader_bloom_fast(PyObject *__pyx_v_surface_, int __pyx_v_threshold_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_shader_bloom_fast *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_AddTraceback("PygameShader.shader.shader_bloom_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_surface_copy);
  __Pyx_XDECREF(__pyx_v_s2);
  __Pyx_XDECREF(__pyx_v_s4);
  __Pyx_XDECREF(__pyx_v_s8);
  __Pyx_XDECREF(__pyx_v_s16);
  __Pyx_XDECREF(__pyx_v_s2_array);
  __Pyx_XDECREF(__pyx_v_b2_blurred);
  __Pyx_XDECREF(__pyx_v_s4_array);
  __Pyx_XDECREF(__pyx_v_b4_blurred);
  __Pyx_XDECREF(__pyx_v_s8_array);
  __Pyx_XDECREF(__pyx_v_b8_blurred);
  __Pyx_XDECREF(__pyx_v_s16_array);
  __Pyx_XDECREF(__pyx_v_b16_blurred);
  __Pyx_XDECREF(__pyx_v_surface_);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_145shader_bloom_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_144shader_bloom_fast[] = "\n    BLOOM EFFECT\n\n    :param surface_  : pygame.Surface; compatible 32-24 bit containing RGB pixel values\n    :param threshold_: integer; Bloom threshold value, small value cause greater bloon effect\n    :param fast_     : boolean; True will increase the speed of the algorithm since only the S16 surface is blit\n    :param factor_   : integer; Texture reduction value, must be in range [0, 4] and correspond to the dividing texture\n        factor (div 1, div 2, div 4, div 8)\n    :return          : Return a pygame Surface with the bloom effect (24 bit format)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_145shader_bloom_fast(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_threshold_;
  int __pyx_v_fast_;
  unsigned short __pyx_v_factor_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_bloom_fast (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_threshold,&__pyx_n_s_fast,&__pyx_n_s_factor,0};
    PyObject* values[4] = {0,0,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  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_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_threshold)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("shader_bloom_fast", 0, 2, 4, 1); __PYX_ERR(1, 5710, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fast);
          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_factor);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "shader_bloom_fast") < 0)) __PYX_ERR(1, 5710, __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_surface_ = values[0];
    __pyx_v_threshold_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_threshold_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5712, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_fast_ = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_fast_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5713, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_144shader_bloom_fast(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_threshold_, int __pyx_v_fast_, unsigned short __pyx_v_factor_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_bloom_fast", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.fast_ = __pyx_v_fast_;
  __pyx_t_2.factor_ = __pyx_v_factor_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_shader_bloom_fast(__pyx_v_surface_, __pyx_v_threshold_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5710, __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.shader.shader_bloom_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05711:         surface_,
 05712:         int threshold_,
+05713:         bint fast_ = False,
  int __pyx_v_fast_ = ((int)0);
  unsigned short __pyx_v_factor_ = ((unsigned short)2);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  CYTHON_UNUSED int __pyx_v_bit_size;
  int __pyx_v_w2;
  int __pyx_v_h2;
  int __pyx_v_w4;
  int __pyx_v_h4;
  int __pyx_v_w8;
  int __pyx_v_h8;
  int __pyx_v_w16;
  int __pyx_v_h16;
  int __pyx_v_x2;
  int __pyx_v_x4;
  int __pyx_v_x8;
  int __pyx_v_x16;
  PyObject *__pyx_v_surface_copy = NULL;
  PyObject *__pyx_v_s2 = NULL;
  PyObject *__pyx_v_s4 = NULL;
  PyObject *__pyx_v_s8 = NULL;
  PyObject *__pyx_v_s16 = NULL;
  PyObject *__pyx_v_s2_array = NULL;
  PyObject *__pyx_v_b2_blurred = NULL;
  PyObject *__pyx_v_s4_array = NULL;
  PyObject *__pyx_v_b4_blurred = NULL;
  PyObject *__pyx_v_s8_array = NULL;
  PyObject *__pyx_v_b8_blurred = NULL;
  PyObject *__pyx_v_s16_array = NULL;
  PyObject *__pyx_v_b16_blurred = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_bloom_fast", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fast_ = __pyx_optional_args->fast_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_factor_ = __pyx_optional_args->factor_;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_surface_);
/* … */
      __pyx_v_fast_ = ((int)0);
    }
    if (values[3]) {
      __pyx_v_factor_ = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_factor_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 5714, __pyx_L3_error)
    } else {
      __pyx_v_factor_ = ((unsigned short)2);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("shader_bloom_fast", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 5710, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.shader_bloom_fast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_144shader_bloom_fast(__pyx_self, __pyx_v_surface_, __pyx_v_threshold_, __pyx_v_fast_, __pyx_v_factor_);
 05714:         unsigned short int factor_ = 2
 05715: ):
 05716:     """
 05717:     BLOOM EFFECT
 05718: 
 05719:     :param surface_  : pygame.Surface; compatible 32-24 bit containing RGB pixel values
 05720:     :param threshold_: integer; Bloom threshold value, small value cause greater bloon effect
 05721:     :param fast_     : boolean; True will increase the speed of the algorithm since only the S16 surface is blit
 05722:     :param factor_   : integer; Texture reduction value, must be in range [0, 4] and correspond to the dividing texture
 05723:         factor (div 1, div 2, div 4, div 8)
 05724:     :return          : Return a pygame Surface with the bloom effect (24 bit format)
 05725:     """
 05726: 
+05727:     assert isinstance(surface_, pygame.Surface), "Argument surface_ must be a pygame.Surface got %s " % type(surface_)
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 5727, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyga, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5727, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 5727, __pyx_L1_error)
    }
  }
  #endif
+05728:     assert 0 <= threshold_ <= 255, "Argument threshold must be in range [0 ... 255] got %s " % threshold_
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (0 <= __pyx_v_threshold_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_threshold_ <= 0xFF);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_threshold_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5728, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Argument_threshold_must_be_in_ra_2, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5728, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 5728, __pyx_L1_error)
    }
  }
  #endif
+05729:     assert 0 <= factor_ <= 4, "Argument factor_ must be in range [0 ... 4] got %s " % factor_
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = (0 <= __pyx_v_factor_);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_factor_ <= 4);
    }
    if (unlikely(!(__pyx_t_3 != 0))) {
      __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_factor_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5729, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Argument_factor__must_be_in_rang, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5729, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 5729, __pyx_L1_error)
    }
  }
  #endif
+05730:     assert isinstance(fast_, bool), "Argument fast_ must be boolean True | False got %s " % type(fast_)
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_fast_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = ((PyObject*)&PyBool_Type);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = PyObject_IsInstance(__pyx_t_2, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 5730, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
      __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_fast_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5730, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_fast__must_be_boolean_T, ((PyObject *)Py_TYPE(__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5730, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 5730, __pyx_L1_error)
    }
  }
  #endif
 05731: 
 05732:     cdef:
 05733:         Py_ssize_t  w, h
 05734:         int bit_size
 05735:         int w2, h2, w4, h4, w8, h8, w16, h16
+05736:         bint x2, x4, x8, x16 = False
  __pyx_v_x16 = 0;
 05737: 
+05738:     surface_copy = surface_.copy()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_copy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_surface_copy = __pyx_t_2;
  __pyx_t_2 = 0;
+05739:     surface_ = smoothscale(surface_,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
+05740:                            (surface_.get_width() >> factor_, surface_.get_height() >> factor_))
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_width); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(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_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_unsigned_short(__pyx_v_factor_); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyNumber_Rshift(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_height); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_unsigned_short(__pyx_v_factor_); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = PyNumber_Rshift(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
  __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_surface_, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5739, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_surface_, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5739, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5739, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_v_surface_);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5739, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_surface_, __pyx_t_2);
  __pyx_t_2 = 0;
 05741: 
+05742:     w, h = surface_.get_size()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5742, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5742, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    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(1, 5742, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_6);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_6 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_6)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_4), 2) < 0) __PYX_ERR(1, 5742, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 5742, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 5742, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 5742, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_w = __pyx_t_10;
  __pyx_v_h = __pyx_t_11;
+05743:     bit_size = surface_.get_bitsize()
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bitsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5743, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_bit_size = __pyx_t_8;
 05744: 
 05745: 
 05746: 
+05747:     w2, h2   = <int>w >> 1, <int>h >> 1
  __pyx_t_12 = (((int)__pyx_v_w) >> 1);
  __pyx_t_13 = (((int)__pyx_v_h) >> 1);
  __pyx_v_w2 = __pyx_t_12;
  __pyx_v_h2 = __pyx_t_13;
+05748:     w4, h4   = w2 >> 1, h2 >> 1
  __pyx_t_13 = (__pyx_v_w2 >> 1);
  __pyx_t_12 = (__pyx_v_h2 >> 1);
  __pyx_v_w4 = __pyx_t_13;
  __pyx_v_h4 = __pyx_t_12;
+05749:     w8, h8   = w4 >> 1, h4 >> 1
  __pyx_t_12 = (__pyx_v_w4 >> 1);
  __pyx_t_13 = (__pyx_v_h4 >> 1);
  __pyx_v_w8 = __pyx_t_12;
  __pyx_v_h8 = __pyx_t_13;
+05750:     w16, h16 = w8 >> 1, h8 >> 1
  __pyx_t_13 = (__pyx_v_w8 >> 1);
  __pyx_t_12 = (__pyx_v_h8 >> 1);
  __pyx_v_w16 = __pyx_t_13;
  __pyx_v_h16 = __pyx_t_12;
 05751: 
+05752:     if w16 == 0 or h16 == 0:
  __pyx_t_14 = ((__pyx_v_w16 == 0) != 0);
  if (!__pyx_t_14) {
  } else {
    __pyx_t_3 = __pyx_t_14;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_14 = ((__pyx_v_h16 == 0) != 0);
  __pyx_t_3 = __pyx_t_14;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+05753:         raise ValueError(
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5753, __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(1, 5753, __pyx_L1_error)
/* … */
  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_Image_too_small_and_cannot_be_p_2); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(1, 5753, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
 05754:             "\nImage too small and cannot be processed.\n"
 05755:             "Try to increase the size of the image or decrease the factor_ value (default 2)")
 05756: 
+05757:     if w2 > 0 and h2 > 0:
  __pyx_t_14 = ((__pyx_v_w2 > 0) != 0);
  if (__pyx_t_14) {
  } else {
    __pyx_t_3 = __pyx_t_14;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_14 = ((__pyx_v_h2 > 0) != 0);
  __pyx_t_3 = __pyx_t_14;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L8;
  }
+05758:         x2 = True
    __pyx_v_x2 = 1;
 05759:     else:
+05760:         x2 = False
  /*else*/ {
    __pyx_v_x2 = 0;
  }
  __pyx_L8:;
 05761: 
+05762:     if w4 > 0 and h4 > 0:
  __pyx_t_14 = ((__pyx_v_w4 > 0) != 0);
  if (__pyx_t_14) {
  } else {
    __pyx_t_3 = __pyx_t_14;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_14 = ((__pyx_v_h4 > 0) != 0);
  __pyx_t_3 = __pyx_t_14;
  __pyx_L12_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L11;
  }
+05763:         x4 = True
    __pyx_v_x4 = 1;
 05764:     else:
+05765:         x4 = False
  /*else*/ {
    __pyx_v_x4 = 0;
  }
  __pyx_L11:;
 05766: 
+05767:     if w8 > 0 and h8 > 0:
  __pyx_t_14 = ((__pyx_v_w8 > 0) != 0);
  if (__pyx_t_14) {
  } else {
    __pyx_t_3 = __pyx_t_14;
    goto __pyx_L15_bool_binop_done;
  }
  __pyx_t_14 = ((__pyx_v_h8 > 0) != 0);
  __pyx_t_3 = __pyx_t_14;
  __pyx_L15_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L14;
  }
+05768:         x8 = True
    __pyx_v_x8 = 1;
 05769:     else:
+05770:         x8 = False
  /*else*/ {
    __pyx_v_x8 = 0;
  }
  __pyx_L14:;
 05771: 
+05772:     if w16 > 0 and h16 > 0:
  __pyx_t_14 = ((__pyx_v_w16 > 0) != 0);
  if (__pyx_t_14) {
  } else {
    __pyx_t_3 = __pyx_t_14;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_14 = ((__pyx_v_h16 > 0) != 0);
  __pyx_t_3 = __pyx_t_14;
  __pyx_L18_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L17;
  }
+05773:         x16 = True
    __pyx_v_x16 = 1;
 05774:     else:
+05775:         x16 = False
  /*else*/ {
    __pyx_v_x16 = 0;
  }
  __pyx_L17:;
 05776: 
+05777:     s2, s4, s8, s16 = None, None, None, None
  __pyx_t_2 = Py_None;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_6 = Py_None;
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_1 = Py_None;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_4 = Py_None;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_v_s2 = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_s4 = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_s8 = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_s16 = __pyx_t_4;
  __pyx_t_4 = 0;
 05778: 
 05779:     # SUBSURFACE DOWNSCALE CANNOT
 05780:     # BE PERFORMED AND WILL RAISE AN EXCEPTION
+05781:     if not x2:
  __pyx_t_3 = ((!(__pyx_v_x2 != 0)) != 0);
  if (__pyx_t_3) {
/* … */
  }
+05782:         return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
 05783: 
+05784:     if fast_:
  __pyx_t_3 = (__pyx_v_fast_ != 0);
  if (__pyx_t_3) {
/* … */
  }
+05785:         x2, x4, x8 = False, False, False
    __pyx_t_3 = 0;
    __pyx_t_14 = 0;
    __pyx_t_15 = 0;
    __pyx_v_x2 = __pyx_t_3;
    __pyx_v_x4 = __pyx_t_14;
    __pyx_v_x8 = __pyx_t_15;
 05786: 
 05787: 
 05788:     # FIRST SUBSURFACE DOWNSCALE x2
 05789:     # THIS IS THE MOST EXPENSIVE IN TERM OF PROCESSING TIME
+05790:     if x2:
  __pyx_t_15 = (__pyx_v_x2 != 0);
  if (__pyx_t_15) {
/* … */
  }
+05791:         s2 = scale(surface_, (w2, h2))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_w2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
    __pyx_t_6 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5791, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface_, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5791, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5791, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5791, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_s2, __pyx_t_4);
    __pyx_t_4 = 0;
+05792:         s2 = bpf24_c(pixels3d(s2), threshold=threshold_)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_v_s2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_s2);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5792, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_17.__pyx_n = 1;
    __pyx_t_17.threshold = __pyx_v_threshold_;
    __pyx_t_4 = __pyx_f_12PygameShader_6shader_bpf24_c(__pyx_t_16, &__pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
    __Pyx_DECREF_SET(__pyx_v_s2, __pyx_t_4);
    __pyx_t_4 = 0;
+05793:         s2_array = numpy.array(s2.get_view('3'), dtype=numpy.uint8)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_s2, __pyx_n_s_get_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5793, __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(1, 5793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 5793, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_s2_array = __pyx_t_2;
    __pyx_t_2 = 0;
+05794:         shader_blur5x5_array24_inplace_c(s2_array)
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s2_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5794, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_16, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
+05795:         b2_blurred = make_surface(s2_array)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_v_s2_array) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_s2_array);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_b2_blurred = __pyx_t_2;
    __pyx_t_2 = 0;
+05796:         s2 = smoothscale(b2_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
    __pyx_t_6 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_b2_blurred, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5796, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_b2_blurred, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5796, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b2_blurred);
      __Pyx_GIVEREF(__pyx_v_b2_blurred);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_b2_blurred);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_s2, __pyx_t_2);
    __pyx_t_2 = 0;
 05797: 
 05798: 
 05799:     # SECOND SUBSURFACE DOWNSCALE x4
 05800:     # THIS IS THE SECOND MOST EXPENSIVE IN TERM OF PROCESSING TIME
+05801:     if x4:
  __pyx_t_15 = (__pyx_v_x4 != 0);
  if (__pyx_t_15) {
/* … */
  }
+05802:         s4 = scale(surface_, (w4, h4))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7);
    __pyx_t_6 = 0;
    __pyx_t_7 = 0;
    __pyx_t_7 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_surface_, __pyx_t_1};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5802, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_surface_, __pyx_t_1};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5802, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5802, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5802, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_s4, __pyx_t_2);
    __pyx_t_2 = 0;
+05803:         s4 = bpf24_c(pixels3d(s4), threshold=threshold_)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_v_s4) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_s4);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5803, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_17.__pyx_n = 1;
    __pyx_t_17.threshold = __pyx_v_threshold_;
    __pyx_t_2 = __pyx_f_12PygameShader_6shader_bpf24_c(__pyx_t_16, &__pyx_t_17); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
    __Pyx_DECREF_SET(__pyx_v_s4, __pyx_t_2);
    __pyx_t_2 = 0;
+05804:         s4_array = numpy.array(s4.get_view('3'), dtype=numpy.uint8)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_s4, __pyx_n_s_get_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_s4_array = __pyx_t_7;
    __pyx_t_7 = 0;
+05805:         shader_blur5x5_array24_inplace_c(s4_array)
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s4_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5805, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_16, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
+05806:         b4_blurred = make_surface(s4_array)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5806, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_7 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_v_s4_array) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_s4_array);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5806, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_b4_blurred = __pyx_t_7;
    __pyx_t_7 = 0;
+05807:         s4 = smoothscale(b4_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
    __pyx_t_6 = 0;
    __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_b4_blurred, __pyx_t_1};
      __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5807, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_b4_blurred, __pyx_t_1};
      __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5807, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5807, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b4_blurred);
      __Pyx_GIVEREF(__pyx_v_b4_blurred);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_b4_blurred);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5807, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_s4, __pyx_t_7);
    __pyx_t_7 = 0;
 05808: 
 05809: 
 05810:     # THIRD SUBSURFACE DOWNSCALE x8
+05811:     if x8:
  __pyx_t_15 = (__pyx_v_x8 != 0);
  if (__pyx_t_15) {
/* … */
  }
+05812:         s8 = scale(surface_, (w8, h8))
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5812, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_w8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5812, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_h8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5812, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5812, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
    __pyx_t_6 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_surface_, __pyx_t_4};
      __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5812, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_surface_, __pyx_t_4};
      __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5812, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5812, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5812, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_s8, __pyx_t_7);
    __pyx_t_7 = 0;
+05813:         s8 = bpf24_c(pixels3d(s8), threshold=threshold_)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_7 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_v_s8) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_s8);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5813, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_17.__pyx_n = 1;
    __pyx_t_17.threshold = __pyx_v_threshold_;
    __pyx_t_7 = __pyx_f_12PygameShader_6shader_bpf24_c(__pyx_t_16, &__pyx_t_17); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
    __Pyx_DECREF_SET(__pyx_v_s8, __pyx_t_7);
    __pyx_t_7 = 0;
+05814:         s8_array = numpy.array(s8.get_view('3'), dtype=numpy.uint8)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_array_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_s8, __pyx_n_s_get_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_4, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_s8_array = __pyx_t_1;
    __pyx_t_1 = 0;
+05815:         shader_blur5x5_array24_inplace_c(s8_array)
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s8_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5815, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_16, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
 05816:         # order='C', copy=False), (w8, h8), 'RGB')
+05817:         b8_blurred = make_surface(s8_array)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5817, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_v_s8_array) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_s8_array);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5817, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_b8_blurred = __pyx_t_1;
    __pyx_t_1 = 0;
+05818:         s8 = smoothscale(b8_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
    __pyx_t_6 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_b8_blurred, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5818, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_b8_blurred, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5818, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b8_blurred);
      __Pyx_GIVEREF(__pyx_v_b8_blurred);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_b8_blurred);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF_SET(__pyx_v_s8, __pyx_t_1);
    __pyx_t_1 = 0;
 05819: 
 05820: 
 05821:     # FOURTH SUBSURFACE DOWNSCALE x16
 05822:     # LESS SIGNIFICANT IN TERMS OF RENDERING AND PROCESSING TIME
+05823:     if x16:
  __pyx_t_15 = (__pyx_v_x16 != 0);
  if (__pyx_t_15) {
/* … */
  }
+05824:         s16 = scale(surface_, (w16, h16))
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_scale); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_w16); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_h16); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
    __pyx_t_6 = 0;
    __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_surface_, __pyx_t_2};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5824, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_surface_, __pyx_t_2};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5824, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5824, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5824, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF_SET(__pyx_v_s16, __pyx_t_1);
    __pyx_t_1 = 0;
+05825:         s16 = bpf24_c(pixels3d(s16), threshold=threshold_)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_v_s16) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_s16);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5825, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_17.__pyx_n = 1;
    __pyx_t_17.threshold = __pyx_v_threshold_;
    __pyx_t_1 = __pyx_f_12PygameShader_6shader_bpf24_c(__pyx_t_16, &__pyx_t_17); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
    __Pyx_DECREF_SET(__pyx_v_s16, __pyx_t_1);
    __pyx_t_1 = 0;
+05826:         s16_array = numpy.array(s16.get_view('3'), dtype=numpy.uint8)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_s16, __pyx_n_s_get_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_s16_array = __pyx_t_4;
    __pyx_t_4 = 0;
+05827:         shader_blur5x5_array24_inplace_c(s16_array)
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s16_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5827, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_16, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
+05828:         shader_blur5x5_array24_inplace_c(s16_array)
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s16_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 5828, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_16, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
+05829:         b16_blurred = make_surface(s16_array)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_v_s16_array) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_s16_array);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_b16_blurred = __pyx_t_4;
    __pyx_t_4 = 0;
+05830:         s16 = smoothscale(b16_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
    __pyx_t_6 = 0;
    __pyx_t_7 = 0;
    __pyx_t_7 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_b16_blurred, __pyx_t_2};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5830, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_b16_blurred, __pyx_t_2};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5830, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b16_blurred);
      __Pyx_GIVEREF(__pyx_v_b16_blurred);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_b16_blurred);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_s16, __pyx_t_4);
    __pyx_t_4 = 0;
 05831: 
+05832:     if fast_:
  __pyx_t_15 = (__pyx_v_fast_ != 0);
  if (__pyx_t_15) {
/* … */
    goto __pyx_L26;
  }
+05833:         s16 = smoothscale(s16, (w << factor_, h << factor_))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyInt_FromSsize_t((__pyx_v_w << __pyx_v_factor_)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_h << __pyx_v_factor_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
    __pyx_t_6 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_s16, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5833, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_s16, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5833, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5833, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_s16);
      __Pyx_GIVEREF(__pyx_v_s16);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_s16);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5833, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_s16, __pyx_t_4);
    __pyx_t_4 = 0;
+05834:         surface_copy.blit(s16, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_copy, __pyx_n_s_blit); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_s16);
    __Pyx_GIVEREF(__pyx_v_s16);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s16);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_tuple__12);
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_special_flags, __pyx_t_7) < 0) __PYX_ERR(1, 5834, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 05835:     else:
+05836:         s2.blit(s4, (0, 0), special_flags=BLEND_RGB_ADD)
  /*else*/ {
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_s2, __pyx_n_s_blit); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_s4);
    __Pyx_GIVEREF(__pyx_v_s4);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_s4);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_tuple__12);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_special_flags, __pyx_t_4) < 0) __PYX_ERR(1, 5836, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+05837:         s2.blit(s8, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_s2, __pyx_n_s_blit); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5837, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5837, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_s8);
    __Pyx_GIVEREF(__pyx_v_s8);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s8);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_tuple__12);
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5837, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5837, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_special_flags, __pyx_t_7) < 0) __PYX_ERR(1, 5837, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5837, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+05838:         s2.blit(s16, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_s2, __pyx_n_s_blit); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_s16);
    __Pyx_GIVEREF(__pyx_v_s16);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_s16);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_tuple__12);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_special_flags, __pyx_t_4) < 0) __PYX_ERR(1, 5838, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+05839:         s2 = smoothscale(s2, (w << factor_, h << factor_))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyInt_FromSsize_t((__pyx_v_w << __pyx_v_factor_)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_h << __pyx_v_factor_)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
    __pyx_t_6 = 0;
    __pyx_t_7 = 0;
    __pyx_t_7 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_s2, __pyx_t_2};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5839, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_s2, __pyx_t_2};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5839, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5839, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_INCREF(__pyx_v_s2);
      __Pyx_GIVEREF(__pyx_v_s2);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_s2);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5839, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_s2, __pyx_t_4);
    __pyx_t_4 = 0;
+05840:         surface_copy.blit(s2, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_copy, __pyx_n_s_blit); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_s2);
    __Pyx_GIVEREF(__pyx_v_s2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s2);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_tuple__12);
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_special_flags, __pyx_t_2) < 0) __PYX_ERR(1, 5840, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L26:;
 05841: 
+05842:     return surface_copy
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_surface_copy);
  __pyx_r = __pyx_v_surface_copy;
  goto __pyx_L0;
 05843: 
 05844: 
 05845: 
 05846: @cython.binding(False)
 05847: @cython.binding(False)
 05848: @cython.boundscheck(False)
 05849: @cython.wraparound(False)
 05850: @cython.nonecheck(False)
 05851: @cython.cdivision(True)
 05852: @cython.profile(False)
+05853: cpdef void shader_bloom_fast1(
static PyObject *__pyx_pw_12PygameShader_6shader_147shader_bloom_fast1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static void __pyx_f_12PygameShader_6shader_shader_bloom_fast1(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_shader_bloom_fast1 *__pyx_optional_args) {
  unsigned short __pyx_v_smooth_ = ((unsigned short)3);
  unsigned int __pyx_v_threshold_ = ((unsigned int)0);
  unsigned short __pyx_v_flag_ = __pyx_k__30;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_13);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_bloom_fast1", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s2);
  __PYX_XDEC_MEMVIEW(&__pyx_v_s2_array, 1);
  __Pyx_XDECREF(__pyx_v_b2_blurred);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_147shader_bloom_fast1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_146shader_bloom_fast1[] = "\n    BLOOM EFFECT (SIMPLIFY VERSION) \n    \n    This version is compatible with moving object in the display.\n    \n    The other bloom versions cause the halo of light to be offset from moving \n    objects due to the re-scaling (down sampling) of the sub-surfaces and the loss \n    of accuracy.\n    \n    The quantity of bloom can be adjust with the bright pass filter threshold\n     (variable threshold_). The variable can help you to choose what level of \n     light can trigger a bloom effect. \n    The lowest the value the brightest the effect. \n    \n    The smooth factor will help to spread the light homogeneously around the objects. \n    A large number of smooth will cast the bloom over the entire scene and diminished \n    the overall bloom effect, while a small value will pixelate the hallo around objects \n    but will generate the brightest effect on objects. \n    When smooth is below 3, the halo appear to be slightly pixelated. \n    \n    You can use the saturation to generate saturated colors within the light \n    effect.\n    The flag can be used to create different special effect with the light within the \n    pygame display. The default value is pygame.BLEND_RGB_ADD and allow to blend \n    the bloom to the display. \n    Nevertheless you cann also use any of the other flags such as BLEND_RGB_MAX, BLEND_RGB_SUB etc \n    \n    This effect is applied inplace\n    \n    :param surface_    : pygame.Surface; compatible 32-24 bit containing RGB pixel values \n    :param smooth_     : integer; Smooth the hallow default 3 (gaussian kernel)\n    :param threshold_  : integer; BPF threshold default 20\n    :param flag_       : integer; pygame flag to use (default is BLEND_RGB_ADD)\n    :param saturation_ : bool; True | False include saturation effect to the halo  \n    :return            : void \n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_147shader_bloom_fast1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  unsigned short __pyx_v_smooth_;
  unsigned int __pyx_v_threshold_;
  unsigned short __pyx_v_flag_;
  int __pyx_v_saturation_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_bloom_fast1 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_smooth,&__pyx_n_s_threshold,&__pyx_n_s_flag,&__pyx_n_s_saturation,0};
    PyObject* values[5] = {0,0,0,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  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_surface)) != 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_smooth);
          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_threshold);
          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_flag);
          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_saturation);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "shader_bloom_fast1") < 0)) __PYX_ERR(1, 5853, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_surface_ = values[0];
    if (values[1]) {
      __pyx_v_smooth_ = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_smooth_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 5855, __pyx_L3_error)
    } else {
      __pyx_v_smooth_ = ((unsigned short)3);
    }
    if (values[2]) {
      __pyx_v_threshold_ = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_threshold_ == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5856, __pyx_L3_error)
    } else {
      __pyx_v_threshold_ = ((unsigned int)0);
    }
    if (values[3]) {
      __pyx_v_flag_ = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_flag_ == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 5857, __pyx_L3_error)
    } else {
      __pyx_v_flag_ = __pyx_k__30;
    }
    if (values[4]) {
      __pyx_v_saturation_ = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_saturation_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5858, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_146shader_bloom_fast1(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, unsigned short __pyx_v_smooth_, unsigned int __pyx_v_threshold_, unsigned short __pyx_v_flag_, int __pyx_v_saturation_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_bloom_fast1", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 4;
  __pyx_t_1.smooth_ = __pyx_v_smooth_;
  __pyx_t_1.threshold_ = __pyx_v_threshold_;
  __pyx_t_1.flag_ = __pyx_v_flag_;
  __pyx_t_1.saturation_ = __pyx_v_saturation_;
  __pyx_f_12PygameShader_6shader_shader_bloom_fast1(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.shader_bloom_fast1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05854:         object surface_,
 05855:         unsigned short int smooth_ = 3,
 05856:         unsigned int threshold_ = 0,
+05857:         unsigned short int flag_ = BLEND_RGB_ADD,
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 5857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_37 = __Pyx_PyInt_As_unsigned_short(__pyx_t_30); if (unlikely((__pyx_t_37 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 5857, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_k__30 = __pyx_t_37;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 5857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
/* … */
  __pyx_t_37 = __Pyx_PyInt_As_unsigned_short(__pyx_t_30); if (unlikely((__pyx_t_37 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(1, 5857, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_k__30 = __pyx_t_37;
+05858:         bint saturation_ = False
  int __pyx_v_saturation_ = ((int)0);
  int __pyx_v_w;
  int __pyx_v_h;
  CYTHON_UNUSED unsigned int __pyx_v_bit_size;
  unsigned int __pyx_v_w16;
  unsigned int __pyx_v_h16;
  CYTHON_UNUSED int __pyx_v_r;
  PyObject *__pyx_v_s2 = NULL;
  __Pyx_memviewslice __pyx_v_s2_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_b2_blurred = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_bloom_fast1", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_smooth_ = __pyx_optional_args->smooth_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_threshold_ = __pyx_optional_args->threshold_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_flag_ = __pyx_optional_args->flag_;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_saturation_ = __pyx_optional_args->saturation_;
          }
        }
      }
    }
  }
/* … */
      __pyx_v_saturation_ = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("shader_bloom_fast1", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 5853, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.shader_bloom_fast1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_146shader_bloom_fast1(__pyx_self, __pyx_v_surface_, __pyx_v_smooth_, __pyx_v_threshold_, __pyx_v_flag_, __pyx_v_saturation_);
 05859: ):
 05860:     """
 05861:     BLOOM EFFECT (SIMPLIFY VERSION)
 05862: 
 05863:     This version is compatible with moving object in the display.
 05864: 
 05865:     The other bloom versions cause the halo of light to be offset from moving
 05866:     objects due to the re-scaling (down sampling) of the sub-surfaces and the loss
 05867:     of accuracy.
 05868: 
 05869:     The quantity of bloom can be adjust with the bright pass filter threshold
 05870:      (variable threshold_). The variable can help you to choose what level of
 05871:      light can trigger a bloom effect.
 05872:     The lowest the value the brightest the effect.
 05873: 
 05874:     The smooth factor will help to spread the light homogeneously around the objects.
 05875:     A large number of smooth will cast the bloom over the entire scene and diminished
 05876:     the overall bloom effect, while a small value will pixelate the hallo around objects
 05877:     but will generate the brightest effect on objects.
 05878:     When smooth is below 3, the halo appear to be slightly pixelated.
 05879: 
 05880:     You can use the saturation to generate saturated colors within the light
 05881:     effect.
 05882:     The flag can be used to create different special effect with the light within the
 05883:     pygame display. The default value is pygame.BLEND_RGB_ADD and allow to blend
 05884:     the bloom to the display.
 05885:     Nevertheless you cann also use any of the other flags such as BLEND_RGB_MAX, BLEND_RGB_SUB etc
 05886: 
 05887:     This effect is applied inplace
 05888: 
 05889:     :param surface_    : pygame.Surface; compatible 32-24 bit containing RGB pixel values
 05890:     :param smooth_     : integer; Smooth the hallow default 3 (gaussian kernel)
 05891:     :param threshold_  : integer; BPF threshold default 20
 05892:     :param flag_       : integer; pygame flag to use (default is BLEND_RGB_ADD)
 05893:     :param saturation_ : bool; True | False include saturation effect to the halo
 05894:     :return            : void
 05895:     """
 05896: 
 05897:     cdef:
 05898:         int  w, h
 05899:         unsigned int bit_size
 05900:         unsigned int  w16, h16
 05901:         int r
 05902: 
+05903:     assert isinstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 5903, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+05904:         "Argument surface_ must be a pygame.Surface got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyga, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5904, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 5903, __pyx_L1_error)
    }
  }
  #endif
+05905:     if flag_ < 0:
  __pyx_t_3 = ((__pyx_v_flag_ < 0) != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+05906:         raise ValueError("Argument flag_ cannot be < 0")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5906, __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(1, 5906, __pyx_L1_error)
/* … */
  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Argument_flag__cannot_be_0); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 5906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
+05907:     if smooth_ < 0:
  __pyx_t_3 = ((__pyx_v_smooth_ < 0) != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+05908:         raise ValueError("Argument smooth_ cannot be < 0")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5908, __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(1, 5908, __pyx_L1_error)
/* … */
  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_Argument_smooth__cannot_be_0); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 5908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
 05909: 
+05910:     threshold_ %= <unsigned char>255
  __pyx_v_threshold_ = (__pyx_v_threshold_ % ((unsigned char)0xFF));
 05911: 
+05912:     w, h = surface_.get_size()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    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(1, 5912, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 5912, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 5912, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5912, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5912, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_w = __pyx_t_7;
  __pyx_v_h = __pyx_t_8;
+05913:     bit_size = surface_.get_bitsize()
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bitsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_9 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_bit_size = __pyx_t_9;
 05914: 
+05915:     w16, h16 = w >> 4, h >> 4
  __pyx_t_10 = (__pyx_v_w >> 4);
  __pyx_t_11 = (__pyx_v_h >> 4);
  __pyx_v_w16 = __pyx_t_10;
  __pyx_v_h16 = __pyx_t_11;
 05916: 
+05917:     if w16 == 0 or h16 == 0:
  __pyx_t_12 = ((__pyx_v_w16 == 0) != 0);
  if (!__pyx_t_12) {
  } else {
    __pyx_t_3 = __pyx_t_12;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_12 = ((__pyx_v_h16 == 0) != 0);
  __pyx_t_3 = __pyx_t_12;
  __pyx_L8_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+05918:         raise ValueError(
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5918, __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(1, 5918, __pyx_L1_error)
 05919:             "\nImage too small and cannot be processed.\n"
 05920:                 "Try to increase the size of the image")
 05921: 
+05922:     s2 = smoothscale(surface_, (w16, h16))
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_w16); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyInt_From_unsigned_int(__pyx_v_h16); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_5);
  __pyx_t_1 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_surface_, __pyx_t_13};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5922, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_surface_, __pyx_t_13};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5922, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_v_surface_);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_8, __pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_8, __pyx_t_13);
    __pyx_t_13 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_s2 = __pyx_t_2;
  __pyx_t_2 = 0;
+05923:     s2.blit(s2, (0, 0), special_flags=BLEND_RGB_ADD)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_s2, __pyx_n_s_blit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_s2);
  __Pyx_GIVEREF(__pyx_v_s2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_s2);
  __Pyx_INCREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_tuple__12);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_special_flags, __pyx_t_13) < 0) __PYX_ERR(1, 5923, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 05924: 
+05925:     cdef unsigned char [ :, :, : ] s2_array = pixels3d(s2)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_13 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_s2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_s2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_13, PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(1, 5925, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_v_s2_array = __pyx_t_14;
  __pyx_t_14.memview = NULL;
  __pyx_t_14.data = NULL;
+05926:     shader_bpf24_inplace_c(s2_array, threshold=threshold_)
  __pyx_t_15.__pyx_n = 1;
  __pyx_t_15.threshold = __pyx_v_threshold_;
  __pyx_f_12PygameShader_6shader_shader_bpf24_inplace_c(__pyx_v_s2_array, &__pyx_t_15); 
 05927: 
+05928:     for r in range(smooth_):
  __pyx_t_16 = __pyx_v_smooth_;
  __pyx_t_17 = __pyx_t_16;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_17; __pyx_t_8+=1) {
    __pyx_v_r = __pyx_t_8;
+05929:         shader_blur5x5_array24_inplace_c(s2_array)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_v_s2_array, NULL);
+05930:         if saturation_ : shader_saturation_array24_inplace_c(s2_array, <float>0.3)
    __pyx_t_3 = (__pyx_v_saturation_ != 0);
    if (__pyx_t_3) {
      __pyx_f_12PygameShader_6shader_shader_saturation_array24_inplace_c(__pyx_v_s2_array, ((float)0.3));
    }
  }
 05931: 
+05932:     b2_blurred = make_surface(numpy.asarray(s2_array))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_s2_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(1, 5932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_18 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_18)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_18, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_13 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_b2_blurred = __pyx_t_13;
  __pyx_t_13 = 0;
+05933:     s2 = smoothscale(b2_blurred, (w, h))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_b2_blurred, __pyx_t_2};
    __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5933, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_b2_blurred, __pyx_t_2};
    __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5933, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_b2_blurred);
    __Pyx_GIVEREF(__pyx_v_b2_blurred);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_8, __pyx_v_b2_blurred);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_8, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_s2, __pyx_t_13);
  __pyx_t_13 = 0;
 05934: 
+05935:     if flag_ is not None and flag_!=0:
  __pyx_t_13 = __Pyx_PyInt_From_unsigned_short(__pyx_v_flag_); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_12 = (__pyx_t_13 != Py_None);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_19 = (__pyx_t_12 != 0);
  if (__pyx_t_19) {
  } else {
    __pyx_t_3 = __pyx_t_19;
    goto __pyx_L14_bool_binop_done;
  }
  __pyx_t_19 = ((__pyx_v_flag_ != 0) != 0);
  __pyx_t_3 = __pyx_t_19;
  __pyx_L14_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L13;
  }
+05936:         surface_.blit(s2, (0, 0), special_flags=flag_)
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_s2);
    __Pyx_GIVEREF(__pyx_v_s2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s2);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_tuple__12);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_flag_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_special_flags, __pyx_t_2) < 0) __PYX_ERR(1, 5936, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 05937:     else:
+05938:         surface_.blit(s2, (0, 0))
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5938, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_s2, __pyx_tuple__12};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5938, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_s2, __pyx_tuple__12};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5938, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_13 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5938, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_s2);
      __Pyx_GIVEREF(__pyx_v_s2);
      PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_8, __pyx_v_s2);
      __Pyx_INCREF(__pyx_tuple__12);
      __Pyx_GIVEREF(__pyx_tuple__12);
      PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_8, __pyx_tuple__12);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_13, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5938, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L13:;
 05939: 
 05940: 
 05941: # cdef unsigned int [:, :, ::1] IMAGE_FISHEYE_MODEL = numpy.zeros((800, 1024, 2), uint32)
 05942: 
 05943: @cython.binding(False)
 05944: @cython.binding(False)
 05945: @cython.boundscheck(False)
 05946: @cython.wraparound(False)
 05947: @cython.nonecheck(False)
 05948: @cython.cdivision(True)
 05949: @cython.profile(False)
+05950: cdef inline shader_fisheye24_footprint_c(
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_shader_fisheye24_footprint_c(Py_ssize_t __pyx_v_w, Py_ssize_t __pyx_v_h, unsigned int __pyx_v_centre_x, unsigned int __pyx_v_centre_y) {
  __Pyx_memviewslice __pyx_v_image_fisheye_model = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_y;
  int __pyx_v_x;
  CYTHON_UNUSED int __pyx_v_v;
  float __pyx_v_ny;
  float __pyx_v_ny2;
  float __pyx_v_nx;
  float __pyx_v_nx2;
  float __pyx_v_r;
  float __pyx_v_theta;
  float __pyx_v_nxn;
  float __pyx_v_nyn;
  float __pyx_v_nr;
  int __pyx_v_x2;
  int __pyx_v_y2;
  CYTHON_UNUSED float __pyx_v_s;
  float __pyx_v_c1;
  float __pyx_v_c2;
  float __pyx_v_w2;
  float __pyx_v_h2;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_fisheye24_footprint_c", 0);
/* … */
  /* 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_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("PygameShader.shader.shader_fisheye24_footprint_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_image_fisheye_model, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05951:         Py_ssize_t w,
 05952:         Py_ssize_t h,
 05953:         unsigned int centre_x,
 05954:         unsigned int centre_y
 05955: ):
 05956: 
 05957:     """
 05958:     CREATE A FISHEYE MODEL TO HOLD THE PIXEL COORDINATES OF A SURFACE/ GAME DISPLAY
 05959: 
 05960:     * The surface and the model must have the same dimensions.
 05961: 
 05962:     Store the fisheye model into an external array image_fisheye_model shape (width, height, 2)
 05963: 
 05964:     IMAGE_FISHEYE_MODEL contains the fisheye transformation coordinate (x2 & y2) that reference
 05965:     the final image pixel position (fisheye model)
 05966:     This method has to be call once before the main loop in order to calculate
 05967:     the projected position for each pixels.
 05968: 
 05969:     :param centre_y: integer; centre y of the effect
 05970:     :param centre_x: integer; centre x of the effect
 05971:     :param w       : integer; width of the model
 05972:     :param h       : integer; height of the model
 05973:     :return        : Return a numpy.ndarray type (w, h, 2) representing the fisheye model (coordinates
 05974:         of all surface pixels passing through the fisheye lens model)
 05975:     """
 05976: 
+05977:     assert w > 0, "Argument w must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_w > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_w_must_be_0);
      __PYX_ERR(1, 5977, __pyx_L1_error)
    }
  }
  #endif
+05978:     assert h > 0, "Argument h must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_h > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_h_must_be_0);
      __PYX_ERR(1, 5978, __pyx_L1_error)
    }
  }
  #endif
 05979: 
 05980:     cdef:
+05981:         unsigned int [:, :, :] image_fisheye_model = numpy.zeros((w, h, 3), numpy.uint32)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5981, __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_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_2 = 0;
  __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  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_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5981, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5981, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5981, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_2);
    __pyx_t_5 = 0;
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5981, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 5981, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_image_fisheye_model = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+05982:         int y=0, x=0, v
  __pyx_v_y = 0;
  __pyx_v_x = 0;
 05983:         float ny, ny2, nx, nx2, r, theta, nxn, nyn, nr
 05984:         int x2, y2
+05985:         float s = <float>w * <float>h
  __pyx_v_s = (((float)__pyx_v_w) * ((float)__pyx_v_h));
+05986:         float c1 = <float>2.0 / <float>h
  __pyx_v_c1 = (((float)2.0) / ((float)__pyx_v_h));
+05987:         float c2 = <float>2.0 / <float>w
  __pyx_v_c2 = (((float)2.0) / ((float)__pyx_v_w));
+05988:         float w2 = <float>w * <float>centre_x/<float>w
  __pyx_v_w2 = ((((float)__pyx_v_w) * ((float)__pyx_v_centre_x)) / ((float)__pyx_v_w));
+05989:         float h2 = <float>h * <float>centre_y/<float>h
  __pyx_v_h2 = ((((float)__pyx_v_h) * ((float)__pyx_v_centre_y)) / ((float)__pyx_v_h));
 05990: 
+05991:     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:;
      }
  }
+05992:         for x in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_9 = __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_11 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_nr) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_nx2) lastprivate(__pyx_v_nxn) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_ny2) lastprivate(__pyx_v_nyn) lastprivate(__pyx_v_r) lastprivate(__pyx_v_theta) lastprivate(__pyx_v_v) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y2) schedule(static)
/* … */
        __pyx_t_9 = __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_11 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_nr) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_nx2) lastprivate(__pyx_v_nxn) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_ny2) lastprivate(__pyx_v_nyn) lastprivate(__pyx_v_r) lastprivate(__pyx_v_theta) lastprivate(__pyx_v_v) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y2) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_10);
                            /* Initialize private variables to invalid values */
                            __pyx_v_nr = ((float)__PYX_NAN());
                            __pyx_v_nx = ((float)__PYX_NAN());
                            __pyx_v_nx2 = ((float)__PYX_NAN());
                            __pyx_v_nxn = ((float)__PYX_NAN());
                            __pyx_v_ny = ((float)__PYX_NAN());
                            __pyx_v_ny2 = ((float)__PYX_NAN());
                            __pyx_v_nyn = ((float)__PYX_NAN());
                            __pyx_v_r = ((float)__PYX_NAN());
                            __pyx_v_theta = ((float)__PYX_NAN());
                            __pyx_v_v = ((int)0xbad0bad0);
                            __pyx_v_x2 = ((int)0xbad0bad0);
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_y2 = ((int)0xbad0bad0);
+05993:             nx = x * c2 - <float>1.0
                            __pyx_v_nx = ((__pyx_v_x * __pyx_v_c2) - ((float)1.0));
+05994:             nx2 = nx * nx
                            __pyx_v_nx2 = (__pyx_v_nx * __pyx_v_nx);
+05995:             for y in range(h):
                            __pyx_t_12 = __pyx_v_h;
                            __pyx_t_13 = __pyx_t_12;
                            for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_13; __pyx_t_6+=1) {
                              __pyx_v_y = __pyx_t_6;
+05996:                 ny = <float>y * c1 - <float>1.0
                              __pyx_v_ny = ((((float)__pyx_v_y) * __pyx_v_c1) - ((float)1.0));
+05997:                 ny2 = ny * ny
                              __pyx_v_ny2 = (__pyx_v_ny * __pyx_v_ny);
+05998:                 r = <float>sqrt(nx2 + ny2)
                              __pyx_v_r = ((float)sqrt((__pyx_v_nx2 + __pyx_v_ny2)));
+05999:                 if <float>0.0 <= r <= <float>1.0:
                              __pyx_t_14 = (((float)0.0) <= __pyx_v_r);
                              if (__pyx_t_14) {
                                __pyx_t_14 = (__pyx_v_r <= ((float)1.0));
                              }
                              __pyx_t_15 = (__pyx_t_14 != 0);
                              if (__pyx_t_15) {
/* … */
                                goto __pyx_L12;
                              }
+06000:                     nr = (r + <float>1.0 - <float>sqrt(<float>1.0 - (nx2 + ny2))) * <float>0.5
                                __pyx_v_nr = (((__pyx_v_r + ((float)1.0)) - ((float)sqrt((((float)1.0) - (__pyx_v_nx2 + __pyx_v_ny2))))) * ((float)0.5));
+06001:                     if nr <= <float>1.0:
                                __pyx_t_15 = ((__pyx_v_nr <= ((float)1.0)) != 0);
                                if (__pyx_t_15) {
/* … */
                                }
+06002:                         theta = <float>atan2(ny, nx)
                                  __pyx_v_theta = ((float)atan2(__pyx_v_ny, __pyx_v_nx));
+06003:                         nxn = nr * <float>cos(theta)
                                  __pyx_v_nxn = (__pyx_v_nr * ((float)cos(__pyx_v_theta)));
+06004:                         nyn = nr * <float>sin(theta)
                                  __pyx_v_nyn = (__pyx_v_nr * ((float)sin(__pyx_v_theta)));
+06005:                         x2 = <int>(nxn * w2 + w2)
                                  __pyx_v_x2 = ((int)((__pyx_v_nxn * __pyx_v_w2) + __pyx_v_w2));
+06006:                         y2 = <int>(nyn * h2 + h2)
                                  __pyx_v_y2 = ((int)((__pyx_v_nyn * __pyx_v_h2) + __pyx_v_h2));
+06007:                         v = <int>(y2 * w + x2)
                                  __pyx_v_v = ((int)((__pyx_v_y2 * __pyx_v_w) + __pyx_v_x2));
+06008:                         image_fisheye_model[x, y, 0] = x2
                                  __pyx_t_16 = __pyx_v_x;
                                  __pyx_t_17 = __pyx_v_y;
                                  __pyx_t_18 = 0;
                                  *((unsigned int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_fisheye_model.data + __pyx_t_16 * __pyx_v_image_fisheye_model.strides[0]) ) + __pyx_t_17 * __pyx_v_image_fisheye_model.strides[1]) ) + __pyx_t_18 * __pyx_v_image_fisheye_model.strides[2]) )) = __pyx_v_x2;
+06009:                         image_fisheye_model[x, y, 1] = y2
                                  __pyx_t_18 = __pyx_v_x;
                                  __pyx_t_17 = __pyx_v_y;
                                  __pyx_t_16 = 1;
                                  *((unsigned int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_fisheye_model.data + __pyx_t_18 * __pyx_v_image_fisheye_model.strides[0]) ) + __pyx_t_17 * __pyx_v_image_fisheye_model.strides[1]) ) + __pyx_t_16 * __pyx_v_image_fisheye_model.strides[2]) )) = __pyx_v_y2;
+06010:                         image_fisheye_model[x, y, 2] = 0
                                  __pyx_t_16 = __pyx_v_x;
                                  __pyx_t_17 = __pyx_v_y;
                                  __pyx_t_18 = 2;
                                  *((unsigned int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_fisheye_model.data + __pyx_t_16 * __pyx_v_image_fisheye_model.strides[0]) ) + __pyx_t_17 * __pyx_v_image_fisheye_model.strides[1]) ) + __pyx_t_18 * __pyx_v_image_fisheye_model.strides[2]) )) = 0;
 06011:                 else:
+06012:                     image_fisheye_model[x, y, 0] = 0
                              /*else*/ {
                                __pyx_t_18 = __pyx_v_x;
                                __pyx_t_17 = __pyx_v_y;
                                __pyx_t_16 = 0;
                                *((unsigned int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_fisheye_model.data + __pyx_t_18 * __pyx_v_image_fisheye_model.strides[0]) ) + __pyx_t_17 * __pyx_v_image_fisheye_model.strides[1]) ) + __pyx_t_16 * __pyx_v_image_fisheye_model.strides[2]) )) = 0;
+06013:                     image_fisheye_model[x, y, 1] = 0
                                __pyx_t_16 = __pyx_v_x;
                                __pyx_t_17 = __pyx_v_y;
                                __pyx_t_18 = 1;
                                *((unsigned int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_fisheye_model.data + __pyx_t_16 * __pyx_v_image_fisheye_model.strides[0]) ) + __pyx_t_17 * __pyx_v_image_fisheye_model.strides[1]) ) + __pyx_t_18 * __pyx_v_image_fisheye_model.strides[2]) )) = 0;
+06014:                     image_fisheye_model[x, y, 2] = 0
                                __pyx_t_18 = __pyx_v_x;
                                __pyx_t_17 = __pyx_v_y;
                                __pyx_t_16 = 2;
                                *((unsigned int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_fisheye_model.data + __pyx_t_18 * __pyx_v_image_fisheye_model.strides[0]) ) + __pyx_t_17 * __pyx_v_image_fisheye_model.strides[1]) ) + __pyx_t_16 * __pyx_v_image_fisheye_model.strides[2]) )) = 0;
                              }
                              __pyx_L12:;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 06015: 
+06016:     return asarray(image_fisheye_model)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6016, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_image_fisheye_model, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6016, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6016, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 06017: 
 06018: @cython.binding(False)
 06019: @cython.binding(False)
 06020: @cython.boundscheck(False)
 06021: @cython.wraparound(False)
 06022: @cython.nonecheck(False)
 06023: @cython.cdivision(True)
 06024: @cython.profile(False)
+06025: cdef inline void shader_fisheye24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_fisheye24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, __Pyx_memviewslice __pyx_v_fisheye_model) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_x;
  int __pyx_v_y;
  __Pyx_memviewslice __pyx_v_rgb_array_copy = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned int *__pyx_v_x2;
  unsigned int *__pyx_v_y2;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_fisheye24_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_fisheye24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_copy, 1);
  __Pyx_RefNannyFinishContext();
}
 06026:         unsigned char [:, :, :] rgb_array_, unsigned int [:, :, :] fisheye_model):
 06027:     """
 06028:     THIS SHADER CAN BE USE TO DISPLAY THE GAME THROUGH A LENS EFFECT
 06029: 
 06030:     Display a fisheye effect in real time given a numpy ndarray referencing the
 06031:     pixels RGB of a Pygame.Surface. In order to accomplish a real time
 06032:     calculation, this algorithm is using a pre-calculated transformation stored
 06033:     in the array fisheye_model.
 06034:     The function shader_fisheye24_footprint_c has to be called prior
 06035:     shader_fisheye24_inplace_c in order to store the transformation values.
 06036: 
 06037:     This shader can be applied directly to the pygame display
 06038: 
 06039:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 06040:      please refer to pygame
 06041:     function pixels3d or array3d to convert an image into a 3d array (library surfarray)
 06042: 
 06043:     :param rgb_array_       : numpy.ndarray shape (width, height, 3) containing RGB pixels
 06044:     :param fisheye_model    : numpy.ndarray shape (width, height, 2) int32, fisheye model
 06045:     containing the pixels
 06046:     coordinates after the fisheye transformation
 06047:     :return                 : void
 06048:     """
 06049: 
 06050:     cdef:
 06051:         Py_ssize_t w, h
+06052:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 06053: 
 06054:     cdef:
 06055:         int x, y
+06056:         unsigned char [:, :, :] rgb_array_copy = numpy.array(rgb_array_, copy=False, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 6056, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 6056, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_rgb_array_copy = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 06057:         unsigned int *x2
 06058:         unsigned int *y2
 06059: 
+06060:     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:;
      }
  }
+06061:         for x in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y2) schedule(static)
/* … */
        __pyx_t_3 = __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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y2) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_9; __pyx_t_2++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_x2 = ((unsigned int *)1);
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_y2 = ((unsigned int *)1);
+06062:             for y in range(h):
                            __pyx_t_10 = __pyx_v_h;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_y = __pyx_t_12;
 06063: 
+06064:                 x2 = &fisheye_model[x, y, <unsigned short int>0]
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              __pyx_v_x2 = (&(*((unsigned int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_fisheye_model.data + __pyx_t_13 * __pyx_v_fisheye_model.strides[0]) ) + __pyx_t_14 * __pyx_v_fisheye_model.strides[1]) ) + __pyx_t_15 * __pyx_v_fisheye_model.strides[2]) ))));
+06065:                 y2 = &fisheye_model[x, y, <unsigned short int>1]
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)1);
                              __pyx_v_y2 = (&(*((unsigned int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_fisheye_model.data + __pyx_t_14 * __pyx_v_fisheye_model.strides[0]) ) + __pyx_t_13 * __pyx_v_fisheye_model.strides[1]) ) + __pyx_t_15 * __pyx_v_fisheye_model.strides[2]) ))));
 06066: 
+06067:                 if x2[0]!=0 and y2[0]!=0:
                              __pyx_t_17 = (((__pyx_v_x2[0]) != 0) != 0);
                              if (__pyx_t_17) {
                              } else {
                                __pyx_t_16 = __pyx_t_17;
                                goto __pyx_L13_bool_binop_done;
                              }
                              __pyx_t_17 = (((__pyx_v_y2[0]) != 0) != 0);
                              __pyx_t_16 = __pyx_t_17;
                              __pyx_L13_bool_binop_done:;
                              if (__pyx_t_16) {
/* … */
                              }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 06068: 
+06069:                     rgb_array_[x, y, <unsigned short int>0] = \
                                __pyx_t_18 = __pyx_v_x;
                                __pyx_t_19 = __pyx_v_y;
                                __pyx_t_20 = ((unsigned short)0);
                                *((unsigned char *) ( /* dim=2 */ (( /* 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_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_13 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[2]) )));
+06070:                         rgb_array_copy[x2[0] % w, y2[0] % h, <unsigned short int>0]
                                __pyx_t_13 = ((__pyx_v_x2[0]) % __pyx_v_w);
                                __pyx_t_14 = ((__pyx_v_y2[0]) % __pyx_v_h);
                                __pyx_t_15 = ((unsigned short)0);
+06071:                     rgb_array_[x, y, <unsigned short int>1] = \
                                __pyx_t_19 = __pyx_v_x;
                                __pyx_t_18 = __pyx_v_y;
                                __pyx_t_20 = ((unsigned short)1);
                                *((unsigned char *) ( /* dim=2 */ (( /* 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_20 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[2]) )));
+06072:                         rgb_array_copy[x2[0] % w, y2[0] % h, <unsigned short int>1]
                                __pyx_t_14 = ((__pyx_v_x2[0]) % __pyx_v_w);
                                __pyx_t_13 = ((__pyx_v_y2[0]) % __pyx_v_h);
                                __pyx_t_15 = ((unsigned short)1);
+06073:                     rgb_array_[x, y, <unsigned short int>2] = \
                                __pyx_t_18 = __pyx_v_x;
                                __pyx_t_19 = __pyx_v_y;
                                __pyx_t_20 = ((unsigned short)2);
                                *((unsigned char *) ( /* dim=2 */ (( /* 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_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_13 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[2]) )));
+06074:                         rgb_array_copy[x2[0] % w, y2[0] % h, <unsigned short int>2]
                                __pyx_t_13 = ((__pyx_v_x2[0]) % __pyx_v_w);
                                __pyx_t_14 = ((__pyx_v_y2[0]) % __pyx_v_h);
                                __pyx_t_15 = ((unsigned short)2);
 06075: 
 06076: 
 06077: 
 06078: 
 06079: @cython.binding(False)
 06080: @cython.binding(False)
 06081: @cython.boundscheck(False)
 06082: @cython.wraparound(False)
 06083: @cython.nonecheck(False)
 06084: @cython.cdivision(True)
 06085: @cython.profile(False)
+06086: cdef inline tuple shader_rain_footprint_inplace_c(Py_ssize_t w, Py_ssize_t h):
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_shader_rain_footprint_inplace_c(Py_ssize_t __pyx_v_w, Py_ssize_t __pyx_v_h) {
  __Pyx_memviewslice __pyx_v_rain_fisheye_model = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_y;
  int __pyx_v_x;
  CYTHON_UNUSED int __pyx_v_v;
  float __pyx_v_ny;
  float __pyx_v_ny2;
  float __pyx_v_nx;
  float __pyx_v_nx2;
  float __pyx_v_r;
  float __pyx_v_theta;
  float __pyx_v_nxn;
  float __pyx_v_nyn;
  float __pyx_v_nr;
  int __pyx_v_x2;
  int __pyx_v_y2;
  CYTHON_UNUSED float __pyx_v_s;
  float __pyx_v_c1;
  float __pyx_v_c2;
  float __pyx_v_w2;
  float __pyx_v_h2;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_rain_footprint_inplace_c", 0);
/* … */
  /* 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_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("PygameShader.shader.shader_rain_footprint_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rain_fisheye_model, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06087:     """
 06088:     CREATE A FISH EYE LENS DEFORMATION MAP/TEXTURE
 06089: 
 06090:     * This function create a texture and its equivalent numpy.ndarray containing the coordinates
 06091:       for each pixels after deformation.
 06092:     * This method must be called once outside of your game main loop
 06093:     * The model can be re-use to display your video game animation without being re-calculated for
 06094:       each frame. This method allow a high fps rate
 06095: 
 06096:     :param w    : integer; Width of the fish eye effect
 06097:     :param h    : integer; height of the fish eye effect
 06098:     :return     : Pygame Surface representing the fish-eye effect and the equivalent numpy.ndarray
 06099:     """
+06100:     assert w > 0, "Argument w must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_w > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_w_must_be_0);
      __PYX_ERR(1, 6100, __pyx_L1_error)
    }
  }
  #endif
+06101:     assert h > 0, "Argument h must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_h > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_h_must_be_0);
      __PYX_ERR(1, 6101, __pyx_L1_error)
    }
  }
  #endif
 06102: 
 06103:     cdef:
+06104:         unsigned int [:, :, ::1] rain_fisheye_model = numpy.zeros((w, h, 3), numpy.uint)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6104, __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_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_2 = 0;
  __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  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_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6104, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6104, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6104, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_2);
    __pyx_t_5 = 0;
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6104, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6104, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_rain_fisheye_model = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+06105:         int y=0, x=0, v
  __pyx_v_y = 0;
  __pyx_v_x = 0;
 06106:         float ny, ny2, nx, nx2, r, theta, nxn, nyn, nr
 06107:         int x2, y2
+06108:         float s = <float>w * <float>h
  __pyx_v_s = (((float)__pyx_v_w) * ((float)__pyx_v_h));
+06109:         float c1 = <float>2.0 / <float>h
  __pyx_v_c1 = (((float)2.0) / ((float)__pyx_v_h));
+06110:         float c2 = <float>2.0 / <float>w
  __pyx_v_c2 = (((float)2.0) / ((float)__pyx_v_w));
+06111:         float w2 = <float>w * <float>0.5
  __pyx_v_w2 = (((float)__pyx_v_w) * ((float)0.5));
+06112:         float h2 = <float>h * <float>0.5
  __pyx_v_h2 = (((float)__pyx_v_h) * ((float)0.5));
 06113: 
+06114:     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:;
      }
  }
+06115:         for x in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_9 = __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_11 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_nr) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_nx2) lastprivate(__pyx_v_nxn) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_ny2) lastprivate(__pyx_v_nyn) lastprivate(__pyx_v_r) lastprivate(__pyx_v_theta) lastprivate(__pyx_v_v) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y2) schedule(static)
/* … */
        __pyx_t_9 = __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_11 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_nr) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_nx2) lastprivate(__pyx_v_nxn) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_ny2) lastprivate(__pyx_v_nyn) lastprivate(__pyx_v_r) lastprivate(__pyx_v_theta) lastprivate(__pyx_v_v) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y2) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_10);
                            /* Initialize private variables to invalid values */
                            __pyx_v_nr = ((float)__PYX_NAN());
                            __pyx_v_nx = ((float)__PYX_NAN());
                            __pyx_v_nx2 = ((float)__PYX_NAN());
                            __pyx_v_nxn = ((float)__PYX_NAN());
                            __pyx_v_ny = ((float)__PYX_NAN());
                            __pyx_v_ny2 = ((float)__PYX_NAN());
                            __pyx_v_nyn = ((float)__PYX_NAN());
                            __pyx_v_r = ((float)__PYX_NAN());
                            __pyx_v_theta = ((float)__PYX_NAN());
                            __pyx_v_v = ((int)0xbad0bad0);
                            __pyx_v_x2 = ((int)0xbad0bad0);
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_y2 = ((int)0xbad0bad0);
+06116:             nx = x * c2 - <float>1.0
                            __pyx_v_nx = ((__pyx_v_x * __pyx_v_c2) - ((float)1.0));
+06117:             nx2 = nx * nx
                            __pyx_v_nx2 = (__pyx_v_nx * __pyx_v_nx);
+06118:             for y in range(h):
                            __pyx_t_12 = __pyx_v_h;
                            __pyx_t_13 = __pyx_t_12;
                            for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_13; __pyx_t_6+=1) {
                              __pyx_v_y = __pyx_t_6;
+06119:                 ny = y * c1 - <float>1.0
                              __pyx_v_ny = ((__pyx_v_y * __pyx_v_c1) - ((float)1.0));
+06120:                 ny2 = ny * ny
                              __pyx_v_ny2 = (__pyx_v_ny * __pyx_v_ny);
+06121:                 r = <float>sqrt(nx2 + ny2)
                              __pyx_v_r = ((float)sqrt((__pyx_v_nx2 + __pyx_v_ny2)));
+06122:                 if <float>0.0 <= r <= <float>1.0:
                              __pyx_t_14 = (((float)0.0) <= __pyx_v_r);
                              if (__pyx_t_14) {
                                __pyx_t_14 = (__pyx_v_r <= ((float)1.0));
                              }
                              __pyx_t_15 = (__pyx_t_14 != 0);
                              if (__pyx_t_15) {
/* … */
                              }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+06123:                     nr = (r + <float>1.0 - <float>sqrt(<float>1.0 - (nx2 + ny2))) * <float>0.45
                                __pyx_v_nr = (((__pyx_v_r + ((float)1.0)) - ((float)sqrt((((float)1.0) - (__pyx_v_nx2 + __pyx_v_ny2))))) * ((float)0.45));
+06124:                     if nr <= <float>1.0:
                                __pyx_t_15 = ((__pyx_v_nr <= ((float)1.0)) != 0);
                                if (__pyx_t_15) {
/* … */
                                }
+06125:                         theta = <float>atan2(ny, nx)
                                  __pyx_v_theta = ((float)atan2(__pyx_v_ny, __pyx_v_nx));
+06126:                         nxn = nr * <float>cos(theta)
                                  __pyx_v_nxn = (__pyx_v_nr * ((float)cos(__pyx_v_theta)));
+06127:                         nyn = nr * <float>sin(theta)
                                  __pyx_v_nyn = (__pyx_v_nr * ((float)sin(__pyx_v_theta)));
+06128:                         x2 = <int>(nxn * w2 + w2)
                                  __pyx_v_x2 = ((int)((__pyx_v_nxn * __pyx_v_w2) + __pyx_v_w2));
+06129:                         y2 = <int>(nyn * h2 + h2)
                                  __pyx_v_y2 = ((int)((__pyx_v_nyn * __pyx_v_h2) + __pyx_v_h2));
+06130:                         v = <int>(y2 * w + x2)
                                  __pyx_v_v = ((int)((__pyx_v_y2 * __pyx_v_w) + __pyx_v_x2));
+06131:                         rain_fisheye_model[x, y, <unsigned short int>0] = x2
                                  __pyx_t_16 = __pyx_v_x;
                                  __pyx_t_17 = __pyx_v_y;
                                  __pyx_t_18 = ((unsigned short)0);
                                  *((unsigned int *) ( /* dim=2 */ ((char *) (((unsigned int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rain_fisheye_model.data + __pyx_t_16 * __pyx_v_rain_fisheye_model.strides[0]) ) + __pyx_t_17 * __pyx_v_rain_fisheye_model.strides[1]) )) + __pyx_t_18)) )) = __pyx_v_x2;
+06132:                         rain_fisheye_model[x, y, <unsigned short int>1] = y2
                                  __pyx_t_17 = __pyx_v_x;
                                  __pyx_t_16 = __pyx_v_y;
                                  __pyx_t_18 = ((unsigned short)1);
                                  *((unsigned int *) ( /* dim=2 */ ((char *) (((unsigned int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rain_fisheye_model.data + __pyx_t_17 * __pyx_v_rain_fisheye_model.strides[0]) ) + __pyx_t_16 * __pyx_v_rain_fisheye_model.strides[1]) )) + __pyx_t_18)) )) = __pyx_v_y2;
+06133:                         rain_fisheye_model[x, y, <unsigned short int>2] = 0
                                  __pyx_t_16 = __pyx_v_x;
                                  __pyx_t_17 = __pyx_v_y;
                                  __pyx_t_18 = ((unsigned short)2);
                                  *((unsigned int *) ( /* dim=2 */ ((char *) (((unsigned int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rain_fisheye_model.data + __pyx_t_16 * __pyx_v_rain_fisheye_model.strides[0]) ) + __pyx_t_17 * __pyx_v_rain_fisheye_model.strides[1]) )) + __pyx_t_18)) )) = 0;
 06134: 
+06135:     return make_surface(asarray(rain_fisheye_model)), asarray(rain_fisheye_model)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_rain_fisheye_model, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_rain_fisheye_model, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_7);
  __pyx_t_7 = 0;
  goto __pyx_L0;
 06136: 
 06137: 
 06138: @cython.binding(False)
 06139: @cython.binding(False)
 06140: @cython.boundscheck(False)
 06141: @cython.wraparound(False)
 06142: @cython.nonecheck(False)
 06143: @cython.cdivision(True)
 06144: @cython.profile(False)
+06145: cdef inline void shader_rain_fisheye24_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_rain_fisheye24_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, __Pyx_memviewslice __pyx_v_rain_fisheye_model) {
  CYTHON_UNUSED Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_x;
  int __pyx_v_y;
  __Pyx_memviewslice __pyx_v_rgb_array_copy = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned int *__pyx_v_x2;
  unsigned int *__pyx_v_y2;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_rain_fisheye24_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_rain_fisheye24_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_copy, 1);
  __Pyx_RefNannyFinishContext();
}
 06146:         unsigned char [:, :, :] rgb_array_,
 06147:         unsigned int [:, :, ::1] rain_fisheye_model
 06148: ):
 06149:     """
 06150:     THIS SHADER CAN BE USED TO SIMULATE RAIN DROPLET OR BUBBLE DISPLAYED ON THE TOP OF
 06151:     THE SCREEN SURFACE.
 06152: 
 06153:     Both array rgb_array_ and rain_fisheye_model must have the same size
 06154: 
 06155:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 06156:     please refer to pygame
 06157:     function pixels3d or array3d to convert an image into a 3d array (library surfarray)
 06158: 
 06159:     1) Always call the method shader_rain_footprint_inplace_c before the main loop.
 06160:        The transformation model doesn't have to be calculated every frames.
 06161:        The above method will generate a pygame texture (24bit) containing the location
 06162:        of each pixels after deformation. It does also return a numpy.ndarray equivalent
 06163:        pixel format that can be used instead of the surface if needed.
 06164: 
 06165:     It uses a fish eye lens deformation to reproduce the deformed background image onto
 06166:     the final image. The operation apply inplace and the surface referenced by the rgb_array_
 06167:     will be modified directly.
 06168:     The fish-eye lens deformation will recreate you game scene into the rain droplet or bubble
 06169:     and create the illusion of animation inside the bubble.
 06170: 
 06171:     * This shader cannot be applied directly to the pygame display as the array passed to the
 06172:     function is a scaled format of the pygame.display (copy not referencing directly the
 06173:     surface pixels)
 06174: 
 06175:     * This algorithm use a pre-calculated fish-eye lens deformation model to boost the overall
 06176:     fps performances, the texture pixel is then transformed with the model without any intensive
 06177:     math calculation.
 06178: 
 06179:     :param rgb_array_           : numpy.ndarray type (w, h, 3) uint8 (unsigned char 0...255)
 06180:     Array referencing a
 06181:     pygame surface (compatible with 24bit format only RGB model)
 06182:     :param rain_fisheye_model   : numpy.ndarray type (w, h, 3) unsigned int containing the
 06183:     the coordinate for each pixels
 06184:     :return                     : void
 06185:     """
 06186: 
 06187:     cdef:
 06188:         Py_ssize_t w, h
+06189:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 06190: 
 06191:     cdef:
 06192:         int x, y
+06193:         unsigned char [:, :, ::1] rgb_array_copy = numpy.array(rgb_array_, copy=True, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 6193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 6193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(1, 6193, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 6193, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_rgb_array_copy = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 06194:         unsigned int *x2
 06195:         unsigned int *y2
 06196: 
+06197:     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:;
      }
  }
+06198:         for x in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y2) schedule(static)
/* … */
        __pyx_t_3 = __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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_y) lastprivate(__pyx_v_y2) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_9; __pyx_t_2++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_x2 = ((unsigned int *)1);
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_y2 = ((unsigned int *)1);
+06199:             for y in range(h):
                            __pyx_t_10 = __pyx_v_h;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_y = __pyx_t_12;
+06200:                 x2 = &rain_fisheye_model[x, y, <unsigned short int>0]
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              __pyx_v_x2 = (&(*((unsigned int *) ( /* dim=2 */ ((char *) (((unsigned int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rain_fisheye_model.data + __pyx_t_13 * __pyx_v_rain_fisheye_model.strides[0]) ) + __pyx_t_14 * __pyx_v_rain_fisheye_model.strides[1]) )) + __pyx_t_15)) ))));
+06201:                 y2 = &rain_fisheye_model[x, y, <unsigned short int>1]
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)1);
                              __pyx_v_y2 = (&(*((unsigned int *) ( /* dim=2 */ ((char *) (((unsigned int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rain_fisheye_model.data + __pyx_t_14 * __pyx_v_rain_fisheye_model.strides[0]) ) + __pyx_t_13 * __pyx_v_rain_fisheye_model.strides[1]) )) + __pyx_t_15)) ))));
 06202: 
+06203:                 rgb_array_[x, y, <unsigned short int>0] = rgb_array_copy[x2[0], y2[0], <unsigned short int>0]
                              __pyx_t_15 = (__pyx_v_x2[0]);
                              __pyx_t_16 = (__pyx_v_y2[0]);
                              __pyx_t_17 = ((unsigned short)0);
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_18 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_17)) )));
+06204:                 rgb_array_[x, y, <unsigned short int>1] = rgb_array_copy[x2[0], y2[0], <unsigned short int>1]
                              __pyx_t_17 = (__pyx_v_x2[0]);
                              __pyx_t_16 = (__pyx_v_y2[0]);
                              __pyx_t_15 = ((unsigned short)1);
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_18 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_17 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_15)) )));
+06205:                 rgb_array_[x, y, <unsigned short int>2] = rgb_array_copy[x2[0], y2[0], <unsigned short int>2]
                              __pyx_t_15 = (__pyx_v_x2[0]);
                              __pyx_t_16 = (__pyx_v_y2[0]);
                              __pyx_t_17 = ((unsigned short)2);
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_18 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_copy.strides[1]) )) + __pyx_t_17)) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 06206: 
 06207: 
 06208: 
 06209: 
 06210: @cython.binding(False)
 06211: @cython.binding(False)
 06212: @cython.boundscheck(False)
 06213: @cython.wraparound(False)
 06214: @cython.nonecheck(False)
 06215: @cython.cdivision(True)
 06216: @cython.profile(False)
+06217: cdef inline void shader_tv_scanline_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_tv_scanline_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, int __pyx_v_frame_) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_j;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  int __pyx_v_frame_2;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_tv_scanline_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 06218:         unsigned char [:, :, :] rgb_array_,
 06219:         int frame_):
 06220:     """
 06221:     SHADER CREATING A TV SCANLINE EFFECT ON PYGAME SURFACE
 06222: 
 06223:     The space between each scanline can by adjusted with the frame_ value.
 06224:     The scanline intensity/colors is lower that the original pixel value
 06225: 
 06226:     * This shader can be apply directly to the pygame display as long as rgb_array_ array reference
 06227:     directly the screen pixels
 06228: 
 06229:     The Array (rgb_array) must be a numpy array shape (w, h, 3) containing RGB pixels,
 06230:     please refer to pygame
 06231:     function pixels3d or array3d to convert an image into a 3d array (library surfarray)
 06232: 
 06233:     :param rgb_array_   : numpy.ndarray shape (w, h, 3) containing RGB pixels
 06234:     :param frame_       : integer; Frame numbre (linear value)
 06235:     :return             : void
 06236:     """
 06237: 
 06238: 
 06239:     cdef:
 06240:         Py_ssize_t w, h
+06241:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 06242: 
 06243:     cdef:
 06244:         int x, y, j
 06245:         unsigned char *r
 06246:         unsigned char *g
 06247:         unsigned char *b
+06248:         int frame_2 = frame_ >> 1
  __pyx_v_frame_2 = (__pyx_v_frame_ >> 1);
 06249: 
+06250:     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:;
      }
  }
+06251:         for y in prange(0, h, frame_, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        __pyx_t_4 = __pyx_v_frame_;
        if ((__pyx_t_4 == 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_5 = (__pyx_t_3 - 0 + __pyx_t_4 - __pyx_t_4/abs(__pyx_t_4)) / __pyx_t_4;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)        __pyx_t_4 = __pyx_v_frame_;
        if ((__pyx_t_4 == 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_5 = (__pyx_t_3 - 0 + __pyx_t_4 - __pyx_t_4/abs(__pyx_t_4)) / __pyx_t_4;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_5; __pyx_t_2++){
                        {
                            __pyx_v_y = (int)(0 + __pyx_t_4 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_x = ((int)0xbad0bad0);
+06252:             for x in range(w):
                            __pyx_t_6 = __pyx_v_w;
                            __pyx_t_7 = __pyx_t_6;
                            for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
                              __pyx_v_x = __pyx_t_8;
+06253:                 for j in range(frame_2):
                              __pyx_t_9 = __pyx_v_frame_2;
                              __pyx_t_10 = __pyx_t_9;
                              for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
                                __pyx_v_j = __pyx_t_11;
+06254:                     if y + j < h - <unsigned short int>1:
                                __pyx_t_12 = (((__pyx_v_y + __pyx_v_j) < (__pyx_v_h - ((unsigned short)1))) != 0);
                                if (__pyx_t_12) {
/* … */
                                  goto __pyx_L14;
                                }
+06255:                         r = &rgb_array_[x, y + j, <unsigned short int>0]
                                  __pyx_t_13 = __pyx_v_x;
                                  __pyx_t_14 = (__pyx_v_y + __pyx_v_j);
                                  __pyx_t_15 = ((unsigned short)0);
                                  __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
+06256:                         g = &rgb_array_[x, y + j, <unsigned short int>1]
                                  __pyx_t_14 = __pyx_v_x;
                                  __pyx_t_13 = (__pyx_v_y + __pyx_v_j);
                                  __pyx_t_15 = ((unsigned short)1);
                                  __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
+06257:                         b = &rgb_array_[x, y + j, <unsigned short int>2]
                                  __pyx_t_13 = __pyx_v_x;
                                  __pyx_t_14 = (__pyx_v_y + __pyx_v_j);
                                  __pyx_t_15 = ((unsigned short)2);
                                  __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
 06258:                     else:
+06259:                         r = &rgb_array_[x, y, <unsigned short int>0]
                                /*else*/ {
                                  __pyx_t_14 = __pyx_v_x;
                                  __pyx_t_13 = __pyx_v_y;
                                  __pyx_t_15 = ((unsigned short)0);
                                  __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
+06260:                         g = &rgb_array_[x, y, <unsigned short int>1]
                                  __pyx_t_13 = __pyx_v_x;
                                  __pyx_t_14 = __pyx_v_y;
                                  __pyx_t_15 = ((unsigned short)1);
                                  __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
+06261:                         b = &rgb_array_[x, y, <unsigned short int>2]
                                  __pyx_t_14 = __pyx_v_x;
                                  __pyx_t_13 = __pyx_v_y;
                                  __pyx_t_15 = ((unsigned short)2);
                                  __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) ))));
                                }
                                __pyx_L14:;
+06262:                     r[0] = <unsigned char> (r[0] * <float>0.65)
                                (__pyx_v_r[0]) = ((unsigned char)((__pyx_v_r[0]) * ((float)0.65)));
+06263:                     g[0] = <unsigned char> (g[0] * <float>0.65)
                                (__pyx_v_g[0]) = ((unsigned char)((__pyx_v_g[0]) * ((float)0.65)));
+06264:                     b[0] = <unsigned char> (b[0] * <float>0.65)
                                (__pyx_v_b[0]) = ((unsigned char)((__pyx_v_b[0]) * ((float)0.65)));
                              }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 06265: 
 06266: 
 06267: @cython.binding(False)
 06268: @cython.binding(False)
 06269: @cython.boundscheck(False)
 06270: @cython.wraparound(False)
 06271: @cython.nonecheck(False)
 06272: @cython.cdivision(True)
 06273: @cython.profile(False)
+06274: cdef inline void shader_rgb_split_inplace_c(object surface_, int offset_):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_rgb_split_inplace_c(PyObject *__pyx_v_surface_, int __pyx_v_offset_) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_z;
  __Pyx_memviewslice __pyx_v_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_red = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_green = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_blue = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_rgb_split_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __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_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_rgb_split_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_red, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_green, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_blue, 1);
  __Pyx_RefNannyFinishContext();
}
 06275:     """
 06276:     THIS SHADER CREATE AN RGB SPLIT EFFECT (SUPERPOSED CHANNEL R, G, B WITH GIVEN OFFSET)
 06277:     The transformation apply inplace
 06278: 
 06279:     The original surface will be used and used for the subsurface blit operation.
 06280:     Each channels will be blit sequentially in the following order RGB
 06281:     Note that channel green and blue will be blit with an additional flag BLEND_RGB_ADD, to mix
 06282:     the channel with the lower layers.
 06283: 
 06284:     * FPS BOOST
 06285:     In order to boost the fps frame rate the original surface to process can be downscale x2
 06286:     and rescale after processing.
 06287: 
 06288:     * This shader can be apply directly to the pygame display by passing the screen equ
 06289:     surface to the
 06290:     method. This is true if the surface passed to the method is not a screen copy or a
 06291:     modified/altered
 06292:     surface (e.g downscale / upscale surface)
 06293: 
 06294:     :param surface_ : pygame Surface to process (24bit format)
 06295:     :param offset_  : integer; offset to add to each channels RGB
 06296:     :return         : void
 06297:     """
 06298:     cdef:
 06299:         Py_ssize_t w, h
+06300:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 6300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 6300, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 6300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 6300, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 6300, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 06301: 
 06302:     cdef:
 06303:         int i, j
+06304:         int z = <int>h * <int>w * <unsigned short int>3
  __pyx_v_z = ((((int)__pyx_v_h) * ((int)__pyx_v_w)) * ((unsigned short)3));
+06305:         unsigned char [:] rgb   = numpy.frombuffer(surface_.get_buffer(), dtype=numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_buffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6305, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_rgb = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+06306:         unsigned char [:] red   = numpy.zeros(z, uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_8 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 6306, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __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;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_red = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+06307:         unsigned char [:] green = numpy.zeros(z, uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
  __pyx_t_8 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 6307, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __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_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_green = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+06308:         unsigned char [:] blue  = numpy.zeros(z, uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_8 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 6308, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6308, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_blue = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 06309: 
 06310: 
+06311:     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:;
      }
  }
 06312: 
+06313:         for i in prange(0, w * h * <unsigned short int>4, <unsigned short int>4,
        __pyx_t_7 = ((__pyx_v_w * __pyx_v_h) * ((unsigned short)4));
        __pyx_t_10 = ((unsigned short)4);
        if ((__pyx_t_10 == 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_11 = (__pyx_t_7 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_11 > 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)        __pyx_t_10 = ((unsigned short)4);
        if ((__pyx_t_10 == 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_11 = (__pyx_t_7 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_11 > 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, __pyx_t_12) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_11; __pyx_t_6++){
                        {
                            __pyx_v_i = (int)(0 + __pyx_t_10 * __pyx_t_6);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
+06314:                         schedule='static', num_threads=THREADS, chunksize=8):
            __pyx_t_12 = 8;
+06315:             j = (i >> <unsigned short int>2) * <unsigned short int>3
                            __pyx_v_j = ((__pyx_v_i >> ((unsigned short)2)) * ((unsigned short)3));
+06316:             red[j]     = rgb[i + <unsigned short int>2]
                            __pyx_t_13 = (__pyx_v_i + ((unsigned short)2));
                            __pyx_t_14 = __pyx_v_j;
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_red.data + __pyx_t_14 * __pyx_v_red.strides[0]) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_13 * __pyx_v_rgb.strides[0]) )));
+06317:             green[j+<unsigned short int>1] = rgb[i + <unsigned short int>1]
                            __pyx_t_13 = (__pyx_v_i + ((unsigned short)1));
                            __pyx_t_14 = (__pyx_v_j + ((unsigned short)1));
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_green.data + __pyx_t_14 * __pyx_v_green.strides[0]) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_13 * __pyx_v_rgb.strides[0]) )));
+06318:             blue[j+<unsigned short int>2]  = rgb[i    ]
                            __pyx_t_13 = __pyx_v_i;
                            __pyx_t_14 = (__pyx_v_j + ((unsigned short)2));
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_blue.data + __pyx_t_14 * __pyx_v_blue.strides[0]) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_13 * __pyx_v_rgb.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
      }
 06319: 
+06320:     del rgb
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
+06321:     surface_.blit(fromstring(bytes(red), (w, h), 'RGB'), (0, 0))
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_red, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_15 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_16 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 6321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 6321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_16);
  PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_16);
  __pyx_t_4 = 0;
  __pyx_t_16 = 0;
  __pyx_t_16 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_16)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_16);
      __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_16, __pyx_t_15, __pyx_t_17, __pyx_n_s_RGB};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6321, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_16, __pyx_t_15, __pyx_t_17, __pyx_n_s_RGB};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6321, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6321, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_16) {
      __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_16); __pyx_t_16 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_12, __pyx_t_15);
    __Pyx_GIVEREF(__pyx_t_17);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_12, __pyx_t_17);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_12, __pyx_n_s_RGB);
    __pyx_t_15 = 0;
    __pyx_t_17 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6321, __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_t_3 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_2, __pyx_tuple__12};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6321, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_2, __pyx_tuple__12};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6321, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6321, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_12, __pyx_t_2);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_12, __pyx_tuple__12);
    __pyx_t_2 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6321, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+06322:     surface_.blit(fromstring(bytes(green), (w, h), 'RGB'), (offset_, offset_),
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_green, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_17 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_17);
  __pyx_t_2 = 0;
  __pyx_t_17 = 0;
  __pyx_t_17 = NULL;
  __pyx_t_12 = 0;
  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 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[4] = {__pyx_t_17, __pyx_t_3, __pyx_t_15, __pyx_n_s_RGB};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6322, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[4] = {__pyx_t_17, __pyx_t_3, __pyx_t_15, __pyx_n_s_RGB};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6322, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6322, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_17) {
      __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_17); __pyx_t_17 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_12, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_12, __pyx_t_15);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_12, __pyx_n_s_RGB);
    __pyx_t_3 = 0;
    __pyx_t_15 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6322, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_offset_); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_offset_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_2);
  __pyx_t_4 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15);
  __pyx_t_1 = 0;
  __pyx_t_15 = 0;
/* … */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+06323:                   special_flags=BLEND_RGB_ADD)
  __pyx_t_15 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_special_flags, __pyx_t_1) < 0) __PYX_ERR(1, 6323, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+06324:     surface_.blit(fromstring(bytes(blue), (w, h), 'RGB'), (offset_ << 1, offset_ << 1),
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_blue, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_3);
  __pyx_t_8 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(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_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_4, __pyx_t_17, __pyx_n_s_RGB};
    __pyx_t_15 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6324, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_4, __pyx_t_17, __pyx_n_s_RGB};
    __pyx_t_15 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6324, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_12, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_17);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_12, __pyx_t_17);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_12, __pyx_n_s_RGB);
    __pyx_t_4 = 0;
    __pyx_t_17 = 0;
    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_offset_ << 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyInt_From_long((__pyx_v_offset_ << 1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_8);
  __pyx_t_2 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_17);
  __pyx_t_15 = 0;
  __pyx_t_17 = 0;
/* … */
  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_17); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+06325:                   special_flags=BLEND_RGB_ADD)
  __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 6325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_special_flags, __pyx_t_15) < 0) __PYX_ERR(1, 6325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 06326: 
 06327: 
 06328: 
 06329: @cython.binding(False)
 06330: @cython.binding(False)
 06331: @cython.boundscheck(False)
 06332: @cython.wraparound(False)
 06333: @cython.nonecheck(False)
 06334: @cython.cdivision(True)
 06335: @cython.profile(False)
+06336: cdef shader_rgb_split_c(object surface_, int offset_):
static PyObject *__pyx_f_12PygameShader_6shader_shader_rgb_split_c(PyObject *__pyx_v_surface_, int __pyx_v_offset_) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_z;
  __Pyx_memviewslice __pyx_v_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_red = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_green = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_blue = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_new_surface = NULL;
  PyObject *__pyx_v_red_ = NULL;
  PyObject *__pyx_v_green_ = NULL;
  PyObject *__pyx_v_blue_ = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_rgb_split_c", 0);
/* … */
  /* 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_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("PygameShader.shader.shader_rgb_split_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_red, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_green, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_blue, 1);
  __Pyx_XDECREF(__pyx_v_new_surface);
  __Pyx_XDECREF(__pyx_v_red_);
  __Pyx_XDECREF(__pyx_v_green_);
  __Pyx_XDECREF(__pyx_v_blue_);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06337:     """
 06338:     THIS SHADER CREATE AN RGB SPLIT EFFECT (SUPERPOSED CHANNEL R, G, B WITH GIVEN OFFSET)
 06339: 
 06340:     The final image has a different width and height since the offset value is removed to keep only
 06341:     the overlapping R, G, B channels
 06342:     Setting the Offset_ to zero will have no effect to the original image.
 06343: 
 06344:     :param surface_ : pygame Surface to process (24bit format)
 06345:     :param offset_  : integer; offset to add to each channels RGB
 06346:     :return         : void
 06347:     """
 06348: 
 06349:     cdef:
 06350:         Py_ssize_t w, h
+06351:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 6351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 6351, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 6351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 6351, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 6351, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6351, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6351, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 06352: 
 06353:     cdef:
 06354:         int i, j
+06355:         int z = <int>h * <int>w * <unsigned short int>3
  __pyx_v_z = ((((int)__pyx_v_h) * ((int)__pyx_v_w)) * ((unsigned short)3));
+06356:         unsigned char [:] rgb   = numpy.frombuffer(surface_.get_buffer(), dtype=numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_buffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6356, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_rgb = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+06357:         unsigned char [:] red   = numpy.zeros(z, uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_8 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 6357, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __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;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6357, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_red = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+06358:         unsigned char [:] green = numpy.zeros(z, uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
  __pyx_t_8 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 6358, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __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_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_green = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+06359:         unsigned char [:] blue  = numpy.zeros(z, uint8, order='C')
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_8 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 6359, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6359, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_blue = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 06360: 
 06361:     # Create a new surface (sizes - offset)
+06362:     new_surface = Surface((w-offset_, h-offset_))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_w - __pyx_v_offset_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyInt_FromSsize_t((__pyx_v_h - __pyx_v_offset_)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_8 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_new_surface = __pyx_t_8;
  __pyx_t_8 = 0;
+06363:     new_surface.convert()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_new_surface, __pyx_n_s_convert); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_8 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 06364: 
+06365:     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:;
      }
  }
 06366: 
+06367:         for i in prange(0, w * h * <unsigned short int>4, <unsigned short int>4,
        __pyx_t_7 = ((__pyx_v_w * __pyx_v_h) * ((unsigned short)4));
        __pyx_t_10 = ((unsigned short)4);
        if ((__pyx_t_10 == 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_11 = (__pyx_t_7 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_11 > 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)        __pyx_t_10 = ((unsigned short)4);
        if ((__pyx_t_10 == 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_11 = (__pyx_t_7 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_11 > 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, __pyx_t_12) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_11; __pyx_t_6++){
                        {
                            __pyx_v_i = (int)(0 + __pyx_t_10 * __pyx_t_6);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
+06368:                         schedule='static', num_threads=THREADS, chunksize=8):
            __pyx_t_12 = 8;
+06369:             j = (i >> <unsigned short int>2) * <unsigned short int>3
                            __pyx_v_j = ((__pyx_v_i >> ((unsigned short)2)) * ((unsigned short)3));
+06370:             red[j]     = rgb[i + <unsigned short int>2]
                            __pyx_t_13 = (__pyx_v_i + ((unsigned short)2));
                            __pyx_t_14 = __pyx_v_j;
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_red.data + __pyx_t_14 * __pyx_v_red.strides[0]) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_13 * __pyx_v_rgb.strides[0]) )));
+06371:             green[j + <unsigned short int>1] = rgb[i + <unsigned short int>1]
                            __pyx_t_13 = (__pyx_v_i + ((unsigned short)1));
                            __pyx_t_14 = (__pyx_v_j + ((unsigned short)1));
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_green.data + __pyx_t_14 * __pyx_v_green.strides[0]) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_13 * __pyx_v_rgb.strides[0]) )));
+06372:             blue[j  + <unsigned short int>2]  = rgb[i    ]
                            __pyx_t_13 = __pyx_v_i;
                            __pyx_t_14 = (__pyx_v_j + ((unsigned short)2));
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_blue.data + __pyx_t_14 * __pyx_v_blue.strides[0]) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_13 * __pyx_v_rgb.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
      }
 06373: 
+06374:     del rgb
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
 06375: 
+06376:     red_ = fromstring(bytes(red), (w, h), 'RGB')
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_red, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_2);
  __pyx_t_4 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_t_3, __pyx_t_15, __pyx_n_s_RGB};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6376, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_t_3, __pyx_t_15, __pyx_n_s_RGB};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6376, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6376, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_12, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_12, __pyx_t_15);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_12, __pyx_n_s_RGB);
    __pyx_t_3 = 0;
    __pyx_t_15 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6376, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_red_ = __pyx_t_8;
  __pyx_t_8 = 0;
+06377:     green_ = fromstring(bytes(green), (w, h), 'RGB')
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_green, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_15 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_15, __pyx_t_2, __pyx_n_s_RGB};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6377, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_15, __pyx_t_2, __pyx_n_s_RGB};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6377, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_12, __pyx_t_15);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_12, __pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_12, __pyx_n_s_RGB);
    __pyx_t_15 = 0;
    __pyx_t_2 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_green_ = __pyx_t_8;
  __pyx_t_8 = 0;
+06378:     blue_ = fromstring(bytes(blue), (w, h), 'RGB')
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_blue, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_15);
  __pyx_t_4 = 0;
  __pyx_t_15 = 0;
  __pyx_t_15 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_15)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_15, __pyx_t_2, __pyx_t_3, __pyx_n_s_RGB};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6378, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_15, __pyx_t_2, __pyx_t_3, __pyx_n_s_RGB};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6378, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6378, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_15) {
      __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_15); __pyx_t_15 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_12, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_12, __pyx_t_3);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_12, __pyx_n_s_RGB);
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6378, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_blue_ = __pyx_t_8;
  __pyx_t_8 = 0;
 06379: 
+06380:     new_surface.blit(red_, (-offset_, -offset_), special_flags=BLEND_RGB_ADD)
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_new_surface, __pyx_n_s_blit); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = __Pyx_PyInt_From_int((-__pyx_v_offset_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyInt_From_int((-__pyx_v_offset_)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_red_);
  __Pyx_GIVEREF(__pyx_v_red_);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_red_);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_special_flags, __pyx_t_1) < 0) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+06381:     new_surface.blit(green_, (0, 0), special_flags=BLEND_RGB_ADD)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_new_surface, __pyx_n_s_blit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_green_);
  __Pyx_GIVEREF(__pyx_v_green_);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_green_);
  __Pyx_INCREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_tuple__12);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_special_flags, __pyx_t_8) < 0) __PYX_ERR(1, 6381, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+06382:     new_surface.blit(blue_, (offset_, offset_), special_flags=BLEND_RGB_ADD)
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_new_surface, __pyx_n_s_blit); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_offset_); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_offset_); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_blue_);
  __Pyx_GIVEREF(__pyx_v_blue_);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_blue_);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_special_flags, __pyx_t_4) < 0) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06383:     return new_surface
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_new_surface);
  __pyx_r = __pyx_v_new_surface;
  goto __pyx_L0;
 06384: 
 06385: @cython.binding(False)
 06386: @cython.binding(False)
 06387: @cython.boundscheck(False)
 06388: @cython.wraparound(False)
 06389: @cython.nonecheck(False)
 06390: @cython.cdivision(True)
 06391: @cython.profile(False)
+06392: cpdef inline void putmask_c(
static PyObject *__pyx_pw_12PygameShader_6shader_149putmask_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_putmask_c(__Pyx_memviewslice __pyx_v_array_, CYTHON_UNUSED Py_ssize_t __pyx_v_rows_, Py_ssize_t __pyx_v_cols_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_putmask_c *__pyx_optional_args) {
  int __pyx_v_i;
  int __pyx_v_j;
  int *__pyx_v_r;
  int *__pyx_v_g;
  int *__pyx_v_b;
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_149putmask_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_148putmask_c[] = "\n    EQUIVALENT METHOD TO numpy.putmask BUT MUCH FASTER FOR OPERATION WITH OPERAND < V_\n\n    * Cython cpdef function, this function can be called directly and do not require a\n      hook function.\n\n    numpy.putmask(array_, array_<0, 0) --> putmask_c(array_, w, h, 0)\n\n    :param array_   : numpy.ndarray shape (w, h, 3) of integer\n    :param rows_    : integer;\n    :param cols_    : integer;\n    :param v_       : Value for filter < v_\n    :return         : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_149putmask_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_rows_;
  Py_ssize_t __pyx_v_cols_;
  int __pyx_v_v_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("putmask_c (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_array,&__pyx_n_s_rows,&__pyx_n_s_cols,&__pyx_n_s_v,0};
    PyObject* values[4] = {0,0,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  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_array)) != 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_rows)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("putmask_c", 0, 3, 4, 1); __PYX_ERR(1, 6392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("putmask_c", 0, 3, 4, 2); __PYX_ERR(1, 6392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_v);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "putmask_c") < 0)) __PYX_ERR(1, 6392, __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);
        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_array_ = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_int(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_array_.memview)) __PYX_ERR(1, 6393, __pyx_L3_error)
    __pyx_v_rows_ = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_rows_ == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6393, __pyx_L3_error)
    __pyx_v_cols_ = __Pyx_PyIndex_AsSsize_t(values[2]); if (unlikely((__pyx_v_cols_ == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6393, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_v_ = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_v_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6393, __pyx_L3_error)
    } else {
      __pyx_v_v_ = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("putmask_c", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6392, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.putmask_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_148putmask_c(__pyx_self, __pyx_v_array_, __pyx_v_rows_, __pyx_v_cols_, __pyx_v_v_);
  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_6shader_148putmask_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_array_, Py_ssize_t __pyx_v_rows_, Py_ssize_t __pyx_v_cols_, int __pyx_v_v_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("putmask_c", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_array_.memview)) { __Pyx_RaiseUnboundLocalError("array_"); __PYX_ERR(1, 6392, __pyx_L1_error) }
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.v_ = __pyx_v_v_;
  __pyx_f_12PygameShader_6shader_putmask_c(__pyx_v_array_, __pyx_v_rows_, __pyx_v_cols_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.putmask_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_array_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_putmask_c {
  int __pyx_n;
  int v_;
};
 06393:         int [:, :, :] array_, Py_ssize_t rows_, Py_ssize_t cols_, int v_=0)nogil:
 06394:     """
 06395:     EQUIVALENT METHOD TO numpy.putmask BUT MUCH FASTER FOR OPERATION WITH OPERAND < V_
 06396: 
 06397:     * Cython cpdef function, this function can be called directly and do not require a
 06398:       hook function.
 06399: 
 06400:     numpy.putmask(array_, array_<0, 0) --> putmask_c(array_, w, h, 0)
 06401: 
 06402:     :param array_   : numpy.ndarray shape (w, h, 3) of integer
 06403:     :param rows_    : integer;
 06404:     :param cols_    : integer;
 06405:     :param v_       : Value for filter < v_
 06406:     :return         : void
 06407:     """
 06408:     cdef:
 06409:         int i, j
 06410:         int *r
 06411:         int *g
 06412:         int *b
 06413: 
+06414:     for i in prange(0, rows_, schedule='static', num_threads=THREADS):
  __pyx_t_1 = __pyx_v_rows_;
  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_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static)
/* … */
  __pyx_t_1 = __pyx_v_rows_;
  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_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
              #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);
                      /* Initialize private variables to invalid values */
                      __pyx_v_b = ((int *)1);
                      __pyx_v_g = ((int *)1);
                      __pyx_v_j = ((int)0xbad0bad0);
                      __pyx_v_r = ((int *)1);
+06415:         for j in range(0, cols_):
                      __pyx_t_4 = __pyx_v_cols_;
                      __pyx_t_5 = __pyx_t_4;
                      for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
                        __pyx_v_j = __pyx_t_6;
+06416:             r = &array_[i, j, <unsigned short int>0]
                        __pyx_t_7 = __pyx_v_i;
                        __pyx_t_8 = __pyx_v_j;
                        __pyx_t_9 = ((unsigned short)0);
                        __pyx_v_r = (&(*((int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array_.data + __pyx_t_7 * __pyx_v_array_.strides[0]) ) + __pyx_t_8 * __pyx_v_array_.strides[1]) ) + __pyx_t_9 * __pyx_v_array_.strides[2]) ))));
+06417:             g = &array_[i, j, <unsigned short int>1]
                        __pyx_t_8 = __pyx_v_i;
                        __pyx_t_7 = __pyx_v_j;
                        __pyx_t_9 = ((unsigned short)1);
                        __pyx_v_g = (&(*((int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array_.data + __pyx_t_8 * __pyx_v_array_.strides[0]) ) + __pyx_t_7 * __pyx_v_array_.strides[1]) ) + __pyx_t_9 * __pyx_v_array_.strides[2]) ))));
+06418:             b = &array_[i, j, <unsigned short int>2]
                        __pyx_t_7 = __pyx_v_i;
                        __pyx_t_8 = __pyx_v_j;
                        __pyx_t_9 = ((unsigned short)2);
                        __pyx_v_b = (&(*((int *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array_.data + __pyx_t_7 * __pyx_v_array_.strides[0]) ) + __pyx_t_8 * __pyx_v_array_.strides[1]) ) + __pyx_t_9 * __pyx_v_array_.strides[2]) ))));
+06419:             if r[0] < 0:
                        __pyx_t_10 = (((__pyx_v_r[0]) < 0) != 0);
                        if (__pyx_t_10) {
/* … */
                        }
                      }
                  }
              }
          }
      }
  }
  #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
+06420:                 r[0] = 0
                          (__pyx_v_r[0]) = 0;
+06421:                 g[0] = 0
                          (__pyx_v_g[0]) = 0;
+06422:                 b[0] = 0
                          (__pyx_v_b[0]) = 0;
 06423: 
 06424:             # if r[0] > 255:
 06425:             #     r[0] = 255
 06426:             # if g[0] > 255:
 06427:             #     g[0] = 255
 06428:             # if b[0] > 255:
 06429:             #     b[0] = 255
 06430: 
 06431: 
 06432: 
 06433: @cython.binding(False)
 06434: @cython.binding(False)
 06435: @cython.boundscheck(False)
 06436: @cython.wraparound(False)
 06437: @cython.nonecheck(False)
 06438: @cython.cdivision(True)
 06439: @cython.profile(False)
+06440: cdef inline tuple shader_ripple_c(
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_shader_ripple_c(CYTHON_UNUSED Py_ssize_t __pyx_v_rows_, CYTHON_UNUSED Py_ssize_t __pyx_v_cols_, __Pyx_memviewslice __pyx_v_previous, __Pyx_memviewslice __pyx_v_current, __Pyx_memviewslice __pyx_v_array) {
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_data;
  float *__pyx_v_c;
  float *__pyx_v_d;
  unsigned char *__pyx_v_e;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_ripple_c", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_AddTraceback("PygameShader.shader.shader_ripple_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06441:        Py_ssize_t rows_, Py_ssize_t cols_,
 06442:        float [:, ::1] previous,
 06443:        float [:, ::1] current,
 06444:        unsigned char [:, :, ::1] array,
 06445:        ):
 06446:     """
 06447:     THIS SHADER CREATE A WATER EFFECT ON A PYGAME SURFACE
 06448:     This version does not include any background deformation to keep a reasonable fps rate
 06449: 
 06450:     * GLOBAL VARIABLE CONSIDERATION
 06451:     Set 3 arrays as global numpy arrays (not in the main loop, these arrays does not have
 06452:     to be created every frames).
 06453: 
 06454:     current = numpy.zeros((width, height), dtype=numpy.float32)
 06455:     previous = numpy.zeros((width, height), dtype=numpy.float32)
 06456:     array = numpy.full((width, height, 3), 0, numpy.uint8)
 06457: 
 06458:     * ADD A WATER DROP
 06459:     To add a water drop to the display just add an integer value to the array previous such as
 06460:     previous[random.randint(0, width - 1), random.randint(0, height - 1)] = 1024
 06461:     with width and height matching the size of the array (width, height = previous.get_size())
 06462: 
 06463:     * PROCESSING TIME
 06464:     Then update the transformation. The function below will start the blurring process
 06465:     (flattening the
 06466:     values across the array to absorb the drop energy ; 1024 in the example above.
 06467:     Finally the arrays are swapped : current become previous and previous become current
 06468:     Note that:
 06469:     1) w & h must match the array size
 06470:     2) previous & current & array must be identical sizes otherwise an error will be thrown
 06471: 
 06472:     previous, current, array = shader_ripple_c(w, h, previous, current, array)
 06473: 
 06474:     * CREATING THE SURFACE
 06475:     The array is then transformed into a numpy.ndarray of type uint8 (unsigned char 0..255)
 06476:     The pygame make_surface method will convert the array type (w, h, 3) into a surface that can
 06477:     be blit to the active display.
 06478:     surf = make_surface(asarray(array, dtype=uint8))
 06479: 
 06480:     * BLIT
 06481: 
 06482:     The newly surface containing the drops can then be added to the current background or
 06483:     display (blit process).
 06484:     Both surface should have the same size for a more realistic effect
 06485:     The special_flag here is BLEND_RGBA_ADD but can be set to a different value to achieve the
 06486:     special effect needed (BLEND_RGB_MULT, BLEND_RGB_SUB) etc.
 06487:     Refer to blending modes to understand the math operation behind the flags
 06488: 
 06489:     surface_.blit(surf, (0, 0), special_flags=pygame.BLEND_RGBA_ADD)
 06490: 
 06491:     * BOOSTING THE FPS
 06492:     In order to boost the processing time, I downscale the surface prior processing and
 06493:     upscale it x2 when
 06494:     the process is done, this method provide an additional overall performance.
 06495: 
 06496:     * NOTE this shader cannot be apply to the screen directly (screen referencing
 06497:     pygame.display.get_surface()),
 06498: 
 06499: 
 06500:     :param rows_        : integer; Array width
 06501:     :param cols_        : integer; Array height
 06502:     :param previous     : numpy.ndarray type (w, h) type float; array use for the transformation
 06503:     :param current      : numpy.ndarray type (w, h) type float; array use for the transformation
 06504:     :param array        : numpy.ndarray type (w, h, 3) type unsigned char
 06505:     :return             : Return a tuple containing 3 arrays
 06506:     """
 06507: 
 06508:     cdef:
 06509:         int i, j, a, b
 06510:         float data
 06511:         float *c
 06512:         float *d
 06513:         unsigned char *e
 06514:         float r
 06515: 
+06516:     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:;
      }
  }
 06517: 
+06518:         for i in prange(<unsigned short int>1,
        __pyx_t_1 = ((unsigned short)1);
+06519:                         rows_ - <unsigned short int>1, schedule='static', num_threads=THREADS):
        __pyx_t_2 = (__pyx_v_rows_ - ((unsigned short)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_4 = (__pyx_t_2 - __pyx_t_1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c) lastprivate(__pyx_v_d) lastprivate(__pyx_v_data) lastprivate(__pyx_v_e) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(static)
/* … */
        __pyx_t_2 = (__pyx_v_rows_ - ((unsigned short)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_4 = (__pyx_t_2 - __pyx_t_1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c) lastprivate(__pyx_v_d) lastprivate(__pyx_v_data) lastprivate(__pyx_v_e) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_4; __pyx_t_3++){
                        {
                            __pyx_v_i = (int)(__pyx_t_1 + 1 * __pyx_t_3);
                            /* Initialize private variables to invalid values */
                            __pyx_v_c = ((float *)1);
                            __pyx_v_d = ((float *)1);
                            __pyx_v_data = ((float)__PYX_NAN());
                            __pyx_v_e = ((unsigned char *)1);
                            __pyx_v_j = ((int)0xbad0bad0);
+06520:             for j in prange(<unsigned short int>1,
                            __pyx_t_5 = ((unsigned short)1);
+06521:                             cols_ - <unsigned short int>1, schedule='static', num_threads=THREADS):
                            __pyx_t_6 = (__pyx_v_cols_ - ((unsigned short)1));
                            if ((1 == 0)) abort();
                            {
                                __pyx_t_8 = (__pyx_t_6 - __pyx_t_5 + 1 - 1/abs(1)) / 1;
                                if (__pyx_t_8 > 0)
                                {
                                    #if 0
                                    #pragma omp parallel
                                    #endif /* _OPENMP */
                                    {
                                        #if 0
                                        #pragma omp for lastprivate(__pyx_v_c) lastprivate(__pyx_v_d) lastprivate(__pyx_v_data) lastprivate(__pyx_v_e) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) schedule(static)
/* … */
                            __pyx_t_6 = (__pyx_v_cols_ - ((unsigned short)1));
                            if ((1 == 0)) abort();
                            {
                                __pyx_t_8 = (__pyx_t_6 - __pyx_t_5 + 1 - 1/abs(1)) / 1;
                                if (__pyx_t_8 > 0)
                                {
                                    #if 0
                                    #pragma omp parallel
                                    #endif /* _OPENMP */
                                    {
                                        #if 0
                                        #pragma omp for lastprivate(__pyx_v_c) lastprivate(__pyx_v_d) lastprivate(__pyx_v_data) lastprivate(__pyx_v_e) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                                        #endif /* _OPENMP */
                                        for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){
                                            {
                                                __pyx_v_j = (int)(__pyx_t_5 + 1 * __pyx_t_7);
                                                /* Initialize private variables to invalid values */
                                                __pyx_v_c = ((float *)1);
                                                __pyx_v_d = ((float *)1);
                                                __pyx_v_data = ((float)__PYX_NAN());
                                                __pyx_v_e = ((unsigned char *)1);
 06522: 
 06523:                 # data = <int>(previous[i + 1, j] + previous[i - 1, j] +
 06524:                 #         previous[i, j - 1] + previous[i, j + 1])  >> 1
 06525: 
+06526:                 data = (previous[i + <unsigned short int>1, j] + previous[i - <unsigned short int>1, j] +
                                                __pyx_t_9 = (__pyx_v_i + ((unsigned short)1));
                                                __pyx_t_10 = __pyx_v_j;
                                                __pyx_t_11 = (__pyx_v_i - ((unsigned short)1));
                                                __pyx_t_12 = __pyx_v_j;
+06527:                               previous[i, j - <unsigned short int>1] +
                                                __pyx_t_13 = __pyx_v_i;
                                                __pyx_t_14 = (__pyx_v_j - ((unsigned short)1));
+06528:                         previous[i, j + <unsigned short int>1]) * <float>0.5
                                                __pyx_t_15 = __pyx_v_i;
                                                __pyx_t_16 = (__pyx_v_j + ((unsigned short)1));
/* … */
                                                __pyx_v_data = (((((*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_previous.data + __pyx_t_9 * __pyx_v_previous.strides[0]) )) + __pyx_t_10)) ))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_previous.data + __pyx_t_11 * __pyx_v_previous.strides[0]) )) + __pyx_t_12)) )))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_previous.data + __pyx_t_13 * __pyx_v_previous.strides[0]) )) + __pyx_t_14)) )))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_previous.data + __pyx_t_15 * __pyx_v_previous.strides[0]) )) + __pyx_t_16)) )))) * ((float)0.5));
+06529:                 c = &current[i, j]
                                                __pyx_t_16 = __pyx_v_i;
                                                __pyx_t_15 = __pyx_v_j;
                                                __pyx_v_c = (&(*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_current.data + __pyx_t_16 * __pyx_v_current.strides[0]) )) + __pyx_t_15)) ))));
+06530:                 data = data - <float>c[0]
                                                __pyx_v_data = (__pyx_v_data - ((float)(__pyx_v_c[0])));
+06531:                 data = data - (data * <float>0.011)
                                                __pyx_v_data = (__pyx_v_data - (__pyx_v_data * ((float)0.011)));
+06532:                 c[0] = data
                                                (__pyx_v_c[0]) = __pyx_v_data;
+06533:                 d = &previous[i,j]
                                                __pyx_t_15 = __pyx_v_i;
                                                __pyx_t_16 = __pyx_v_j;
                                                __pyx_v_d = (&(*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_previous.data + __pyx_t_15 * __pyx_v_previous.strides[0]) )) + __pyx_t_16)) ))));
+06534:                 e = &array[i, j, <unsigned short int>0]
                                                __pyx_t_16 = __pyx_v_i;
                                                __pyx_t_15 = __pyx_v_j;
                                                __pyx_t_17 = ((unsigned short)0);
                                                __pyx_v_e = (&(*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array.data + __pyx_t_16 * __pyx_v_array.strides[0]) ) + __pyx_t_15 * __pyx_v_array.strides[1]) )) + __pyx_t_17)) ))));
+06535:                 e[0] = <unsigned char> d[0] if d[0] > 0 else 0
                                                if ((((__pyx_v_d[0]) > 0.0) != 0)) {
                                                  __pyx_t_18 = ((unsigned char)(__pyx_v_d[0]));
                                                } else {
                                                  __pyx_t_18 = 0;
                                                }
                                                (__pyx_v_e[0]) = __pyx_t_18;
+06536:                 array[i, j, <unsigned short int>1] = e[0]
                                                __pyx_t_15 = __pyx_v_i;
                                                __pyx_t_16 = __pyx_v_j;
                                                __pyx_t_17 = ((unsigned short)1);
                                                *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array.data + __pyx_t_15 * __pyx_v_array.strides[0]) ) + __pyx_t_16 * __pyx_v_array.strides[1]) )) + __pyx_t_17)) )) = (__pyx_v_e[0]);
+06537:                 array[i, j, <unsigned short int>2] = e[0]
                                                __pyx_t_16 = __pyx_v_i;
                                                __pyx_t_15 = __pyx_v_j;
                                                __pyx_t_17 = ((unsigned short)2);
                                                *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array.data + __pyx_t_16 * __pyx_v_array.strides[0]) ) + __pyx_t_15 * __pyx_v_array.strides[1]) )) + __pyx_t_17)) )) = (__pyx_v_e[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
      }
 06538: 
+06539:     return current, previous, array
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_19 = __pyx_memoryview_fromslice(__pyx_v_current, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 6539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_20 = __pyx_memoryview_fromslice(__pyx_v_previous, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 6539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_21 = __pyx_memoryview_fromslice(__pyx_v_array, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 6539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_22 = PyTuple_New(3); if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 6539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_GIVEREF(__pyx_t_19);
  PyTuple_SET_ITEM(__pyx_t_22, 0, __pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_20);
  PyTuple_SET_ITEM(__pyx_t_22, 1, __pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_21);
  PyTuple_SET_ITEM(__pyx_t_22, 2, __pyx_t_21);
  __pyx_t_19 = 0;
  __pyx_t_20 = 0;
  __pyx_t_21 = 0;
  __pyx_r = ((PyObject*)__pyx_t_22);
  __pyx_t_22 = 0;
  goto __pyx_L0;
 06540: 
 06541: 
 06542: 
 06543: @cython.binding(False)
 06544: @cython.boundscheck(False)
 06545: @cython.wraparound(False)
 06546: @cython.nonecheck(False)
 06547: @cython.cdivision(True)
 06548: @cython.profile(False)
+06549: cpdef tunnel_modeling32(Py_ssize_t screen_width, Py_ssize_t screen_height, object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_151tunnel_modeling32(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_tunnel_modeling32(Py_ssize_t __pyx_v_screen_width, Py_ssize_t __pyx_v_screen_height, PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_distances = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_angles = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_shades = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_surface = NULL;
  int __pyx_v_s_width;
  int __pyx_v_s_height;
  __Pyx_memviewslice __pyx_v_scr_data = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_sqy;
  float __pyx_v_sqx;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_modeling32", 0);
/* … */
  /* 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_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_AddTraceback("PygameShader.shader.tunnel_modeling32", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_distances, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_angles, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_shades, 1);
  __Pyx_XDECREF(__pyx_v_surface);
  __PYX_XDEC_MEMVIEW(&__pyx_v_scr_data, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_151tunnel_modeling32(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_150tunnel_modeling32[] = "\n    THIS METHOD CREATE A TUNNEL MODEL\n\n    * This method must be called before rendering the tunnel in order to create\n      all the necessary buffers that will be called during the rendering of the tunnel effect.\n      tunnel_modeling32 must be call once only before the main loop of your game.\n\n    * Cython cpdef function, this function can be called directly and do not require a\n      hook function.\n\n    * This algorithm uses a 256x256 texture but reshape it to 512x512 pixels for a\n    better effect definition\n\n    :param surface_: Pygame Surface to pass for the tunnel effect (surface 256x256)\n    :param screen_width     : integer; Game display size (width in pixels)\n    :param screen_height    : integer; Game display size (height in pixels)\n    :return                 : return a tuple containing the following (distances, angles,\n    shades, scr_data)\n    distances is a numpy.ndarray buffer containing float values representing the distance\n    of each pixels\n    angles is a numpy.ndarray buffer containing float values representing the angle of each pixels\n    shades is a numpy.ndarray buffer containing float values representing the shade of each pixels\n    scr_data is a numpy.ndarray buffer containing uint8 values representing the BGR (not RGB)\n    values of each pixels\n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_151tunnel_modeling32(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  Py_ssize_t __pyx_v_screen_width;
  Py_ssize_t __pyx_v_screen_height;
  PyObject *__pyx_v_surface_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_modeling32 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_screen_width,&__pyx_n_s_screen_height,&__pyx_n_s_surface,0};
    PyObject* values[3] = {0,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  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_screen_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_screen_height)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_modeling32", 1, 3, 3, 1); __PYX_ERR(1, 6549, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_surface)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_modeling32", 1, 3, 3, 2); __PYX_ERR(1, 6549, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tunnel_modeling32") < 0)) __PYX_ERR(1, 6549, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_screen_width = __Pyx_PyIndex_AsSsize_t(values[0]); if (unlikely((__pyx_v_screen_width == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6549, __pyx_L3_error)
    __pyx_v_screen_height = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_screen_height == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6549, __pyx_L3_error)
    __pyx_v_surface_ = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("tunnel_modeling32", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6549, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.tunnel_modeling32", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_150tunnel_modeling32(__pyx_self, __pyx_v_screen_width, __pyx_v_screen_height, __pyx_v_surface_);
  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_6shader_150tunnel_modeling32(CYTHON_UNUSED PyObject *__pyx_self, Py_ssize_t __pyx_v_screen_width, Py_ssize_t __pyx_v_screen_height, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_modeling32", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_tunnel_modeling32(__pyx_v_screen_width, __pyx_v_screen_height, __pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6549, __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.shader.tunnel_modeling32", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06550:     """
 06551:     THIS METHOD CREATE A TUNNEL MODEL
 06552: 
 06553:     * This method must be called before rendering the tunnel in order to create
 06554:       all the necessary buffers that will be called during the rendering of the tunnel effect.
 06555:       tunnel_modeling32 must be call once only before the main loop of your game.
 06556: 
 06557:     * Cython cpdef function, this function can be called directly and do not require a
 06558:       hook function.
 06559: 
 06560:     * This algorithm uses a 256x256 texture but reshape it to 512x512 pixels for a
 06561:     better effect definition
 06562: 
 06563:     :param surface_: Pygame Surface to pass for the tunnel effect (surface 256x256)
 06564:     :param screen_width     : integer; Game display size (width in pixels)
 06565:     :param screen_height    : integer; Game display size (height in pixels)
 06566:     :return                 : return a tuple containing the following (distances, angles,
 06567:     shades, scr_data)
 06568:     distances is a numpy.ndarray buffer containing float values representing the distance
 06569:     of each pixels
 06570:     angles is a numpy.ndarray buffer containing float values representing the angle of each pixels
 06571:     shades is a numpy.ndarray buffer containing float values representing the shade of each pixels
 06572:     scr_data is a numpy.ndarray buffer containing uint8 values representing the BGR (not RGB)
 06573:     values of each pixels
 06574: 
 06575:     """
 06576: 
+06577:     assert screen_width > 0, "Argument screen_width must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_screen_width > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_screen_width_must_be_0);
      __PYX_ERR(1, 6577, __pyx_L1_error)
    }
  }
  #endif
+06578:     assert screen_height > 0, "Argument screen_height must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_screen_height > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_screen_height_must_be_0);
      __PYX_ERR(1, 6578, __pyx_L1_error)
    }
  }
  #endif
 06579: 
+06580:     cdef int [:] distances = numpy.empty((screen_width * screen_height * 4), int32)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(((__pyx_v_screen_width * __pyx_v_screen_height) * 4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6580, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6580, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6580, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6580, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6580, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_distances = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+06581:     cdef int [:] angles    = numpy.empty((screen_width * screen_height * 4), int32)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6581, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6581, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(((__pyx_v_screen_width * __pyx_v_screen_height) * 4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6581, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6581, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6581, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6581, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6581, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_angles = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+06582:     cdef int [:] shades    = numpy.empty((screen_width * screen_height * 4), int32)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyInt_FromSsize_t(((__pyx_v_screen_width * __pyx_v_screen_height) * 4)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_7, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6582, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_7, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6582, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6582, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_6, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_7 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6582, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6582, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_shades = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 06583: 
+06584:     surface = surface_.convert_alpha()
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_convert_alpha); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_surface = __pyx_t_1;
  __pyx_t_1 = 0;
 06585: 
+06586:     cdef int s_width  = 512
  __pyx_v_s_width = 0x200;
+06587:     cdef int s_height = 512
  __pyx_v_s_height = 0x200;
+06588:     surface = smoothscale(surface, (s_width, s_height))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_s_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_s_height); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_surface, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6588, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_surface, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6588, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6588, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface);
    __Pyx_GIVEREF(__pyx_v_surface);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_6, __pyx_v_surface);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6588, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_surface, __pyx_t_1);
  __pyx_t_1 = 0;
+06589:     cdef unsigned char [::1] scr_data = surface.get_buffer()
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface, __pyx_n_s_get_buffer); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6589, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6589, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6589, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_scr_data = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 06590:     cdef float sqy, sqx
+06591:     cdef int x, y, i = 0
  __pyx_v_i = 0;
 06592: 
 06593: 
+06594:     for y in range(0, screen_height * <unsigned short int>2):
  __pyx_t_10 = (__pyx_v_screen_height * ((unsigned short)2));
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_11; __pyx_t_6+=1) {
    __pyx_v_y = __pyx_t_6;
+06595:         sqy = <float>pow(y - screen_height, <unsigned short int>2)
    __pyx_v_sqy = ((float)pow((__pyx_v_y - __pyx_v_screen_height), ((unsigned short)2)));
+06596:         for x in range(0, screen_width * <unsigned short int>2):
    __pyx_t_12 = (__pyx_v_screen_width * ((unsigned short)2));
    __pyx_t_13 = __pyx_t_12;
    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
      __pyx_v_x = __pyx_t_14;
+06597:             sqx = <float>pow(x - screen_width, <unsigned short int>2)
      __pyx_v_sqx = ((float)pow((__pyx_v_x - __pyx_v_screen_width), ((unsigned short)2)));
+06598:             if (sqx + sqy) == 0:
      __pyx_t_15 = (((__pyx_v_sqx + __pyx_v_sqy) == 0.0) != 0);
      if (__pyx_t_15) {
/* … */
        goto __pyx_L7;
      }
+06599:                 distances[i] = <unsigned short int>1
        __pyx_t_16 = __pyx_v_i;
        *((int *) ( /* dim=0 */ (__pyx_v_distances.data + __pyx_t_16 * __pyx_v_distances.strides[0]) )) = ((unsigned short)1);
 06600:             else:
+06601:                 distances[i] = <int>(<float>floor(
        /* "PygameShader/shader.pyx":6601
 *                 distances[i] = <unsigned short int>1
 *             else:
 *                 distances[i] = <int>(<float>floor(             # <<<<<<<<<<<<<<
 *                     <float>32.0 * <float>s_height / <float>sqrt(sqx + sqy))) % s_height
 *             angles[i]    = <int>round_c(<float>s_width *
 */
        __pyx_t_16 = __pyx_v_i;
        *((int *) ( /* dim=0 */ (__pyx_v_distances.data + __pyx_t_16 * __pyx_v_distances.strides[0]) )) = (((int)((float)floor(((((float)32.0) * ((float)__pyx_v_s_height)) / ((float)sqrt((__pyx_v_sqx + __pyx_v_sqy))))))) % __pyx_v_s_height);
      }
      __pyx_L7:;
+06602:                     <float>32.0 * <float>s_height / <float>sqrt(sqx + sqy))) % s_height
      /*else*/ {
+06603:             angles[i]    = <int>round_c(<float>s_width *
      __pyx_t_16 = __pyx_v_i;
      *((int *) ( /* dim=0 */ (__pyx_v_angles.data + __pyx_t_16 * __pyx_v_angles.strides[0]) )) = ((int)round(((((float)__pyx_v_s_width) * ((float)atan2((((float)__pyx_v_y) - ((float)__pyx_v_screen_height)), (((float)__pyx_v_x) - ((float)__pyx_v_screen_width))))) / ((float)__pyx_v_12PygameShader_6shader_M_PI))));
 06604:                                         <float>atan2(<float>y - <float>screen_height,
 06605:                                         <float>x - <float>screen_width) / (<float>M_PI))
+06606:             shades[i]    = <int>min(<float>sqrt(sqx + sqy)* <float>10.0, <unsigned char>255)
      __pyx_t_17 = ((unsigned char)0xFF);
      __pyx_t_18 = (((float)sqrt((__pyx_v_sqx + __pyx_v_sqy))) * ((float)10.0));
      if (((__pyx_t_17 < __pyx_t_18) != 0)) {
        __pyx_t_19 = __pyx_t_17;
      } else {
        __pyx_t_19 = __pyx_t_18;
      }
      __pyx_t_16 = __pyx_v_i;
      *((int *) ( /* dim=0 */ (__pyx_v_shades.data + __pyx_t_16 * __pyx_v_shades.strides[0]) )) = ((int)__pyx_t_19);
+06607:             i = i + <unsigned short int>1
      __pyx_v_i = (__pyx_v_i + ((unsigned short)1));
    }
  }
 06608: 
+06609:     return distances, angles, shades, scr_data
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_distances, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_angles, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_shades, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_scr_data, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_7);
  __pyx_t_1 = 0;
  __pyx_t_5 = 0;
  __pyx_t_2 = 0;
  __pyx_t_7 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 06610: 
 06611: 
 06612: 
 06613: 
 06614: @cython.binding(False)
 06615: @cython.binding(False)
 06616: @cython.boundscheck(False)
 06617: @cython.wraparound(False)
 06618: @cython.nonecheck(False)
 06619: @cython.cdivision(True)
 06620: @cython.profile(False)
+06621: cpdef tunnel_render32(
static PyObject *__pyx_pw_12PygameShader_6shader_153tunnel_render32(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_tunnel_render32(int __pyx_v_t, Py_ssize_t __pyx_v_screen_width, Py_ssize_t __pyx_v_screen_height, int __pyx_v_screen_w2, int __pyx_v_screen_h2, __Pyx_memviewslice __pyx_v_distances, __Pyx_memviewslice __pyx_v_angles, __Pyx_memviewslice __pyx_v_shades, __Pyx_memviewslice __pyx_v_scr_data, __Pyx_memviewslice __pyx_v_dest_array, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_v_s_width;
  int __pyx_v_s_height;
  float __pyx_v_timer;
  int __pyx_v_shiftx;
  int __pyx_v_shifty;
  int __pyx_v_centerx;
  int __pyx_v_centery;
  int __pyx_v_stride;
  int __pyx_v_dest_ofs;
  int __pyx_v_src_ofs;
  int __pyx_v_u;
  int __pyx_v_v;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_pix_ofs;
  int __pyx_v_shade;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_render32", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("PygameShader.shader.tunnel_render32", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_153tunnel_render32(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_152tunnel_render32[] = "\n    TUNNEL EFFECT RENDERING METHOD\n\n    * Always call the method tunnel_modeling32 outside of your game main loop\n    before calling this method (from\n      the main loop)\n\n    * Return a pygame surface containing the tunnel rendering effect, the image\n    is 32 bit (with per-pixel information)\n\n    * Cython cpdef function, this function can be called directly and do not\n    require a hook function.\n\n    * The parameter t must change overtime\n\n    :param t            : integer; linear value (frame number)\n    :param screen_width : integer; Game display size (width in pixels)\n    :param screen_height: integer; Game display size (height in pixels)\n    :param screen_w2    : integer; Game display width / 2.0\n    :param screen_h2    : integer; game display height / 2.0\n    :param distances    : numpy.ndarray buffer containing float values\n    representing the distance of each pixels\n    :param angles       : numpy.ndarray buffer containing float values\n    representing the angle of each pixels\n    :param shades       : numpy.ndarray buffer containing float values\n    representing the shade of each pixels\n    :param scr_data     : numpy.ndarray buffer containing float values\n    representing the BGR values  of each pixels\n    :param dest_array   : numpy.ndarray buffer containing float values\n    representing the RGB values of each pixels\n    :return             : Return a pygame.Surface (w, h) 32 bit with per-pixel information\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_153tunnel_render32(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_t;
  Py_ssize_t __pyx_v_screen_width;
  Py_ssize_t __pyx_v_screen_height;
  int __pyx_v_screen_w2;
  int __pyx_v_screen_h2;
  __Pyx_memviewslice __pyx_v_distances = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_angles = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_shades = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_scr_data = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dest_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_render32 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t_2,&__pyx_n_s_screen_width,&__pyx_n_s_screen_height,&__pyx_n_s_screen_w2,&__pyx_n_s_screen_h2,&__pyx_n_s_distances,&__pyx_n_s_angles,&__pyx_n_s_shades,&__pyx_n_s_scr_data,&__pyx_n_s_dest_array,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,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 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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_t_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_screen_width)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 1); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_screen_height)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 2); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_screen_w2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 3); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_screen_h2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 4); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_distances)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 5); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_angles)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 6); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shades)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 7); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scr_data)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 8); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest_array)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, 9); __PYX_ERR(1, 6621, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tunnel_render32") < 0)) __PYX_ERR(1, 6621, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 10) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
      values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
    }
    __pyx_v_t = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_t == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6622, __pyx_L3_error)
    __pyx_v_screen_width = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_screen_width == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6623, __pyx_L3_error)
    __pyx_v_screen_height = __Pyx_PyIndex_AsSsize_t(values[2]); if (unlikely((__pyx_v_screen_height == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 6624, __pyx_L3_error)
    __pyx_v_screen_w2 = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_screen_w2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6625, __pyx_L3_error)
    __pyx_v_screen_h2 = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_screen_h2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6626, __pyx_L3_error)
    __pyx_v_distances = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_distances.memview)) __PYX_ERR(1, 6627, __pyx_L3_error)
    __pyx_v_angles = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angles.memview)) __PYX_ERR(1, 6628, __pyx_L3_error)
    __pyx_v_shades = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_shades.memview)) __PYX_ERR(1, 6629, __pyx_L3_error)
    __pyx_v_scr_data = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_scr_data.memview)) __PYX_ERR(1, 6630, __pyx_L3_error)
    __pyx_v_dest_array = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dest_array.memview)) __PYX_ERR(1, 6631, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("tunnel_render32", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6621, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.tunnel_render32", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_152tunnel_render32(__pyx_self, __pyx_v_t, __pyx_v_screen_width, __pyx_v_screen_height, __pyx_v_screen_w2, __pyx_v_screen_h2, __pyx_v_distances, __pyx_v_angles, __pyx_v_shades, __pyx_v_scr_data, __pyx_v_dest_array);
  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_6shader_152tunnel_render32(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_t, Py_ssize_t __pyx_v_screen_width, Py_ssize_t __pyx_v_screen_height, int __pyx_v_screen_w2, int __pyx_v_screen_h2, __Pyx_memviewslice __pyx_v_distances, __Pyx_memviewslice __pyx_v_angles, __Pyx_memviewslice __pyx_v_shades, __Pyx_memviewslice __pyx_v_scr_data, __Pyx_memviewslice __pyx_v_dest_array) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_render32", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_distances.memview)) { __Pyx_RaiseUnboundLocalError("distances"); __PYX_ERR(1, 6621, __pyx_L1_error) }
  if (unlikely(!__pyx_v_angles.memview)) { __Pyx_RaiseUnboundLocalError("angles"); __PYX_ERR(1, 6621, __pyx_L1_error) }
  if (unlikely(!__pyx_v_shades.memview)) { __Pyx_RaiseUnboundLocalError("shades"); __PYX_ERR(1, 6621, __pyx_L1_error) }
  if (unlikely(!__pyx_v_scr_data.memview)) { __Pyx_RaiseUnboundLocalError("scr_data"); __PYX_ERR(1, 6621, __pyx_L1_error) }
  if (unlikely(!__pyx_v_dest_array.memview)) { __Pyx_RaiseUnboundLocalError("dest_array"); __PYX_ERR(1, 6621, __pyx_L1_error) }
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_tunnel_render32(__pyx_v_t, __pyx_v_screen_width, __pyx_v_screen_height, __pyx_v_screen_w2, __pyx_v_screen_h2, __pyx_v_distances, __pyx_v_angles, __pyx_v_shades, __pyx_v_scr_data, __pyx_v_dest_array, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6621, __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.shader.tunnel_render32", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_distances, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_angles, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_shades, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_scr_data, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dest_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06622:         int t,
 06623:         Py_ssize_t screen_width,
 06624:         Py_ssize_t screen_height,
 06625:         int screen_w2,
 06626:         int screen_h2,
 06627:         int [::1] distances,
 06628:         int [::1] angles,
 06629:         int [::1] shades,
 06630:         unsigned char [::1] scr_data,
 06631:         unsigned char [::1] dest_array):
 06632: 
 06633:     """
 06634:     TUNNEL EFFECT RENDERING METHOD
 06635: 
 06636:     * Always call the method tunnel_modeling32 outside of your game main loop
 06637:     before calling this method (from
 06638:       the main loop)
 06639: 
 06640:     * Return a pygame surface containing the tunnel rendering effect, the image
 06641:     is 32 bit (with per-pixel information)
 06642: 
 06643:     * Cython cpdef function, this function can be called directly and do not
 06644:     require a hook function.
 06645: 
 06646:     * The parameter t must change overtime
 06647: 
 06648:     :param t            : integer; linear value (frame number)
 06649:     :param screen_width : integer; Game display size (width in pixels)
 06650:     :param screen_height: integer; Game display size (height in pixels)
 06651:     :param screen_w2    : integer; Game display width / 2.0
 06652:     :param screen_h2    : integer; game display height / 2.0
 06653:     :param distances    : numpy.ndarray buffer containing float values
 06654:     representing the distance of each pixels
 06655:     :param angles       : numpy.ndarray buffer containing float values
 06656:     representing the angle of each pixels
 06657:     :param shades       : numpy.ndarray buffer containing float values
 06658:     representing the shade of each pixels
 06659:     :param scr_data     : numpy.ndarray buffer containing float values
 06660:     representing the BGR values  of each pixels
 06661:     :param dest_array   : numpy.ndarray buffer containing float values
 06662:     representing the RGB values of each pixels
 06663:     :return             : Return a pygame.Surface (w, h) 32 bit with per-pixel information
 06664:     """
 06665: 
+06666:     assert screen_width > 0, "Argument screen_width must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_screen_width > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_screen_width_must_be_0);
      __PYX_ERR(1, 6666, __pyx_L1_error)
    }
  }
  #endif
+06667:     assert screen_height > 0, "Argument screen_height must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_screen_height > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_screen_height_must_be_0);
      __PYX_ERR(1, 6667, __pyx_L1_error)
    }
  }
  #endif
+06668:     assert screen_w2 > 0, "Argument screen_w2 must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_screen_w2 > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_screen_w2_must_be_0);
      __PYX_ERR(1, 6668, __pyx_L1_error)
    }
  }
  #endif
+06669:     assert screen_h2 > 0, "Argument screen_h2 must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_screen_h2 > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_screen_h2_must_be_0);
      __PYX_ERR(1, 6669, __pyx_L1_error)
    }
  }
  #endif
 06670: 
 06671:     cdef:
+06672:         int s_width  = 512
  __pyx_v_s_width = 0x200;
+06673:         int s_height = 512
  __pyx_v_s_height = 0x200;
+06674:         float timer = t * <float>1e-3
  __pyx_v_timer = (__pyx_v_t * ((float)1e-3));
+06675:         int shiftx  = <int>floor(s_width * timer)
  __pyx_v_shiftx = ((int)floor((__pyx_v_s_width * __pyx_v_timer)));
+06676:         int shifty  = <int>floor(s_height * <float>0.25 * timer)
  __pyx_v_shifty = ((int)floor(((__pyx_v_s_height * ((float)0.25)) * __pyx_v_timer)));
+06677:         int centerx = <int>(screen_w2 +
  __pyx_v_centerx = ((int)(__pyx_v_screen_w2 + ((float)floor(((__pyx_v_screen_w2 >> 1) * ((float)sin((__pyx_v_timer * ((float)0.25)))))))));
 06678:                             <float>floor((screen_w2 >> 1) * <float>sin(timer * <float>0.25)))
+06679:         int centery = <int>(screen_h2 + <float>floor(
  __pyx_v_centery = ((int)(__pyx_v_screen_h2 + ((float)floor(((__pyx_v_screen_h2 >> 1) * ((float)sin((__pyx_v_timer * ((float)0.5)))))))));
 06680:             (screen_h2 >> 1) * <float>sin(timer * <float>0.5)))
+06681:         int stride  = <int>screen_width * <unsigned short int>2
  __pyx_v_stride = (((int)__pyx_v_screen_width) * ((unsigned short)2));
+06682:         int dest_ofs = 0
  __pyx_v_dest_ofs = 0;
 06683:         int src_ofs
 06684:         int u, v, x, y
 06685:         int pix_ofs, shade
 06686: 
 06687: 
+06688:     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:;
      }
  }
 06689: 
+06690:         for y in prange(0, screen_height, schedule='static', num_threads=4):
        __pyx_t_1 = __pyx_v_screen_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_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_dest_ofs) lastprivate(__pyx_v_pix_ofs) lastprivate(__pyx_v_shade) lastprivate(__pyx_v_src_ofs) lastprivate(__pyx_v_u) lastprivate(__pyx_v_v) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(4)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_dest_ofs = ((int)0xbad0bad0);
                            __pyx_v_pix_ofs = ((int)0xbad0bad0);
                            __pyx_v_shade = ((int)0xbad0bad0);
                            __pyx_v_src_ofs = ((int)0xbad0bad0);
                            __pyx_v_u = ((int)0xbad0bad0);
                            __pyx_v_v = ((int)0xbad0bad0);
                            __pyx_v_x = ((int)0xbad0bad0);
 06691: 
+06692:             for x in range(0, screen_width):
                            __pyx_t_4 = __pyx_v_screen_width;
                            __pyx_t_5 = __pyx_t_4;
                            for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
                              __pyx_v_x = __pyx_t_6;
 06693: 
+06694:                 src_ofs = y * stride + centerx + centery * stride + x
                              __pyx_v_src_ofs = ((((__pyx_v_y * __pyx_v_stride) + __pyx_v_centerx) + (__pyx_v_centery * __pyx_v_stride)) + __pyx_v_x);
+06695:                 dest_ofs = (y * <int>screen_height + x) << 2
                              __pyx_v_dest_ofs = (((__pyx_v_y * ((int)__pyx_v_screen_height)) + __pyx_v_x) << 2);
 06696: 
+06697:                 u = (distances[src_ofs] + shiftx) & 0xff
                              __pyx_t_7 = __pyx_v_src_ofs;
                              __pyx_v_u = (((*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_distances.data) + __pyx_t_7)) ))) + __pyx_v_shiftx) & 0xff);
+06698:                 v = (angles[src_ofs] + shifty) & 0xff
                              __pyx_t_7 = __pyx_v_src_ofs;
                              __pyx_v_v = (((*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_angles.data) + __pyx_t_7)) ))) + __pyx_v_shifty) & 0xff);
 06699: 
+06700:                 shade = <int> (shades[src_ofs] * <float>ONE_255)
                              __pyx_t_7 = __pyx_v_src_ofs;
                              __pyx_v_shade = ((int)((*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_shades.data) + __pyx_t_7)) ))) * ((float)0.00392156862745098)));
 06701: 
+06702:                 pix_ofs = (u + (v << <unsigned short int>9)) << <unsigned short int>3
                              __pyx_v_pix_ofs = ((__pyx_v_u + (__pyx_v_v << ((unsigned short)9))) << ((unsigned short)3));
 06703: 
+06704:                 dest_array[dest_ofs] = scr_data[pix_ofs + <unsigned short int>2] * shade
                              __pyx_t_7 = (__pyx_v_pix_ofs + ((unsigned short)2));
                              __pyx_t_8 = __pyx_v_dest_ofs;
                              *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_dest_array.data) + __pyx_t_8)) )) = ((*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_scr_data.data) + __pyx_t_7)) ))) * __pyx_v_shade);
+06705:                 dest_array[dest_ofs + <unsigned short int>1] = \
                              __pyx_t_8 = (__pyx_v_dest_ofs + ((unsigned short)1));
                              *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_dest_array.data) + __pyx_t_8)) )) = ((*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_scr_data.data) + __pyx_t_7)) ))) * __pyx_v_shade);
+06706:                     scr_data[pix_ofs + <unsigned short int>1] * shade
                              __pyx_t_7 = (__pyx_v_pix_ofs + ((unsigned short)1));
+06707:                 dest_array[dest_ofs + <unsigned short int>2] =\
                              __pyx_t_8 = (__pyx_v_dest_ofs + ((unsigned short)2));
                              *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_dest_array.data) + __pyx_t_8)) )) = ((*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_scr_data.data) + __pyx_t_7)) ))) * __pyx_v_shade);
+06708:                     scr_data[pix_ofs + <unsigned short int>0] * shade
                              __pyx_t_7 = (__pyx_v_pix_ofs + ((unsigned short)0));
+06709:                 dest_array[dest_ofs + <unsigned short int>3] = <unsigned char>255
                              __pyx_t_7 = (__pyx_v_dest_ofs + ((unsigned short)3));
                              *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_dest_array.data) + __pyx_t_7)) )) = ((unsigned char)0xFF);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 06710: 
+06711:     return pygame.image.frombuffer(dest_array,
  __Pyx_XDECREF(__pyx_r);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_pygame); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 6711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
/* … */
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_image); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 6711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 6711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __pyx_memoryview_fromslice(__pyx_v_dest_array, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 6711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
+06712:                                    (screen_width, screen_height), "RGBA").convert_alpha()
  __pyx_t_13 = PyInt_FromSsize_t(__pyx_v_screen_width); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 6712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_14 = PyInt_FromSsize_t(__pyx_v_screen_height); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 6712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_14);
  __pyx_t_13 = 0;
  __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[4] = {__pyx_t_14, __pyx_t_12, __pyx_t_15, __pyx_n_s_RGBA};
    __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 6711, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[4] = {__pyx_t_14, __pyx_t_12, __pyx_t_15, __pyx_n_s_RGBA};
    __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 6711, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  {
    __pyx_t_13 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 6711, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_6, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_6, __pyx_t_15);
    __Pyx_INCREF(__pyx_n_s_RGBA);
    __Pyx_GIVEREF(__pyx_n_s_RGBA);
    PyTuple_SET_ITEM(__pyx_t_13, 2+__pyx_t_6, __pyx_n_s_RGBA);
    __pyx_t_12 = 0;
    __pyx_t_15 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_13, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 6711, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  }
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_convert_alpha); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 6712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_9 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 6712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_r = __pyx_t_9;
  __pyx_t_9 = 0;
  goto __pyx_L0;
 06713: 
 06714: 
 06715: 
 06716: 
 06717: @cython.binding(False)
 06718: @cython.binding(False)
 06719: @cython.boundscheck(False)
 06720: @cython.wraparound(False)
 06721: @cython.nonecheck(False)
 06722: @cython.cdivision(True)
 06723: @cython.profile(False)
+06724: cpdef tunnel_modeling24(int screen_width, int screen_height, object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_155tunnel_modeling24(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_tunnel_modeling24(int __pyx_v_screen_width, int __pyx_v_screen_height, PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_distances = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_angles = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_shades = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_surface = NULL;
  int __pyx_v_s_width;
  int __pyx_v_s_height;
  __Pyx_memviewslice __pyx_v_scr_data = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_sqy;
  float __pyx_v_sqx;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_modeling24", 0);
/* … */
  /* 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_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_AddTraceback("PygameShader.shader.tunnel_modeling24", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_distances, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_angles, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_shades, 1);
  __Pyx_XDECREF(__pyx_v_surface);
  __PYX_XDEC_MEMVIEW(&__pyx_v_scr_data, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_155tunnel_modeling24(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_12PygameShader_6shader_155tunnel_modeling24(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_screen_width;
  int __pyx_v_screen_height;
  PyObject *__pyx_v_surface_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_modeling24 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_screen_width,&__pyx_n_s_screen_height,&__pyx_n_s_surface,0};
    PyObject* values[3] = {0,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  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_screen_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_screen_height)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_modeling24", 1, 3, 3, 1); __PYX_ERR(1, 6724, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_surface)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_modeling24", 1, 3, 3, 2); __PYX_ERR(1, 6724, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tunnel_modeling24") < 0)) __PYX_ERR(1, 6724, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_screen_width = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_screen_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6724, __pyx_L3_error)
    __pyx_v_screen_height = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_screen_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6724, __pyx_L3_error)
    __pyx_v_surface_ = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("tunnel_modeling24", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6724, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.tunnel_modeling24", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_154tunnel_modeling24(__pyx_self, __pyx_v_screen_width, __pyx_v_screen_height, __pyx_v_surface_);
  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_6shader_154tunnel_modeling24(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_screen_width, int __pyx_v_screen_height, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_modeling24", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_tunnel_modeling24(__pyx_v_screen_width, __pyx_v_screen_height, __pyx_v_surface_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6724, __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.shader.tunnel_modeling24", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06725: 
+06726:     assert screen_width > 0, "Argument screen_width must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_screen_width > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_screen_width_must_be_0);
      __PYX_ERR(1, 6726, __pyx_L1_error)
    }
  }
  #endif
+06727:     assert screen_height > 0, "Argument screen_height must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_screen_height > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_screen_height_must_be_0);
      __PYX_ERR(1, 6727, __pyx_L1_error)
    }
  }
  #endif
 06728: 
+06729:     cdef int [:] distances = numpy.empty((screen_width * screen_height * 4), int32)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_long(((__pyx_v_screen_width * __pyx_v_screen_height) * 4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6729, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6729, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6729, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_distances = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+06730:     cdef int [:] angles    = numpy.empty((screen_width * screen_height * 4), int32)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_long(((__pyx_v_screen_width * __pyx_v_screen_height) * 4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6730, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6730, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6730, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_angles = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+06731:     cdef int [:] shades    = numpy.empty((screen_width * screen_height * 4), int32)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6731, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6731, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyInt_From_long(((__pyx_v_screen_width * __pyx_v_screen_height) * 4)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6731, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6731, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_7, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6731, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_7, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6731, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_6, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_7 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6731, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_shades = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 06732: 
+06733:     surface = surface_.convert_alpha()
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_convert_alpha); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_surface = __pyx_t_1;
  __pyx_t_1 = 0;
 06734: 
+06735:     cdef int s_width  = 512
  __pyx_v_s_width = 0x200;
+06736:     cdef int s_height = 512
  __pyx_v_s_height = 0x200;
+06737:     surface = smoothscale(surface, (s_width, s_height))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_s_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_s_height); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_surface, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6737, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_surface, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6737, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6737, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface);
    __Pyx_GIVEREF(__pyx_v_surface);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_6, __pyx_v_surface);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6737, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_surface, __pyx_t_1);
  __pyx_t_1 = 0;
+06738:     cdef unsigned char [::1] scr_data = surface.get_buffer()
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface, __pyx_n_s_get_buffer); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 6738, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_scr_data = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 06739:     cdef float sqy, sqx
+06740:     cdef int x, y, i = 0
  __pyx_v_i = 0;
 06741: 
 06742: 
+06743:     for y in range(0, screen_height * <unsigned short int>2):
  __pyx_t_6 = (__pyx_v_screen_height * ((unsigned short)2));
  __pyx_t_10 = __pyx_t_6;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_y = __pyx_t_11;
+06744:         sqy = <float>pow(y - screen_height, <unsigned short int>2)
    __pyx_v_sqy = ((float)pow((__pyx_v_y - __pyx_v_screen_height), ((unsigned short)2)));
+06745:         for x in range(0, screen_width * <unsigned short int>2):
    __pyx_t_12 = (__pyx_v_screen_width * ((unsigned short)2));
    __pyx_t_13 = __pyx_t_12;
    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
      __pyx_v_x = __pyx_t_14;
+06746:             sqx = <float>pow(x - screen_width, <unsigned short int>2)
      __pyx_v_sqx = ((float)pow((__pyx_v_x - __pyx_v_screen_width), ((unsigned short)2)));
+06747:             if (sqx + sqy) == 0:
      __pyx_t_15 = (((__pyx_v_sqx + __pyx_v_sqy) == 0.0) != 0);
      if (__pyx_t_15) {
/* … */
        goto __pyx_L7;
      }
+06748:                 distances[i] = <unsigned short int>1
        __pyx_t_16 = __pyx_v_i;
        *((int *) ( /* dim=0 */ (__pyx_v_distances.data + __pyx_t_16 * __pyx_v_distances.strides[0]) )) = ((unsigned short)1);
 06749:             else:
+06750:                 distances[i] = <int>(<float>floor(
        /* "PygameShader/shader.pyx":6750
 *                 distances[i] = <unsigned short int>1
 *             else:
 *                 distances[i] = <int>(<float>floor(             # <<<<<<<<<<<<<<
 *                     <float>32.0 * <float>s_height / <float>sqrt(sqx + sqy))) % s_height
 *             angles[i]    = <int>round_c(<float>s_width *
 */
        __pyx_t_16 = __pyx_v_i;
        *((int *) ( /* dim=0 */ (__pyx_v_distances.data + __pyx_t_16 * __pyx_v_distances.strides[0]) )) = (((int)((float)floor(((((float)32.0) * ((float)__pyx_v_s_height)) / ((float)sqrt((__pyx_v_sqx + __pyx_v_sqy))))))) % __pyx_v_s_height);
      }
      __pyx_L7:;
+06751:                     <float>32.0 * <float>s_height / <float>sqrt(sqx + sqy))) % s_height
      /*else*/ {
+06752:             angles[i]    = <int>round_c(<float>s_width *
      __pyx_t_16 = __pyx_v_i;
      *((int *) ( /* dim=0 */ (__pyx_v_angles.data + __pyx_t_16 * __pyx_v_angles.strides[0]) )) = ((int)round(((((float)__pyx_v_s_width) * ((float)atan2((((float)__pyx_v_y) - ((float)__pyx_v_screen_height)), (((float)__pyx_v_x) - ((float)__pyx_v_screen_width))))) / ((float)__pyx_v_12PygameShader_6shader_M_PI))));
 06753:                                         <float>atan2(<float>y - <float>screen_height,
 06754:                                         <float>x - <float>screen_width) / (<float>M_PI))
+06755:             shades[i]    = <int>min(<float>sqrt(sqx + sqy)* <float>10.0, <unsigned char>255)
      __pyx_t_17 = ((unsigned char)0xFF);
      __pyx_t_18 = (((float)sqrt((__pyx_v_sqx + __pyx_v_sqy))) * ((float)10.0));
      if (((__pyx_t_17 < __pyx_t_18) != 0)) {
        __pyx_t_19 = __pyx_t_17;
      } else {
        __pyx_t_19 = __pyx_t_18;
      }
      __pyx_t_16 = __pyx_v_i;
      *((int *) ( /* dim=0 */ (__pyx_v_shades.data + __pyx_t_16 * __pyx_v_shades.strides[0]) )) = ((int)__pyx_t_19);
+06756:             i = i + <unsigned short int>1
      __pyx_v_i = (__pyx_v_i + ((unsigned short)1));
    }
  }
 06757: 
+06758:     return distances, angles, shades, scr_data
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_distances, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_angles, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_shades, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_scr_data, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_7);
  __pyx_t_1 = 0;
  __pyx_t_5 = 0;
  __pyx_t_2 = 0;
  __pyx_t_7 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 06759: 
 06760: 
 06761: 
 06762: 
 06763: @cython.binding(False)
 06764: @cython.binding(False)
 06765: @cython.boundscheck(False)
 06766: @cython.wraparound(False)
 06767: @cython.nonecheck(False)
 06768: @cython.cdivision(True)
 06769: @cython.profile(False)
+06770: cpdef tunnel_render24(int t,
static PyObject *__pyx_pw_12PygameShader_6shader_157tunnel_render24(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_tunnel_render24(int __pyx_v_t, int __pyx_v_screen_width, int __pyx_v_screen_height, int __pyx_v_screen_w2, int __pyx_v_screen_h2, __Pyx_memviewslice __pyx_v_distances, __Pyx_memviewslice __pyx_v_angles, __Pyx_memviewslice __pyx_v_shades, __Pyx_memviewslice __pyx_v_scr_data, __Pyx_memviewslice __pyx_v_dest_array, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_v_s_width;
  int __pyx_v_s_height;
  float __pyx_v_timer;
  int __pyx_v_shiftx;
  int __pyx_v_shifty;
  int __pyx_v_centerx;
  int __pyx_v_centery;
  int __pyx_v_stride;
  int __pyx_v_dest_ofs;
  int __pyx_v_pix_ofs;
  int __pyx_v_u;
  int __pyx_v_v;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_shade;
  int __pyx_v_src_ofs;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_render24", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("PygameShader.shader.tunnel_render24", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_157tunnel_render24(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_12PygameShader_6shader_157tunnel_render24(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_t;
  int __pyx_v_screen_width;
  int __pyx_v_screen_height;
  int __pyx_v_screen_w2;
  int __pyx_v_screen_h2;
  __Pyx_memviewslice __pyx_v_distances = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_angles = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_shades = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_scr_data = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dest_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_render24 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t_2,&__pyx_n_s_screen_width,&__pyx_n_s_screen_height,&__pyx_n_s_screen_w2,&__pyx_n_s_screen_h2,&__pyx_n_s_distances,&__pyx_n_s_angles,&__pyx_n_s_shades,&__pyx_n_s_scr_data,&__pyx_n_s_dest_array,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,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 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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_t_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_screen_width)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 1); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_screen_height)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 2); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_screen_w2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 3); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_screen_h2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 4); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_distances)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 5); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_angles)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 6); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shades)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 7); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scr_data)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 8); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest_array)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, 9); __PYX_ERR(1, 6770, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tunnel_render24") < 0)) __PYX_ERR(1, 6770, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 10) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
      values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
    }
    __pyx_v_t = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_t == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6770, __pyx_L3_error)
    __pyx_v_screen_width = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_screen_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6771, __pyx_L3_error)
    __pyx_v_screen_height = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_screen_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6772, __pyx_L3_error)
    __pyx_v_screen_w2 = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_screen_w2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6773, __pyx_L3_error)
    __pyx_v_screen_h2 = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_screen_h2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6774, __pyx_L3_error)
    __pyx_v_distances = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_distances.memview)) __PYX_ERR(1, 6775, __pyx_L3_error)
    __pyx_v_angles = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angles.memview)) __PYX_ERR(1, 6776, __pyx_L3_error)
    __pyx_v_shades = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_shades.memview)) __PYX_ERR(1, 6777, __pyx_L3_error)
    __pyx_v_scr_data = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_scr_data.memview)) __PYX_ERR(1, 6778, __pyx_L3_error)
    __pyx_v_dest_array = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dest_array.memview)) __PYX_ERR(1, 6779, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("tunnel_render24", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6770, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.tunnel_render24", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_156tunnel_render24(__pyx_self, __pyx_v_t, __pyx_v_screen_width, __pyx_v_screen_height, __pyx_v_screen_w2, __pyx_v_screen_h2, __pyx_v_distances, __pyx_v_angles, __pyx_v_shades, __pyx_v_scr_data, __pyx_v_dest_array);
  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_6shader_156tunnel_render24(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_t, int __pyx_v_screen_width, int __pyx_v_screen_height, int __pyx_v_screen_w2, int __pyx_v_screen_h2, __Pyx_memviewslice __pyx_v_distances, __Pyx_memviewslice __pyx_v_angles, __Pyx_memviewslice __pyx_v_shades, __Pyx_memviewslice __pyx_v_scr_data, __Pyx_memviewslice __pyx_v_dest_array) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tunnel_render24", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_distances.memview)) { __Pyx_RaiseUnboundLocalError("distances"); __PYX_ERR(1, 6770, __pyx_L1_error) }
  if (unlikely(!__pyx_v_angles.memview)) { __Pyx_RaiseUnboundLocalError("angles"); __PYX_ERR(1, 6770, __pyx_L1_error) }
  if (unlikely(!__pyx_v_shades.memview)) { __Pyx_RaiseUnboundLocalError("shades"); __PYX_ERR(1, 6770, __pyx_L1_error) }
  if (unlikely(!__pyx_v_scr_data.memview)) { __Pyx_RaiseUnboundLocalError("scr_data"); __PYX_ERR(1, 6770, __pyx_L1_error) }
  if (unlikely(!__pyx_v_dest_array.memview)) { __Pyx_RaiseUnboundLocalError("dest_array"); __PYX_ERR(1, 6770, __pyx_L1_error) }
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_tunnel_render24(__pyx_v_t, __pyx_v_screen_width, __pyx_v_screen_height, __pyx_v_screen_w2, __pyx_v_screen_h2, __pyx_v_distances, __pyx_v_angles, __pyx_v_shades, __pyx_v_scr_data, __pyx_v_dest_array, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6770, __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.shader.tunnel_render24", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_distances, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_angles, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_shades, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_scr_data, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dest_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06771:                     int screen_width,
 06772:                     int screen_height,
 06773:                     int screen_w2,
 06774:                     int screen_h2,
 06775:                     int [:] distances,
 06776:                     int [:] angles,
 06777:                     int [:] shades,
 06778:                     unsigned char [:] scr_data,
 06779:                     unsigned char [:] dest_array):
 06780:     cdef:
+06781:         int s_width  = 512
  __pyx_v_s_width = 0x200;
+06782:         int s_height = 512
  __pyx_v_s_height = 0x200;
+06783:         float timer = t * <float>1e-3
  __pyx_v_timer = (__pyx_v_t * ((float)1e-3));
+06784:         int shiftx  = <int>floor(s_width * timer)
  /* "PygameShader/shader.pyx":6784
 *         int s_height = 512
 *         float timer = t * <float>1e-3
 *         int shiftx  = <int>floor(s_width * timer)             # <<<<<<<<<<<<<<
 *         int shifty  = <int>floor(s_height * <float>0.25 * timer)
 *         int centerx = <int>(screen_w2 + <float>floor((screen_w2 >> 1) * <float>sin(timer *
 */
  __pyx_v_shiftx = ((int)floor((__pyx_v_s_width * __pyx_v_timer)));
+06785:         int shifty  = <int>floor(s_height * <float>0.25 * timer)
  __pyx_v_shifty = ((int)floor(((__pyx_v_s_height * ((float)0.25)) * __pyx_v_timer)));
+06786:         int centerx = <int>(screen_w2 + <float>floor((screen_w2 >> 1) * <float>sin(timer *
  /* "PygameShader/shader.pyx":6786
 *         int shiftx  = <int>floor(s_width * timer)
 *         int shifty  = <int>floor(s_height * <float>0.25 * timer)
 *         int centerx = <int>(screen_w2 + <float>floor((screen_w2 >> 1) * <float>sin(timer *             # <<<<<<<<<<<<<<
 *                                                                                    <float>0.25)))
 *         int centery = <int>(screen_h2 + <float>floor((screen_h2 >> 1) * <float>sin(timer *
 */
  __pyx_v_centerx = ((int)(__pyx_v_screen_w2 + ((float)floor(((__pyx_v_screen_w2 >> 1) * ((float)sin((__pyx_v_timer * ((float)0.25)))))))));
 06787:                                                                                    <float>0.25)))
+06788:         int centery = <int>(screen_h2 + <float>floor((screen_h2 >> 1) * <float>sin(timer *
  __pyx_v_centery = ((int)(__pyx_v_screen_h2 + ((float)floor(((__pyx_v_screen_h2 >> 1) * ((float)sin((__pyx_v_timer * ((float)0.5)))))))));
 06789:                                                                                    <float>0.5)))
+06790:         int stride  = screen_width * <unsigned short int>2
  __pyx_v_stride = (__pyx_v_screen_width * ((unsigned short)2));
+06791:         int dest_ofs = 0
  __pyx_v_dest_ofs = 0;
+06792:         int pix_ofs = 0
  __pyx_v_pix_ofs = 0;
 06793:         int u, v, x, y
 06794:         int shade, src_ofs
+06795:     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:;
      }
  }
+06796:         for y in prange(0,  screen_height,  schedule='static', num_threads=THREADS):
        __pyx_t_1 = __pyx_v_screen_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_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_dest_ofs) lastprivate(__pyx_v_pix_ofs) lastprivate(__pyx_v_shade) lastprivate(__pyx_v_src_ofs) lastprivate(__pyx_v_u) lastprivate(__pyx_v_v) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_1 = __pyx_v_screen_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_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_dest_ofs) lastprivate(__pyx_v_pix_ofs) lastprivate(__pyx_v_shade) lastprivate(__pyx_v_src_ofs) lastprivate(__pyx_v_u) lastprivate(__pyx_v_v) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_dest_ofs = ((int)0xbad0bad0);
                            __pyx_v_pix_ofs = ((int)0xbad0bad0);
                            __pyx_v_shade = ((int)0xbad0bad0);
                            __pyx_v_src_ofs = ((int)0xbad0bad0);
                            __pyx_v_u = ((int)0xbad0bad0);
                            __pyx_v_v = ((int)0xbad0bad0);
                            __pyx_v_x = ((int)0xbad0bad0);
+06797:             for x in range(0, screen_width):
                            __pyx_t_4 = __pyx_v_screen_width;
                            __pyx_t_5 = __pyx_t_4;
                            for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
                              __pyx_v_x = __pyx_t_6;
+06798:                 src_ofs = y * stride + centerx + centery * stride + x
                              __pyx_v_src_ofs = ((((__pyx_v_y * __pyx_v_stride) + __pyx_v_centerx) + (__pyx_v_centery * __pyx_v_stride)) + __pyx_v_x);
+06799:                 dest_ofs = (y * <int> screen_height + x) << 2
                              __pyx_v_dest_ofs = (((__pyx_v_y * ((int)__pyx_v_screen_height)) + __pyx_v_x) << 2);
 06800: 
+06801:                 u = (distances[ src_ofs ] + shiftx) & 0xff
                              __pyx_t_7 = __pyx_v_src_ofs;
                              __pyx_v_u = (((*((int *) ( /* dim=0 */ (__pyx_v_distances.data + __pyx_t_7 * __pyx_v_distances.strides[0]) ))) + __pyx_v_shiftx) & 0xff);
+06802:                 v = (angles[ src_ofs ] + shifty) & 0xff
                              __pyx_t_7 = __pyx_v_src_ofs;
                              __pyx_v_v = (((*((int *) ( /* dim=0 */ (__pyx_v_angles.data + __pyx_t_7 * __pyx_v_angles.strides[0]) ))) + __pyx_v_shifty) & 0xff);
 06803: 
+06804:                 shade = <int> (shades[ src_ofs ] * <float>ONE_255)
                              __pyx_t_7 = __pyx_v_src_ofs;
                              __pyx_v_shade = ((int)((*((int *) ( /* dim=0 */ (__pyx_v_shades.data + __pyx_t_7 * __pyx_v_shades.strides[0]) ))) * ((float)0.00392156862745098)));
 06805: 
+06806:                 pix_ofs = (u + (v << <unsigned short int> 9)) << <unsigned short int> 3
                              __pyx_v_pix_ofs = ((__pyx_v_u + (__pyx_v_v << ((unsigned short)9))) << ((unsigned short)3));
 06807: 
+06808:                 dest_array[ dest_ofs ] = scr_data[ pix_ofs + <unsigned short int> 2 ] * shade
                              __pyx_t_7 = (__pyx_v_pix_ofs + ((unsigned short)2));
                              __pyx_t_8 = __pyx_v_dest_ofs;
                              *((unsigned char *) ( /* dim=0 */ (__pyx_v_dest_array.data + __pyx_t_8 * __pyx_v_dest_array.strides[0]) )) = ((*((unsigned char *) ( /* dim=0 */ (__pyx_v_scr_data.data + __pyx_t_7 * __pyx_v_scr_data.strides[0]) ))) * __pyx_v_shade);
+06809:                 dest_array[ dest_ofs + <unsigned short int> 1 ] = \
                              __pyx_t_8 = (__pyx_v_dest_ofs + ((unsigned short)1));
                              *((unsigned char *) ( /* dim=0 */ (__pyx_v_dest_array.data + __pyx_t_8 * __pyx_v_dest_array.strides[0]) )) = ((*((unsigned char *) ( /* dim=0 */ (__pyx_v_scr_data.data + __pyx_t_7 * __pyx_v_scr_data.strides[0]) ))) * __pyx_v_shade);
+06810:                     scr_data[ pix_ofs + <unsigned short int> 1 ] * shade
                              __pyx_t_7 = (__pyx_v_pix_ofs + ((unsigned short)1));
+06811:                 dest_array[ dest_ofs + <unsigned short int> 2 ] = \
                              __pyx_t_8 = (__pyx_v_dest_ofs + ((unsigned short)2));
                              *((unsigned char *) ( /* dim=0 */ (__pyx_v_dest_array.data + __pyx_t_8 * __pyx_v_dest_array.strides[0]) )) = ((*((unsigned char *) ( /* dim=0 */ (__pyx_v_scr_data.data + __pyx_t_7 * __pyx_v_scr_data.strides[0]) ))) * __pyx_v_shade);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+06812:                     scr_data[ pix_ofs + <unsigned short int> 0 ] * shade
                              __pyx_t_7 = (__pyx_v_pix_ofs + ((unsigned short)0));
 06813:                 # dest_array[ dest_ofs + <unsigned short int> 3 ] = <unsigned char> 255
 06814: 
+06815:     return frombuffer(dest_array, (screen_width, screen_height), "RGBA").convert()
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = __pyx_memoryview_fromslice(__pyx_v_dest_array, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_screen_width); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_screen_height); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_14);
  __pyx_t_13 = 0;
  __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  __pyx_t_1 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_1 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[4] = {__pyx_t_14, __pyx_t_12, __pyx_t_15, __pyx_n_s_RGBA};
    __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 6815, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[4] = {__pyx_t_14, __pyx_t_12, __pyx_t_15, __pyx_n_s_RGBA};
    __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 6815, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  {
    __pyx_t_13 = PyTuple_New(3+__pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 6815, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_1, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_1, __pyx_t_15);
    __Pyx_INCREF(__pyx_n_s_RGBA);
    __Pyx_GIVEREF(__pyx_n_s_RGBA);
    PyTuple_SET_ITEM(__pyx_t_13, 2+__pyx_t_1, __pyx_n_s_RGBA);
    __pyx_t_12 = 0;
    __pyx_t_15 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_13, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 6815, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  }
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_convert); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_9 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_r = __pyx_t_9;
  __pyx_t_9 = 0;
  goto __pyx_L0;
 06816: 
 06817: 
 06818: 
 06819: 
 06820: @cython.binding(False)
 06821: @cython.binding(False)
 06822: @cython.boundscheck(False)
 06823: @cython.wraparound(False)
 06824: @cython.nonecheck(False)
 06825: @cython.cdivision(True)
 06826: @cython.profile(False)
+06827: cpdef tuple heat_map(int wavelength, float gamma=1.0):
static PyObject *__pyx_pw_12PygameShader_6shader_159heat_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_heat_map(int __pyx_v_wavelength, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_heat_map *__pyx_optional_args) {
  float __pyx_v_gamma = ((float)1.0);
  struct rgb_color_int __pyx_v_rgb_c;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heat_map", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_gamma = __pyx_optional_args->gamma;
    }
  }
/* … */
  /* 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_AddTraceback("PygameShader.shader.heat_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_159heat_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_158heat_map[] = "\n    RETURN AN RGB COLOR VALUE MATCHING A SPECIFIC WAVELENGTH\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    This function return a tuple (R,G,B) corresponding to the\n    color wavelength (wavelength_to_rgb is an External C\n    routine with pre-defined wavelength such as :\n    Color   Wavelength(nm) Frequency(THz)\n    Red     620-750        484-400\n    Orange  590-620        508-484\n    Yellow  570-590        526-508\n    Green   495-570        606-526\n    Blue    450-495        668-606\n    Violet  380-450        789-668\n    e.g If the routine is called with a wavelength of 620, the returned color\n    will be a red gradient\n\n    :param wavelength   : integer; Wavelength\n    :param gamma        : float; Gamma value\n    :return             : tuple RGB values (0 ... 255)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_159heat_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_wavelength;
  float __pyx_v_gamma;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heat_map (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_wavelength,&__pyx_n_s_gamma,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_wavelength)) != 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_gamma);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "heat_map") < 0)) __PYX_ERR(1, 6827, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_wavelength = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_wavelength == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6827, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_gamma = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_gamma == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 6827, __pyx_L3_error)
    } else {
      __pyx_v_gamma = ((float)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("heat_map", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6827, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.heat_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_158heat_map(__pyx_self, __pyx_v_wavelength, __pyx_v_gamma);
  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_6shader_158heat_map(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_wavelength, float __pyx_v_gamma) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heat_map", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.gamma = __pyx_v_gamma;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_heat_map(__pyx_v_wavelength, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6827, __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.shader.heat_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_heat_map {
  int __pyx_n;
  float gamma;
};
 06828:     """
 06829:     RETURN AN RGB COLOR VALUE MATCHING A SPECIFIC WAVELENGTH
 06830: 
 06831:     Cython cpdef function, this function can be called directly and do not require a
 06832:     hook function.
 06833: 
 06834:     This function return a tuple (R,G,B) corresponding to the
 06835:     color wavelength (wavelength_to_rgb is an External C
 06836:     routine with pre-defined wavelength such as :
 06837:     Color   Wavelength(nm) Frequency(THz)
 06838:     Red     620-750        484-400
 06839:     Orange  590-620        508-484
 06840:     Yellow  570-590        526-508
 06841:     Green   495-570        606-526
 06842:     Blue    450-495        668-606
 06843:     Violet  380-450        789-668
 06844:     e.g If the routine is called with a wavelength of 620, the returned color
 06845:     will be a red gradient
 06846: 
 06847:     :param wavelength   : integer; Wavelength
 06848:     :param gamma        : float; Gamma value
 06849:     :return             : tuple RGB values (0 ... 255)
 06850:     """
 06851:     cdef  rgb_color_int rgb_c
+06852:     rgb_c = wavelength_to_rgb(wavelength, gamma)
  __pyx_v_rgb_c = wavelength_to_rgb(__pyx_v_wavelength, __pyx_v_gamma);
+06853:     return rgb_c.r, rgb_c.g, rgb_c.b
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.r); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.g); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.b); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;
 06854: 
 06855: @cython.binding(False)
 06856: @cython.binding(False)
 06857: @cython.boundscheck(False)
 06858: @cython.wraparound(False)
 06859: @cython.nonecheck(False)
 06860: @cython.cdivision(True)
 06861: @cython.profile(False)
+06862: cpdef tuple custom_map(int wavelength, int [:] color_array_, float gamma=1.0):
static PyObject *__pyx_pw_12PygameShader_6shader_161custom_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_custom_map(int __pyx_v_wavelength, __Pyx_memviewslice __pyx_v_color_array_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_custom_map *__pyx_optional_args) {
  float __pyx_v_gamma = ((float)1.0);
  struct rgb_color_int __pyx_v_rgb_c;
  int *__pyx_v_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("custom_map", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_gamma = __pyx_optional_args->gamma;
    }
  }
/* … */
  /* 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_AddTraceback("PygameShader.shader.custom_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_161custom_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_160custom_map[] = "\n    RETURN AN RGB COLOR VALUE MATCHING A CUSTOM WAVELENGTH\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    This function return a tuple (R,G,B) corresponding to the\n    color wavelength define in color_array_\n    (wavelength_to_rgb_custom is an External C\n    routine with customize wavelength and allow the user to defined\n    a customize palette according to an input value)\n\n    example for a Fire palette\n    arr = numpy.array(\n        [0, 1,       # violet is not used\n         0, 1,       # blue is not used\n         0, 1,       # green is not used\n         2, 619,     # yellow, return a yellow gradient for values [2...619]\n         620, 650,   # orange return a orange gradient for values [620 ... 650]\n         651, 660    # red return a red gradient for values [651 ... 660]\n         ], numpy.int)\n\n\n    :param wavelength   : integer; Wavelength\n    :param gamma        : float; Gamma value\n    :param color_array_ : numpy array containing the min and max of each color (red,\n    orange, yellow, green, blue, violet)\n    :return             : tuple RGB values (0 ... 255)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_161custom_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_wavelength;
  __Pyx_memviewslice __pyx_v_color_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_gamma;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("custom_map (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_wavelength,&__pyx_n_s_color_array,&__pyx_n_s_gamma,0};
    PyObject* values[3] = {0,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  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_wavelength)) != 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_color_array)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("custom_map", 0, 2, 3, 1); __PYX_ERR(1, 6862, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_gamma);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "custom_map") < 0)) __PYX_ERR(1, 6862, __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);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_wavelength = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_wavelength == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6862, __pyx_L3_error)
    __pyx_v_color_array_ = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_color_array_.memview)) __PYX_ERR(1, 6862, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_gamma = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_gamma == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 6862, __pyx_L3_error)
    } else {
      __pyx_v_gamma = ((float)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("custom_map", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6862, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.custom_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_160custom_map(__pyx_self, __pyx_v_wavelength, __pyx_v_color_array_, __pyx_v_gamma);
  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_6shader_160custom_map(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_wavelength, __Pyx_memviewslice __pyx_v_color_array_, float __pyx_v_gamma) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("custom_map", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_color_array_.memview)) { __Pyx_RaiseUnboundLocalError("color_array_"); __PYX_ERR(1, 6862, __pyx_L1_error) }
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.gamma = __pyx_v_gamma;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_custom_map(__pyx_v_wavelength, __pyx_v_color_array_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6862, __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.shader.custom_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_color_array_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_custom_map {
  int __pyx_n;
  float gamma;
};
 06863:     """
 06864:     RETURN AN RGB COLOR VALUE MATCHING A CUSTOM WAVELENGTH
 06865: 
 06866:     Cython cpdef function, this function can be called directly and do not require a
 06867:     hook function.
 06868: 
 06869:     This function return a tuple (R,G,B) corresponding to the
 06870:     color wavelength define in color_array_
 06871:     (wavelength_to_rgb_custom is an External C
 06872:     routine with customize wavelength and allow the user to defined
 06873:     a customize palette according to an input value)
 06874: 
 06875:     example for a Fire palette
 06876:     arr = numpy.array(
 06877:         [0, 1,       # violet is not used
 06878:          0, 1,       # blue is not used
 06879:          0, 1,       # green is not used
 06880:          2, 619,     # yellow, return a yellow gradient for values [2...619]
 06881:          620, 650,   # orange return a orange gradient for values [620 ... 650]
 06882:          651, 660    # red return a red gradient for values [651 ... 660]
 06883:          ], numpy.int)
 06884: 
 06885: 
 06886:     :param wavelength   : integer; Wavelength
 06887:     :param gamma        : float; Gamma value
 06888:     :param color_array_ : numpy array containing the min and max of each color (red,
 06889:     orange, yellow, green, blue, violet)
 06890:     :return             : tuple RGB values (0 ... 255)
 06891:     """
 06892:     cdef  rgb_color_int rgb_c
 06893:     cdef int *p
+06894:     p = &color_array_[0]
  __pyx_t_1 = 0;
  __pyx_v_p = (&(*((int *) ( /* dim=0 */ (__pyx_v_color_array_.data + __pyx_t_1 * __pyx_v_color_array_.strides[0]) ))));
+06895:     rgb_c = wavelength_to_rgb_custom(wavelength, p, gamma)
  __pyx_v_rgb_c = wavelength_to_rgb_custom(__pyx_v_wavelength, __pyx_v_p, __pyx_v_gamma);
+06896:     return rgb_c.r, rgb_c.g, rgb_c.b
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.r); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.g); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.b); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6896, __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_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_r = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;
 06897: 
 06898: 
 06899: 
 06900: 
+06901: cdef int i = 0
  __pyx_v_12PygameShader_6shader_i = 0;
+06902: HEATMAP = [heat_map(i, 1.0) for i in range(380, 750)]
  __pyx_t_30 = PyList_New(0); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 6902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  for (__pyx_t_7 = 0x17C; __pyx_t_7 < 0x2EE; __pyx_t_7+=1) {
    __pyx_v_12PygameShader_6shader_i = __pyx_t_7;
    __pyx_t_38.__pyx_n = 1;
    __pyx_t_38.gamma = 1.0;
    __pyx_t_2 = __pyx_f_12PygameShader_6shader_heat_map(__pyx_v_12PygameShader_6shader_i, 0, &__pyx_t_38); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_30, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 6902, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_HEATMAP, __pyx_t_30) < 0) __PYX_ERR(1, 6902, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
 06903: 
+06904: cdef float f_map = (<float>750.0 - <float>380.0 -<float>1.0) / (<float>255.0 * <float>3.0)
  __pyx_v_12PygameShader_6shader_f_map = (((((float)750.0) - ((float)380.0)) - ((float)1.0)) / (((float)255.0) * ((float)3.0)));
 06905: 
+06906: cdef unsigned char[:, ::1] heatmap_array = numpy.zeros((750 - 380, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 6906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 6906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_uint8); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 6906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_30 = PyTuple_New(2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 6906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_INCREF(__pyx_tuple__76);
  __Pyx_GIVEREF(__pyx_tuple__76);
  PyTuple_SET_ITEM(__pyx_t_30, 0, __pyx_tuple__76);
  __Pyx_GIVEREF(__pyx_t_33);
  PyTuple_SET_ITEM(__pyx_t_30, 1, __pyx_t_33);
  __pyx_t_33 = 0;
  __pyx_t_33 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_30, NULL); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 6906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_39 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_t_33, PyBUF_WRITABLE); if (unlikely(!__pyx_t_39.memview)) __PYX_ERR(1, 6906, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_12PygameShader_6shader_heatmap_array, 1);
  __pyx_v_12PygameShader_6shader_heatmap_array = __pyx_t_39;
  __pyx_t_39.memview = NULL;
  __pyx_t_39.data = NULL;
/* … */
  __pyx_tuple__76 = PyTuple_Pack(2, __pyx_int_370, __pyx_int_3); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(1, 6906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__76);
  __Pyx_GIVEREF(__pyx_tuple__76);
 06907: cdef tuple t
+06908: i = 0
  __pyx_v_12PygameShader_6shader_i = 0;
+06909: for t in HEATMAP:
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_HEATMAP); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 6909, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  if (likely(PyList_CheckExact(__pyx_t_33)) || PyTuple_CheckExact(__pyx_t_33)) {
    __pyx_t_30 = __pyx_t_33; __Pyx_INCREF(__pyx_t_30); __pyx_t_40 = 0;
    __pyx_t_41 = NULL;
  } else {
    __pyx_t_40 = -1; __pyx_t_30 = PyObject_GetIter(__pyx_t_33); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 6909, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_30);
    __pyx_t_41 = Py_TYPE(__pyx_t_30)->tp_iternext; if (unlikely(!__pyx_t_41)) __PYX_ERR(1, 6909, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  for (;;) {
    if (likely(!__pyx_t_41)) {
      if (likely(PyList_CheckExact(__pyx_t_30))) {
        if (__pyx_t_40 >= PyList_GET_SIZE(__pyx_t_30)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_33 = PyList_GET_ITEM(__pyx_t_30, __pyx_t_40); __Pyx_INCREF(__pyx_t_33); __pyx_t_40++; if (unlikely(0 < 0)) __PYX_ERR(1, 6909, __pyx_L1_error)
        #else
        __pyx_t_33 = PySequence_ITEM(__pyx_t_30, __pyx_t_40); __pyx_t_40++; if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 6909, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        #endif
      } else {
        if (__pyx_t_40 >= PyTuple_GET_SIZE(__pyx_t_30)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_33 = PyTuple_GET_ITEM(__pyx_t_30, __pyx_t_40); __Pyx_INCREF(__pyx_t_33); __pyx_t_40++; if (unlikely(0 < 0)) __PYX_ERR(1, 6909, __pyx_L1_error)
        #else
        __pyx_t_33 = PySequence_ITEM(__pyx_t_30, __pyx_t_40); __pyx_t_40++; if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 6909, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        #endif
      }
    } else {
      __pyx_t_33 = __pyx_t_41(__pyx_t_30);
      if (unlikely(!__pyx_t_33)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(1, 6909, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_33);
    }
    if (!(likely(PyTuple_CheckExact(__pyx_t_33))||((__pyx_t_33) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_33)->tp_name), 0))) __PYX_ERR(1, 6909, __pyx_L1_error)
    __Pyx_XGOTREF(__pyx_v_12PygameShader_6shader_t);
    __Pyx_DECREF_SET(__pyx_v_12PygameShader_6shader_t, ((PyObject*)__pyx_t_33));
    __Pyx_GIVEREF(__pyx_t_33);
    __pyx_t_33 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
+06910:     heatmap_array[i, 0] = t[0]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 6910, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 0)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 6910, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundLocalError("heatmap_array"); __PYX_ERR(1, 6910, __pyx_L1_error) }
    __pyx_t_43 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_44 = 0;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_43 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_44)) )) = __pyx_t_42;
+06911:     heatmap_array[i, 1] = t[1]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 6911, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 1)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 6911, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundLocalError("heatmap_array"); __PYX_ERR(1, 6911, __pyx_L1_error) }
    __pyx_t_44 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_43 = 1;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_44 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_43)) )) = __pyx_t_42;
+06912:     heatmap_array[i, 2] = t[2]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 6912, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 2)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 6912, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundLocalError("heatmap_array"); __PYX_ERR(1, 6912, __pyx_L1_error) }
    __pyx_t_43 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_44 = 2;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_43 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_44)) )) = __pyx_t_42;
+06913:     i += 1
    __pyx_v_12PygameShader_6shader_i = (__pyx_v_12PygameShader_6shader_i + 1);
 06914: 
 06915: 
 06916: 
 06917: @cython.binding(False)
 06918: @cython.binding(False)
 06919: @cython.boundscheck(False)
 06920: @cython.wraparound(False)
 06921: @cython.nonecheck(False)
 06922: @cython.cdivision(True)
 06923: @cython.profile(False)
+06924: cpdef inline void heatmap_convert(object surface_, bint rgb_=True):
static PyObject *__pyx_pw_12PygameShader_6shader_163heatmap_convert(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_heatmap_convert(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_heatmap_convert *__pyx_optional_args) {
  int __pyx_v_rgb_ = ((int)1);
  CYTHON_UNUSED unsigned int __pyx_v_w;
  CYTHON_UNUSED unsigned int __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned int __pyx_v_s;
  int __pyx_v_i;
  CYTHON_UNUSED int __pyx_v_size;
  unsigned int __pyx_v_index;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  CYTHON_UNUSED short __pyx_v_bitsize;
  CYTHON_UNUSED short __pyx_v_bytesize;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatmap_convert", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_rgb_ = __pyx_optional_args->rgb_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.heatmap_convert", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_163heatmap_convert(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_162heatmap_convert[] = "\n    TRANSFORM AN IMAGE INTO A HEATMAP EQUIVALENT\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    :param surface_ : pygame.Surface\n    :param rgb_     : boolean; True transformed the image into a RGB heatmap model of False (BGR)\n    :return         : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_163heatmap_convert(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_rgb_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatmap_convert (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_rgb,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 (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rgb);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "heatmap_convert") < 0)) __PYX_ERR(1, 6924, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    if (values[1]) {
      __pyx_v_rgb_ = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_rgb_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6924, __pyx_L3_error)
    } else {
      __pyx_v_rgb_ = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("heatmap_convert", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6924, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.heatmap_convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_162heatmap_convert(__pyx_self, __pyx_v_surface_, __pyx_v_rgb_);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_162heatmap_convert(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_rgb_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatmap_convert", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.rgb_ = __pyx_v_rgb_;
  __pyx_f_12PygameShader_6shader_heatmap_convert(__pyx_v_surface_, 0, &__pyx_t_1); 
  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.heatmap_convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06925:     """
 06926:     TRANSFORM AN IMAGE INTO A HEATMAP EQUIVALENT
 06927: 
 06928:     Cython cpdef function, this function can be called directly and do not require a
 06929:     hook function.
 06930: 
 06931:     :param surface_ : pygame.Surface
 06932:     :param rgb_     : boolean; True transformed the image into a RGB heatmap model of False (BGR)
 06933:     :return         : void
 06934:     """
 06935: 
 06936:     cdef:
 06937:         unsigned int w, h
+06938:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 6938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 6938, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6938, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6938, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 6938, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 6938, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 6938, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6938, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_unsigned_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6938, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 06939: 
 06940:     cdef:
+06941:         unsigned char [::1] rgb_array  = surface_.get_buffer()
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_buffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 6941, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_rgb_array = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 06942:         unsigned int s
 06943:         int i
+06944:         int size = rgb_array.size
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_rgb_array, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6944, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6944, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6944, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_size = __pyx_t_9;
+06945:         unsigned int index = 0
  __pyx_v_index = 0;
 06946:         unsigned char *r
 06947:         unsigned char *g
 06948:         unsigned char *b
+06949:         short int bitsize = surface_.get_bitsize()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bitsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_short(__pyx_t_3); if (unlikely((__pyx_t_10 == (short)-1) && PyErr_Occurred())) __PYX_ERR(1, 6949, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bitsize = __pyx_t_10;
+06950:         short int bytesize = surface_.get_bytesize()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bytesize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_short(__pyx_t_3); if (unlikely((__pyx_t_10 == (short)-1) && PyErr_Occurred())) __PYX_ERR(1, 6950, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bytesize = __pyx_t_10;
 06951: 
+06952:     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_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }
 06953:         # RGB
+06954:         if rgb_:
        __pyx_t_11 = (__pyx_v_rgb_ != 0);
        if (__pyx_t_11) {
/* … */
          goto __pyx_L8;
        }
+06955:             for i in prange(0, size, bytesize, schedule='static', num_threads=THREADS):
          __pyx_t_9 = __pyx_v_size;
          __pyx_t_10 = __pyx_v_bytesize;
          if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
              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) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s) schedule(static)          __pyx_t_10 = __pyx_v_bytesize;
          if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
              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) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                      #endif /* _OPENMP */
                      for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_13; __pyx_t_12++){
                          {
                              __pyx_v_i = (int)(0 + __pyx_t_10 * __pyx_t_12);
                              /* Initialize private variables to invalid values */
                              __pyx_v_b = ((unsigned char *)1);
                              __pyx_v_g = ((unsigned char *)1);
                              __pyx_v_index = ((unsigned int)0xbad0bad0);
                              __pyx_v_r = ((unsigned char *)1);
                              __pyx_v_s = ((unsigned int)0xbad0bad0);
 06956: 
+06957:                 r = &rgb_array[i]
                              __pyx_t_14 = __pyx_v_i;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_14)) ))));
+06958:                 g = &rgb_array[i + <unsigned short int>1]
                              __pyx_t_14 = (__pyx_v_i + ((unsigned short)1));
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_14)) ))));
+06959:                 b = &rgb_array[i + <unsigned short int>2]
                              __pyx_t_14 = (__pyx_v_i + ((unsigned short)2));
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_14)) ))));
 06960: 
+06961:                 s = r[0] + g[0] + b[0]
                              __pyx_v_s = (((__pyx_v_r[0]) + (__pyx_v_g[0])) + (__pyx_v_b[0]));
+06962:                 index = <int>(s * f_map)
                              __pyx_v_index = ((int)(__pyx_v_s * __pyx_v_12PygameShader_6shader_f_map));
 06963: 
+06964:                 r[0] = <unsigned char>heatmap_array[index, <unsigned short int>0]
                              if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("heatmap_array"); __PYX_ERR(1, 6964, __pyx_L11_error) }
                              __pyx_t_15 = __pyx_v_index;
                              __pyx_t_16 = ((unsigned short)0);
                              (__pyx_v_r[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_15 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_16)) ))));
+06965:                 g[0] = <unsigned char>heatmap_array[index, <unsigned short int>1]
                              if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("heatmap_array"); __PYX_ERR(1, 6965, __pyx_L11_error) }
                              __pyx_t_16 = __pyx_v_index;
                              __pyx_t_15 = ((unsigned short)1);
                              (__pyx_v_g[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_16 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_15)) ))));
+06966:                 b[0] = <unsigned char>heatmap_array[index, <unsigned short int>2]
                              if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("heatmap_array"); __PYX_ERR(1, 6966, __pyx_L11_error) }
                              __pyx_t_15 = __pyx_v_index;
                              __pyx_t_16 = ((unsigned short)2);
                              (__pyx_v_b[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_15 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_16)) ))));
                              goto __pyx_L14;
                              __pyx_L11_error:;
                              {
                                  #ifdef WITH_THREAD
                                  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                  #endif
                                  #ifdef _OPENMP
                                  #pragma omp flush(__pyx_parallel_exc_type)
                                  #endif /* _OPENMP */
                                  if (!__pyx_parallel_exc_type) {
                                    __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                    __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                    __Pyx_GOTREF(__pyx_parallel_exc_type);
                                  }
                                  #ifdef WITH_THREAD
                                  __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                  #endif
                              }
                              __pyx_parallel_why = 4;
                              goto __pyx_L13;
                              __pyx_L13:;
                              #ifdef _OPENMP
                              #pragma omp critical(__pyx_parallel_lastprivates2)
                              #endif /* _OPENMP */
                              {
                                  __pyx_parallel_temp0 = __pyx_v_b;
                                  __pyx_parallel_temp1 = __pyx_v_g;
                                  __pyx_parallel_temp2 = __pyx_v_i;
                                  __pyx_parallel_temp3 = __pyx_v_index;
                                  __pyx_parallel_temp4 = __pyx_v_r;
                                  __pyx_parallel_temp5 = __pyx_v_s;
                              }
                              __pyx_L14:;
                              #ifdef _OPENMP
                              #pragma omp flush(__pyx_parallel_why)
                              #endif /* _OPENMP */
                          }
                      }
                      #ifdef _OPENMP
                      Py_END_ALLOW_THREADS
                      #else
{
#ifdef WITH_THREAD
                      PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                      #endif
                      #endif /* _OPENMP */
                      /* Clean up any temporaries */
                      #ifdef WITH_THREAD
                      __Pyx_PyGILState_Release(__pyx_gilstate_save);
                      #endif
                      #ifndef _OPENMP
}
#endif /* _OPENMP */
                  }
              }
              if (__pyx_parallel_exc_type) {
                /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
                __pyx_parallel_why = 4;
              }
              if (__pyx_parallel_why) {
                __pyx_v_b = __pyx_parallel_temp0;
                __pyx_v_g = __pyx_parallel_temp1;
                __pyx_v_i = __pyx_parallel_temp2;
                __pyx_v_index = __pyx_parallel_temp3;
                __pyx_v_r = __pyx_parallel_temp4;
                __pyx_v_s = __pyx_parallel_temp5;
                switch (__pyx_parallel_why) {
                      case 4:
                  {
                      #ifdef WITH_THREAD
                      PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                      #endif
                      __Pyx_GIVEREF(__pyx_parallel_exc_type);
                      __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                      __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                      #ifdef WITH_THREAD
                      __Pyx_PyGILState_Release(__pyx_gilstate_save);
                      #endif
                  }
                  goto __pyx_L6_error;
                }
              }
          }
          #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
 06967:         # BGR
 06968:         else:
+06969:             for i in prange(0, size, bytesize, schedule='static', num_threads=THREADS):
        /*else*/ {
          __pyx_t_9 = __pyx_v_size;
          __pyx_t_10 = __pyx_v_bytesize;
          if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
              if (__pyx_t_12 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s) schedule(static)          __pyx_t_10 = __pyx_v_bytesize;
          if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
              if (__pyx_t_12 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                      #endif /* _OPENMP */
                      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13++){
                          {
                              __pyx_v_i = (int)(0 + __pyx_t_10 * __pyx_t_13);
                              /* Initialize private variables to invalid values */
                              __pyx_v_b = ((unsigned char *)1);
                              __pyx_v_g = ((unsigned char *)1);
                              __pyx_v_index = ((unsigned int)0xbad0bad0);
                              __pyx_v_r = ((unsigned char *)1);
                              __pyx_v_s = ((unsigned int)0xbad0bad0);
 06970: 
+06971:                 r = &rgb_array[i]
                              __pyx_t_14 = __pyx_v_i;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_14)) ))));
+06972:                 g = &rgb_array[i + <unsigned short int>1]
                              __pyx_t_14 = (__pyx_v_i + ((unsigned short)1));
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_14)) ))));
+06973:                 b = &rgb_array[i + <unsigned short int>2]
                              __pyx_t_14 = (__pyx_v_i + ((unsigned short)2));
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_14)) ))));
 06974: 
+06975:                 s = r[0] + g[0] + b[0]
                              __pyx_v_s = (((__pyx_v_r[0]) + (__pyx_v_g[0])) + (__pyx_v_b[0]));
+06976:                 index = <int>(s * f_map)
                              __pyx_v_index = ((int)(__pyx_v_s * __pyx_v_12PygameShader_6shader_f_map));
 06977: 
+06978:                 r[0] = <unsigned char>heatmap_array[index, <unsigned short int>2]
                              if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("heatmap_array"); __PYX_ERR(1, 6978, __pyx_L17_error) }
                              __pyx_t_16 = __pyx_v_index;
                              __pyx_t_15 = ((unsigned short)2);
                              (__pyx_v_r[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_16 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_15)) ))));
+06979:                 g[0] = <unsigned char>heatmap_array[index, <unsigned short int>1]
                              if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("heatmap_array"); __PYX_ERR(1, 6979, __pyx_L17_error) }
                              __pyx_t_15 = __pyx_v_index;
                              __pyx_t_16 = ((unsigned short)1);
                              (__pyx_v_g[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_15 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_16)) ))));
+06980:                 b[0] = <unsigned char>heatmap_array[index, <unsigned short int>0]
                              if (unlikely(!__pyx_v_12PygameShader_6shader_heatmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("heatmap_array"); __PYX_ERR(1, 6980, __pyx_L17_error) }
                              __pyx_t_16 = __pyx_v_index;
                              __pyx_t_15 = ((unsigned short)0);
                              (__pyx_v_b[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_heatmap_array.data + __pyx_t_16 * __pyx_v_12PygameShader_6shader_heatmap_array.strides[0]) )) + __pyx_t_15)) ))));
                              goto __pyx_L20;
                              __pyx_L17_error:;
                              {
                                  #ifdef WITH_THREAD
                                  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                  #endif
                                  #ifdef _OPENMP
                                  #pragma omp flush(__pyx_parallel_exc_type)
                                  #endif /* _OPENMP */
                                  if (!__pyx_parallel_exc_type) {
                                    __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                    __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                    __Pyx_GOTREF(__pyx_parallel_exc_type);
                                  }
                                  #ifdef WITH_THREAD
                                  __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                  #endif
                              }
                              __pyx_parallel_why = 4;
                              goto __pyx_L19;
                              __pyx_L19:;
                              #ifdef _OPENMP
                              #pragma omp critical(__pyx_parallel_lastprivates3)
                              #endif /* _OPENMP */
                              {
                                  __pyx_parallel_temp0 = __pyx_v_b;
                                  __pyx_parallel_temp1 = __pyx_v_g;
                                  __pyx_parallel_temp2 = __pyx_v_i;
                                  __pyx_parallel_temp3 = __pyx_v_index;
                                  __pyx_parallel_temp4 = __pyx_v_r;
                                  __pyx_parallel_temp5 = __pyx_v_s;
                              }
                              __pyx_L20:;
                              #ifdef _OPENMP
                              #pragma omp flush(__pyx_parallel_why)
                              #endif /* _OPENMP */
                          }
                      }
                      #ifdef _OPENMP
                      Py_END_ALLOW_THREADS
                      #else
{
#ifdef WITH_THREAD
                      PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                      #endif
                      #endif /* _OPENMP */
                      /* Clean up any temporaries */
                      #ifdef WITH_THREAD
                      __Pyx_PyGILState_Release(__pyx_gilstate_save);
                      #endif
                      #ifndef _OPENMP
}
#endif /* _OPENMP */
                  }
              }
              if (__pyx_parallel_exc_type) {
                /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
                __pyx_parallel_why = 4;
              }
              if (__pyx_parallel_why) {
                __pyx_v_b = __pyx_parallel_temp0;
                __pyx_v_g = __pyx_parallel_temp1;
                __pyx_v_i = __pyx_parallel_temp2;
                __pyx_v_index = __pyx_parallel_temp3;
                __pyx_v_r = __pyx_parallel_temp4;
                __pyx_v_s = __pyx_parallel_temp5;
                switch (__pyx_parallel_why) {
                      case 4:
                  {
                      #ifdef WITH_THREAD
                      PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                      #endif
                      __Pyx_GIVEREF(__pyx_parallel_exc_type);
                      __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                      __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                      #ifdef WITH_THREAD
                      __Pyx_PyGILState_Release(__pyx_gilstate_save);
                      #endif
                  }
                  goto __pyx_L6_error;
                }
              }
          }
          #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
        }
        __pyx_L8:;
      }
 06981: 
 06982: 
 06983: 
 06984: @cython.binding(False)
 06985: @cython.binding(False)
 06986: @cython.boundscheck(False)
 06987: @cython.wraparound(False)
 06988: @cython.nonecheck(False)
 06989: @cython.cdivision(True)
 06990: @cython.profile(False)
+06991: cpdef tuple blue_map(int wavelength, float gamma=1.0):
static PyObject *__pyx_pw_12PygameShader_6shader_165blue_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_blue_map(int __pyx_v_wavelength, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_blue_map *__pyx_optional_args) {
  float __pyx_v_gamma = ((float)1.0);
  struct rgb_color_int __pyx_v_rgb_c;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blue_map", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_gamma = __pyx_optional_args->gamma;
    }
  }
/* … */
  /* 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_AddTraceback("PygameShader.shader.blue_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_165blue_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_164blue_map[] = "\n    RETURN AN RGB COLOR VALUE MATCHING A SPECIFIC WAVELENGTH\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    :param wavelength   : integer; Wavelength\n    :param gamma        : float; Gamma value\n    :return             : tuple RGB values (0 ... 255)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_165blue_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_wavelength;
  float __pyx_v_gamma;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blue_map (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_wavelength,&__pyx_n_s_gamma,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_wavelength)) != 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_gamma);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "blue_map") < 0)) __PYX_ERR(1, 6991, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_wavelength = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_wavelength == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6991, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_gamma = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_gamma == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 6991, __pyx_L3_error)
    } else {
      __pyx_v_gamma = ((float)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("blue_map", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 6991, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.blue_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_164blue_map(__pyx_self, __pyx_v_wavelength, __pyx_v_gamma);
  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_6shader_164blue_map(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_wavelength, float __pyx_v_gamma) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blue_map", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.gamma = __pyx_v_gamma;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_blue_map(__pyx_v_wavelength, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6991, __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.shader.blue_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_blue_map {
  int __pyx_n;
  float gamma;
};
 06992:     """
 06993:     RETURN AN RGB COLOR VALUE MATCHING A SPECIFIC WAVELENGTH
 06994: 
 06995:     Cython cpdef function, this function can be called directly and do not require a
 06996:     hook function.
 06997: 
 06998:     :param wavelength   : integer; Wavelength
 06999:     :param gamma        : float; Gamma value
 07000:     :return             : tuple RGB values (0 ... 255)
 07001:     """
 07002:     cdef  rgb_color_int rgb_c
+07003:     rgb_c = wavelength_to_rgb(wavelength, gamma)
  __pyx_v_rgb_c = wavelength_to_rgb(__pyx_v_wavelength, __pyx_v_gamma);
+07004:     return rgb_c.r, rgb_c.g, rgb_c.b
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.r); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.g); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.b); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;
 07005: 
+07006: i = 0
  __pyx_v_12PygameShader_6shader_i = 0;
+07007: BLUEMAP = [ blue_map(i, 1.0) for i in range(450, 495) ]
  __pyx_t_30 = PyList_New(0); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  for (__pyx_t_7 = 0x1C2; __pyx_t_7 < 0x1EF; __pyx_t_7+=1) {
    __pyx_v_12PygameShader_6shader_i = __pyx_t_7;
    __pyx_t_45.__pyx_n = 1;
    __pyx_t_45.gamma = 1.0;
    __pyx_t_33 = __pyx_f_12PygameShader_6shader_blue_map(__pyx_v_12PygameShader_6shader_i, 0, &__pyx_t_45); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 7007, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_33);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_30, (PyObject*)__pyx_t_33))) __PYX_ERR(1, 7007, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BLUEMAP, __pyx_t_30) < 0) __PYX_ERR(1, 7007, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
 07008: 
+07009: cdef float f_bluemap = (<float>495.0 - <float>450.0 - <float>1.0) / (<float>255.0 * <float>3.0)
  __pyx_v_12PygameShader_6shader_f_bluemap = (((((float)495.0) - ((float)450.0)) - ((float)1.0)) / (((float)255.0) * ((float)3.0)));
 07010: 
+07011: cdef unsigned char[:, ::1] bluemap_array = numpy.zeros((495 - 450, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_zeros); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 7011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_30 = PyTuple_New(2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_INCREF(__pyx_tuple__77);
  __Pyx_GIVEREF(__pyx_tuple__77);
  PyTuple_SET_ITEM(__pyx_t_30, 0, __pyx_tuple__77);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_30, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_33, __pyx_t_30, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_39 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_39.memview)) __PYX_ERR(1, 7011, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_12PygameShader_6shader_bluemap_array, 1);
  __pyx_v_12PygameShader_6shader_bluemap_array = __pyx_t_39;
  __pyx_t_39.memview = NULL;
  __pyx_t_39.data = NULL;
/* … */
  __pyx_tuple__77 = PyTuple_Pack(2, __pyx_int_45, __pyx_int_3); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(1, 7011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__77);
  __Pyx_GIVEREF(__pyx_tuple__77);
 07012: 
+07013: i = 0
  __pyx_v_12PygameShader_6shader_i = 0;
+07014: for t in BLUEMAP:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_BLUEMAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
    __pyx_t_30 = __pyx_t_2; __Pyx_INCREF(__pyx_t_30); __pyx_t_40 = 0;
    __pyx_t_41 = NULL;
  } else {
    __pyx_t_40 = -1; __pyx_t_30 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_30);
    __pyx_t_41 = Py_TYPE(__pyx_t_30)->tp_iternext; if (unlikely(!__pyx_t_41)) __PYX_ERR(1, 7014, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (likely(!__pyx_t_41)) {
      if (likely(PyList_CheckExact(__pyx_t_30))) {
        if (__pyx_t_40 >= PyList_GET_SIZE(__pyx_t_30)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_30, __pyx_t_40); __Pyx_INCREF(__pyx_t_2); __pyx_t_40++; if (unlikely(0 < 0)) __PYX_ERR(1, 7014, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_30, __pyx_t_40); __pyx_t_40++; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7014, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_40 >= PyTuple_GET_SIZE(__pyx_t_30)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_30, __pyx_t_40); __Pyx_INCREF(__pyx_t_2); __pyx_t_40++; if (unlikely(0 < 0)) __PYX_ERR(1, 7014, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_30, __pyx_t_40); __pyx_t_40++; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7014, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_41(__pyx_t_30);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(1, 7014, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    if (!(likely(PyTuple_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(1, 7014, __pyx_L1_error)
    __Pyx_XGOTREF(__pyx_v_12PygameShader_6shader_t);
    __Pyx_DECREF_SET(__pyx_v_12PygameShader_6shader_t, ((PyObject*)__pyx_t_2));
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
+07015:     bluemap_array[i, 0] = t[0]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7015, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 0)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 7015, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_bluemap_array.memview)) { __Pyx_RaiseUnboundLocalError("bluemap_array"); __PYX_ERR(1, 7015, __pyx_L1_error) }
    __pyx_t_44 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_43 = 0;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_bluemap_array.data + __pyx_t_44 * __pyx_v_12PygameShader_6shader_bluemap_array.strides[0]) )) + __pyx_t_43)) )) = __pyx_t_42;
+07016:     bluemap_array[i, 1] = t[1]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7016, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 1)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 7016, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_bluemap_array.memview)) { __Pyx_RaiseUnboundLocalError("bluemap_array"); __PYX_ERR(1, 7016, __pyx_L1_error) }
    __pyx_t_43 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_44 = 1;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_bluemap_array.data + __pyx_t_43 * __pyx_v_12PygameShader_6shader_bluemap_array.strides[0]) )) + __pyx_t_44)) )) = __pyx_t_42;
+07017:     bluemap_array[i, 2] = t[2]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7017, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 2)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 7017, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_bluemap_array.memview)) { __Pyx_RaiseUnboundLocalError("bluemap_array"); __PYX_ERR(1, 7017, __pyx_L1_error) }
    __pyx_t_44 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_43 = 2;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_bluemap_array.data + __pyx_t_44 * __pyx_v_12PygameShader_6shader_bluemap_array.strides[0]) )) + __pyx_t_43)) )) = __pyx_t_42;
+07018:     i += 1
    __pyx_v_12PygameShader_6shader_i = (__pyx_v_12PygameShader_6shader_i + 1);
 07019: 
 07020: @cython.binding(False)
 07021: @cython.binding(False)
 07022: @cython.boundscheck(False)
 07023: @cython.wraparound(False)
 07024: @cython.nonecheck(False)
 07025: @cython.cdivision(True)
 07026: @cython.profile(False)
+07027: cpdef inline void bluescale(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_167bluescale(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_bluescale(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  CYTHON_UNUSED unsigned int __pyx_v_w;
  CYTHON_UNUSED unsigned int __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned int __pyx_v_s;
  int __pyx_v_i;
  CYTHON_UNUSED int __pyx_v_size;
  unsigned int __pyx_v_index;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  CYTHON_UNUSED short __pyx_v_bitsize;
  CYTHON_UNUSED short __pyx_v_bytesize;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bluescale", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.bluescale", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_167bluescale(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_166bluescale[] = "\n    MAP AN IMAGE INTO A BLUE EQUIVALENT FORMAT\n    THIS ALGORITHM IS USING THE WAVELENGTH FROM 450-495 NM TO\n    REPRESENT THE IMAGE IN BLUE SHADES\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    :param surface_ : pygame.Surface to transform\n    :return         : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_167bluescale(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bluescale (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_166bluescale(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_166bluescale(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bluescale", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_bluescale(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7027, __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.shader.bluescale", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07028:     """
 07029:     MAP AN IMAGE INTO A BLUE EQUIVALENT FORMAT
 07030:     THIS ALGORITHM IS USING THE WAVELENGTH FROM 450-495 NM TO
 07031:     REPRESENT THE IMAGE IN BLUE SHADES
 07032: 
 07033:     Cython cpdef function, this function can be called directly and do not require a
 07034:     hook function.
 07035: 
 07036:     :param surface_ : pygame.Surface to transform
 07037:     :return         : void
 07038:     """
 07039: 
 07040: 
 07041:     cdef:
 07042:         unsigned int w, h
+07043:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 7043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 7043, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 7043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 7043, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 7043, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7043, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_unsigned_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7043, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 07044: 
 07045:     cdef:
+07046:         unsigned char [::1] rgb_array  = surface_.get_buffer()
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_buffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 7046, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_rgb_array = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 07047:         unsigned int s
 07048:         int i
+07049:         int size = rgb_array.size
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_rgb_array, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7049, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_size = __pyx_t_9;
+07050:         unsigned int index = 0
  __pyx_v_index = 0;
 07051:         unsigned char *r
 07052:         unsigned char *g
 07053:         unsigned char *b
+07054:         short int bitsize = surface_.get_bitsize()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bitsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_short(__pyx_t_3); if (unlikely((__pyx_t_10 == (short)-1) && PyErr_Occurred())) __PYX_ERR(1, 7054, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bitsize = __pyx_t_10;
+07055:         short int bytesize = surface_.get_bytesize()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bytesize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_short(__pyx_t_3); if (unlikely((__pyx_t_10 == (short)-1) && PyErr_Occurred())) __PYX_ERR(1, 7055, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bytesize = __pyx_t_10;
 07056: 
+07057:     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_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }
+07058:         for i in prange(0, size, bytesize, schedule='static', num_threads=THREADS):
        __pyx_t_9 = __pyx_v_size;
        __pyx_t_10 = __pyx_v_bytesize;
        if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s) schedule(static)        __pyx_t_10 = __pyx_v_bytesize;
        if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_12; __pyx_t_11++){
                        {
                            __pyx_v_i = (int)(0 + __pyx_t_10 * __pyx_t_11);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_index = ((unsigned int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_s = ((unsigned int)0xbad0bad0);
 07059: 
+07060:             r = &rgb_array[i]
                            __pyx_t_13 = __pyx_v_i;
                            __pyx_v_r = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_13)) ))));
+07061:             g = &rgb_array[i + <unsigned short int>1]
                            __pyx_t_13 = (__pyx_v_i + ((unsigned short)1));
                            __pyx_v_g = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_13)) ))));
+07062:             b = &rgb_array[i + <unsigned short int>2]
                            __pyx_t_13 = (__pyx_v_i + ((unsigned short)2));
                            __pyx_v_b = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_13)) ))));
 07063: 
+07064:             s = r[0] + g[0] + b[0]
                            __pyx_v_s = (((__pyx_v_r[0]) + (__pyx_v_g[0])) + (__pyx_v_b[0]));
+07065:             index = <int>(s * f_bluemap)
                            __pyx_v_index = ((int)(__pyx_v_s * __pyx_v_12PygameShader_6shader_f_bluemap));
 07066: 
+07067:             r[0] = <unsigned char>bluemap_array[index, <unsigned short int>2]
                            if (unlikely(!__pyx_v_12PygameShader_6shader_bluemap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("bluemap_array"); __PYX_ERR(1, 7067, __pyx_L10_error) }
                            __pyx_t_14 = __pyx_v_index;
                            __pyx_t_15 = ((unsigned short)2);
                            (__pyx_v_r[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_bluemap_array.data + __pyx_t_14 * __pyx_v_12PygameShader_6shader_bluemap_array.strides[0]) )) + __pyx_t_15)) ))));
+07068:             g[0] = <unsigned char>bluemap_array[index, <unsigned short int>1]
                            if (unlikely(!__pyx_v_12PygameShader_6shader_bluemap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("bluemap_array"); __PYX_ERR(1, 7068, __pyx_L10_error) }
                            __pyx_t_15 = __pyx_v_index;
                            __pyx_t_14 = ((unsigned short)1);
                            (__pyx_v_g[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_bluemap_array.data + __pyx_t_15 * __pyx_v_12PygameShader_6shader_bluemap_array.strides[0]) )) + __pyx_t_14)) ))));
+07069:             b[0] = <unsigned char>bluemap_array[index, <unsigned short int>0]
                            if (unlikely(!__pyx_v_12PygameShader_6shader_bluemap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("bluemap_array"); __PYX_ERR(1, 7069, __pyx_L10_error) }
                            __pyx_t_14 = __pyx_v_index;
                            __pyx_t_15 = ((unsigned short)0);
                            (__pyx_v_b[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_bluemap_array.data + __pyx_t_14 * __pyx_v_12PygameShader_6shader_bluemap_array.strides[0]) )) + __pyx_t_15)) ))));
                            goto __pyx_L13;
                            __pyx_L10_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L12;
                            __pyx_L12:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates4)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_b;
                                __pyx_parallel_temp1 = __pyx_v_g;
                                __pyx_parallel_temp2 = __pyx_v_i;
                                __pyx_parallel_temp3 = __pyx_v_index;
                                __pyx_parallel_temp4 = __pyx_v_r;
                                __pyx_parallel_temp5 = __pyx_v_s;
                            }
                            __pyx_L13:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_b = __pyx_parallel_temp0;
              __pyx_v_g = __pyx_parallel_temp1;
              __pyx_v_i = __pyx_parallel_temp2;
              __pyx_v_index = __pyx_parallel_temp3;
              __pyx_v_r = __pyx_parallel_temp4;
              __pyx_v_s = __pyx_parallel_temp5;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L6_error;
              }
            }
        }
        #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
      }
 07070: 
 07071: 
 07072: 
 07073: @cython.binding(False)
 07074: @cython.binding(False)
 07075: @cython.boundscheck(False)
 07076: @cython.wraparound(False)
 07077: @cython.nonecheck(False)
 07078: @cython.cdivision(True)
 07079: @cython.profile(False)
+07080: cpdef tuple red_map(int wavelength, float gamma=1.0):
static PyObject *__pyx_pw_12PygameShader_6shader_169red_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_red_map(int __pyx_v_wavelength, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_red_map *__pyx_optional_args) {
  float __pyx_v_gamma = ((float)1.0);
  struct rgb_color_int __pyx_v_rgb_c;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("red_map", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_gamma = __pyx_optional_args->gamma;
    }
  }
/* … */
  /* 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_AddTraceback("PygameShader.shader.red_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_169red_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_168red_map[] = "\n    RETURN AN RGB COLOR VALUE MATCHING A SPECIFIC WAVELENGTH\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    :param wavelength   : integer; Wavelength\n    :param gamma        : float; Gamma value\n    :return             : tuple RGB values (0 ... 255)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_169red_map(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_wavelength;
  float __pyx_v_gamma;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("red_map (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_wavelength,&__pyx_n_s_gamma,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_wavelength)) != 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_gamma);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "red_map") < 0)) __PYX_ERR(1, 7080, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_wavelength = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_wavelength == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7080, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_gamma = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_gamma == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 7080, __pyx_L3_error)
    } else {
      __pyx_v_gamma = ((float)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("red_map", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 7080, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.red_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_168red_map(__pyx_self, __pyx_v_wavelength, __pyx_v_gamma);
  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_6shader_168red_map(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_wavelength, float __pyx_v_gamma) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("red_map", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.gamma = __pyx_v_gamma;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_red_map(__pyx_v_wavelength, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7080, __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.shader.red_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_red_map {
  int __pyx_n;
  float gamma;
};
 07081:     """
 07082:     RETURN AN RGB COLOR VALUE MATCHING A SPECIFIC WAVELENGTH
 07083: 
 07084:     Cython cpdef function, this function can be called directly and do not require a
 07085:     hook function.
 07086: 
 07087:     :param wavelength   : integer; Wavelength
 07088:     :param gamma        : float; Gamma value
 07089:     :return             : tuple RGB values (0 ... 255)
 07090:     """
 07091:     cdef  rgb_color_int rgb_c
+07092:     rgb_c = wavelength_to_rgb(wavelength, gamma)
  __pyx_v_rgb_c = wavelength_to_rgb(__pyx_v_wavelength, __pyx_v_gamma);
+07093:     return rgb_c.r, rgb_c.g, rgb_c.b
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.r); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.g); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rgb_c.b); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;
 07094: 
+07095: i = 0
  __pyx_v_12PygameShader_6shader_i = 0;
+07096: REDMAP = [ red_map(i, 1.0) for i in range(620, 750) ]
  __pyx_t_30 = PyList_New(0); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  for (__pyx_t_7 = 0x26C; __pyx_t_7 < 0x2EE; __pyx_t_7+=1) {
    __pyx_v_12PygameShader_6shader_i = __pyx_t_7;
    __pyx_t_46.__pyx_n = 1;
    __pyx_t_46.gamma = 1.0;
    __pyx_t_2 = __pyx_f_12PygameShader_6shader_red_map(__pyx_v_12PygameShader_6shader_i, 0, &__pyx_t_46); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_30, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 7096, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REDMAP, __pyx_t_30) < 0) __PYX_ERR(1, 7096, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
 07097: 
+07098: cdef float f_redmap = (<float>750.0 - <float>620.0 - <float>1.0) / (<float>255.0 * <float>3.0)
  __pyx_v_12PygameShader_6shader_f_redmap = (((((float)750.0) - ((float)620.0)) - ((float)1.0)) / (((float)255.0) * ((float)3.0)));
 07099: 
+07100: cdef unsigned char[:, ::1] redmap_array = numpy.zeros((750 - 620, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_uint8); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 7100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_30 = PyTuple_New(2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_INCREF(__pyx_tuple__78);
  __Pyx_GIVEREF(__pyx_tuple__78);
  PyTuple_SET_ITEM(__pyx_t_30, 0, __pyx_tuple__78);
  __Pyx_GIVEREF(__pyx_t_33);
  PyTuple_SET_ITEM(__pyx_t_30, 1, __pyx_t_33);
  __pyx_t_33 = 0;
  __pyx_t_33 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_30, NULL); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 7100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_39 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_unsigned_char(__pyx_t_33, PyBUF_WRITABLE); if (unlikely(!__pyx_t_39.memview)) __PYX_ERR(1, 7100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_12PygameShader_6shader_redmap_array, 1);
  __pyx_v_12PygameShader_6shader_redmap_array = __pyx_t_39;
  __pyx_t_39.memview = NULL;
  __pyx_t_39.data = NULL;
/* … */
  __pyx_tuple__78 = PyTuple_Pack(2, __pyx_int_130, __pyx_int_3); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(1, 7100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__78);
  __Pyx_GIVEREF(__pyx_tuple__78);
 07101: 
+07102: i = 0
  __pyx_v_12PygameShader_6shader_i = 0;
+07103: for t in REDMAP:
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_REDMAP); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 7103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  if (likely(PyList_CheckExact(__pyx_t_33)) || PyTuple_CheckExact(__pyx_t_33)) {
    __pyx_t_30 = __pyx_t_33; __Pyx_INCREF(__pyx_t_30); __pyx_t_40 = 0;
    __pyx_t_41 = NULL;
  } else {
    __pyx_t_40 = -1; __pyx_t_30 = PyObject_GetIter(__pyx_t_33); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 7103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_30);
    __pyx_t_41 = Py_TYPE(__pyx_t_30)->tp_iternext; if (unlikely(!__pyx_t_41)) __PYX_ERR(1, 7103, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  for (;;) {
    if (likely(!__pyx_t_41)) {
      if (likely(PyList_CheckExact(__pyx_t_30))) {
        if (__pyx_t_40 >= PyList_GET_SIZE(__pyx_t_30)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_33 = PyList_GET_ITEM(__pyx_t_30, __pyx_t_40); __Pyx_INCREF(__pyx_t_33); __pyx_t_40++; if (unlikely(0 < 0)) __PYX_ERR(1, 7103, __pyx_L1_error)
        #else
        __pyx_t_33 = PySequence_ITEM(__pyx_t_30, __pyx_t_40); __pyx_t_40++; if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 7103, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        #endif
      } else {
        if (__pyx_t_40 >= PyTuple_GET_SIZE(__pyx_t_30)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_33 = PyTuple_GET_ITEM(__pyx_t_30, __pyx_t_40); __Pyx_INCREF(__pyx_t_33); __pyx_t_40++; if (unlikely(0 < 0)) __PYX_ERR(1, 7103, __pyx_L1_error)
        #else
        __pyx_t_33 = PySequence_ITEM(__pyx_t_30, __pyx_t_40); __pyx_t_40++; if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 7103, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        #endif
      }
    } else {
      __pyx_t_33 = __pyx_t_41(__pyx_t_30);
      if (unlikely(!__pyx_t_33)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(1, 7103, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_33);
    }
    if (!(likely(PyTuple_CheckExact(__pyx_t_33))||((__pyx_t_33) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_33)->tp_name), 0))) __PYX_ERR(1, 7103, __pyx_L1_error)
    __Pyx_XGOTREF(__pyx_v_12PygameShader_6shader_t);
    __Pyx_DECREF_SET(__pyx_v_12PygameShader_6shader_t, ((PyObject*)__pyx_t_33));
    __Pyx_GIVEREF(__pyx_t_33);
    __pyx_t_33 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
+07104:     redmap_array[i, 0] = t[0]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7104, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 0)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 7104, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_redmap_array.memview)) { __Pyx_RaiseUnboundLocalError("redmap_array"); __PYX_ERR(1, 7104, __pyx_L1_error) }
    __pyx_t_43 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_44 = 0;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_redmap_array.data + __pyx_t_43 * __pyx_v_12PygameShader_6shader_redmap_array.strides[0]) )) + __pyx_t_44)) )) = __pyx_t_42;
+07105:     redmap_array[i, 1] = t[1]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7105, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 1)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 7105, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_redmap_array.memview)) { __Pyx_RaiseUnboundLocalError("redmap_array"); __PYX_ERR(1, 7105, __pyx_L1_error) }
    __pyx_t_44 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_43 = 1;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_redmap_array.data + __pyx_t_44 * __pyx_v_12PygameShader_6shader_redmap_array.strides[0]) )) + __pyx_t_43)) )) = __pyx_t_42;
+07106:     redmap_array[i, 2] = t[2]
    if (unlikely(__pyx_v_12PygameShader_6shader_t == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7106, __pyx_L1_error)
    }
    __pyx_t_42 = __Pyx_PyInt_As_unsigned_char(PyTuple_GET_ITEM(__pyx_v_12PygameShader_6shader_t, 2)); if (unlikely((__pyx_t_42 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 7106, __pyx_L1_error)
    if (unlikely(!__pyx_v_12PygameShader_6shader_redmap_array.memview)) { __Pyx_RaiseUnboundLocalError("redmap_array"); __PYX_ERR(1, 7106, __pyx_L1_error) }
    __pyx_t_43 = __pyx_v_12PygameShader_6shader_i;
    __pyx_t_44 = 2;
    *((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_redmap_array.data + __pyx_t_43 * __pyx_v_12PygameShader_6shader_redmap_array.strides[0]) )) + __pyx_t_44)) )) = __pyx_t_42;
+07107:     i += 1
    __pyx_v_12PygameShader_6shader_i = (__pyx_v_12PygameShader_6shader_i + 1);
 07108: 
 07109: 
 07110: 
 07111: @cython.binding(False)
 07112: @cython.binding(False)
 07113: @cython.boundscheck(False)
 07114: @cython.wraparound(False)
 07115: @cython.nonecheck(False)
 07116: @cython.cdivision(True)
 07117: @cython.profile(False)
+07118: cpdef inline void redscale(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_171redscale(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_redscale(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  CYTHON_UNUSED unsigned int __pyx_v_w;
  CYTHON_UNUSED unsigned int __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned int __pyx_v_s;
  int __pyx_v_i;
  CYTHON_UNUSED int __pyx_v_size;
  unsigned int __pyx_v_index;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  CYTHON_UNUSED short __pyx_v_bitsize;
  CYTHON_UNUSED short __pyx_v_bytesize;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("redscale", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.redscale", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_171redscale(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_170redscale[] = "\n    MAP AN IMAGE INTO A RED EQUIVALENT FORMAT\n    THIS ALGORITHM IS USING THE WAVELENGTH FROM 620 TO 750 NM TO\n    REPRESENT THE IMAGE IN RED SHADES\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    :param surface_ : pygame.Surface to transform\n    :return         : void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_171redscale(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("redscale (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_170redscale(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_170redscale(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("redscale", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_redscale(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7118, __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.shader.redscale", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07119:     """
 07120:     MAP AN IMAGE INTO A RED EQUIVALENT FORMAT
 07121:     THIS ALGORITHM IS USING THE WAVELENGTH FROM 620 TO 750 NM TO
 07122:     REPRESENT THE IMAGE IN RED SHADES
 07123: 
 07124:     Cython cpdef function, this function can be called directly and do not require a
 07125:     hook function.
 07126: 
 07127:     :param surface_ : pygame.Surface to transform
 07128:     :return         : void
 07129:     """
 07130: 
 07131: 
 07132:     cdef:
 07133:         unsigned int w, h
+07134:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 7134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 7134, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 7134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 7134, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 7134, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_unsigned_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 07135: 
 07136:     cdef:
+07137:         unsigned char [::1] rgb_array  = surface_.get_buffer()
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_buffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 7137, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_rgb_array = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 07138:         unsigned int s
 07139:         int i
+07140:         int size = rgb_array.size
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_rgb_array, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7140, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_size = __pyx_t_9;
+07141:         unsigned int index = 0
  __pyx_v_index = 0;
 07142:         unsigned char *r
 07143:         unsigned char *g
 07144:         unsigned char *b
+07145:         short int bitsize = surface_.get_bitsize()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bitsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_short(__pyx_t_3); if (unlikely((__pyx_t_10 == (short)-1) && PyErr_Occurred())) __PYX_ERR(1, 7145, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bitsize = __pyx_t_10;
+07146:         short int bytesize = surface_.get_bytesize()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bytesize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_short(__pyx_t_3); if (unlikely((__pyx_t_10 == (short)-1) && PyErr_Occurred())) __PYX_ERR(1, 7146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bytesize = __pyx_t_10;
 07147: 
+07148:     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_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }
+07149:         for i in prange(0, size, bytesize, schedule='static', num_threads=THREADS):
        __pyx_t_9 = __pyx_v_size;
        __pyx_t_10 = __pyx_v_bytesize;
        if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s) schedule(static)        __pyx_t_10 = __pyx_v_bytesize;
        if ((__pyx_t_10 == 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_9 - 0 + __pyx_t_10 - __pyx_t_10/abs(__pyx_t_10)) / __pyx_t_10;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_r) lastprivate(__pyx_v_s) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_12; __pyx_t_11++){
                        {
                            __pyx_v_i = (int)(0 + __pyx_t_10 * __pyx_t_11);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_index = ((unsigned int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_s = ((unsigned int)0xbad0bad0);
 07150: 
+07151:             r = &rgb_array[i]
                            __pyx_t_13 = __pyx_v_i;
                            __pyx_v_r = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_13)) ))));
+07152:             g = &rgb_array[i + <unsigned short int>1]
                            __pyx_t_13 = (__pyx_v_i + ((unsigned short)1));
                            __pyx_v_g = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_13)) ))));
+07153:             b = &rgb_array[i + <unsigned short int>2]
                            __pyx_t_13 = (__pyx_v_i + ((unsigned short)2));
                            __pyx_v_b = (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_rgb_array.data) + __pyx_t_13)) ))));
 07154: 
+07155:             s = r[0] + g[0] + b[0]
                            __pyx_v_s = (((__pyx_v_r[0]) + (__pyx_v_g[0])) + (__pyx_v_b[0]));
+07156:             index = <int>(s * f_redmap)
                            __pyx_v_index = ((int)(__pyx_v_s * __pyx_v_12PygameShader_6shader_f_redmap));
 07157: 
+07158:             r[0] = <unsigned char>redmap_array[index, <unsigned short int>2]
                            if (unlikely(!__pyx_v_12PygameShader_6shader_redmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("redmap_array"); __PYX_ERR(1, 7158, __pyx_L10_error) }
                            __pyx_t_14 = __pyx_v_index;
                            __pyx_t_15 = ((unsigned short)2);
                            (__pyx_v_r[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_redmap_array.data + __pyx_t_14 * __pyx_v_12PygameShader_6shader_redmap_array.strides[0]) )) + __pyx_t_15)) ))));
+07159:             g[0] = <unsigned char>redmap_array[index, <unsigned short int>1]
                            if (unlikely(!__pyx_v_12PygameShader_6shader_redmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("redmap_array"); __PYX_ERR(1, 7159, __pyx_L10_error) }
                            __pyx_t_15 = __pyx_v_index;
                            __pyx_t_14 = ((unsigned short)1);
                            (__pyx_v_g[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_redmap_array.data + __pyx_t_15 * __pyx_v_12PygameShader_6shader_redmap_array.strides[0]) )) + __pyx_t_14)) ))));
+07160:             b[0] = <unsigned char>redmap_array[index, <unsigned short int>0]
                            if (unlikely(!__pyx_v_12PygameShader_6shader_redmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("redmap_array"); __PYX_ERR(1, 7160, __pyx_L10_error) }
                            __pyx_t_14 = __pyx_v_index;
                            __pyx_t_15 = ((unsigned short)0);
                            (__pyx_v_b[0]) = ((unsigned char)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_redmap_array.data + __pyx_t_14 * __pyx_v_12PygameShader_6shader_redmap_array.strides[0]) )) + __pyx_t_15)) ))));
                            goto __pyx_L13;
                            __pyx_L10_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L12;
                            __pyx_L12:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates5)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_b;
                                __pyx_parallel_temp1 = __pyx_v_g;
                                __pyx_parallel_temp2 = __pyx_v_i;
                                __pyx_parallel_temp3 = __pyx_v_index;
                                __pyx_parallel_temp4 = __pyx_v_r;
                                __pyx_parallel_temp5 = __pyx_v_s;
                            }
                            __pyx_L13:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_b = __pyx_parallel_temp0;
              __pyx_v_g = __pyx_parallel_temp1;
              __pyx_v_i = __pyx_parallel_temp2;
              __pyx_v_index = __pyx_parallel_temp3;
              __pyx_v_r = __pyx_parallel_temp4;
              __pyx_v_s = __pyx_parallel_temp5;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L6_error;
              }
            }
        }
        #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
      }
 07161: 
 07162: 
 07163: 
 07164: @cython.binding(False)
 07165: @cython.binding(False)
 07166: @cython.boundscheck(False)
 07167: @cython.wraparound(False)
 07168: @cython.nonecheck(False)
 07169: @cython.cdivision(True)
 07170: @cython.profile(False)
+07171: cdef inline void shader_blood_inplace_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_blood_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_, __Pyx_memviewslice __pyx_v_mask_, float __pyx_v_perc_) {
  int __pyx_v_w;
  CYTHON_UNUSED int __pyx_v_h;
  CYTHON_UNUSED int __pyx_v_bytesize;
  int __pyx_v_i;
  int __pyx_v_j;
  unsigned int __pyx_v_index;
  unsigned char *__pyx_v_r;
  float __pyx_v_theta;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_blood_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __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_WriteUnraisable("PygameShader.shader.shader_blood_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 07172:         unsigned char [:, :, :] rgb_array_, float [:, :] mask_, float perc_):
 07173: 
 07174:     """
 07175:     SHADER HURT EFFECT
 07176:     THE MASK DETERMINE THE CONTOUR USED FOR THE BLOOD EFFECT.
 07177: 
 07178:     The Array (rgb_array) must be a numpy array shape (w, h, 3)
 07179:     containing RGB pixels, please refer to pygame
 07180:     function pixels3d or array3d to convert an image into a
 07181:     3d array (library surfarray)
 07182: 
 07183:     :param rgb_array_   : numpy.ndarray shape (w, h, 3) of unsigned
 07184:     char representing the surface pixels
 07185:     :param mask_        : numpy.ndarray shape (w, h) of float values in range [0.0...1.0]
 07186:     :param perc_        : Percentage value in range [0.0 ... 1.0] with 1.0 being 100%
 07187: 
 07188:     :return: void
 07189:     """
+07190:     assert 0.0 <= perc_ <= 1.0, "perc_ variable must be in range[0.0 ... 1.0] got %s " % perc_
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = (0.0 <= __pyx_v_perc_);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_perc_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_perc_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7190, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_perc__variable_must_be_in_range, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7190, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 7190, __pyx_L1_error)
    }
  }
  #endif
 07191: 
 07192:     cdef:
 07193:         int w, h, bytesize
+07194:     w, h, bytesize = (<object> rgb_array_).shape
  __pyx_t_3 = __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_3)) __PYX_ERR(1, 7194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    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(1, 7194, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(1, 7194, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 7194, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7194, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7194, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7194, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_w = __pyx_t_8;
  __pyx_v_h = __pyx_t_9;
  __pyx_v_bytesize = __pyx_t_10;
 07195: 
 07196:     cdef:
 07197:         unsigned int s
 07198:         int i, j
+07199:         unsigned int index = 0
  __pyx_v_index = 0;
 07200:         unsigned char *r
 07201:         unsigned char *g
 07202:         unsigned char *b
 07203:         float theta
 07204: 
 07205: 
+07206:     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_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }
+07207:         for j in prange(0, h, schedule='static', num_threads=THREADS):
        __pyx_t_10 = __pyx_v_h;
        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) lastprivate(__pyx_v_index) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_theta) schedule(static)
/* … */
        __pyx_t_10 = __pyx_v_h;
        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) lastprivate(__pyx_v_index) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_theta) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #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_index = ((unsigned int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_theta = ((float)__PYX_NAN());
+07208:             for i in range(0, w):
                            __pyx_t_9 = __pyx_v_w;
                            __pyx_t_8 = __pyx_t_9;
                            for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_8; __pyx_t_13+=1) {
                              __pyx_v_i = __pyx_t_13;
 07209: 
+07210:                 r = &rgb_array_[i, j, <unsigned short int>0]
                              __pyx_t_14 = __pyx_v_i;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_16 = ((unsigned short)0);
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[2]) ))));
 07211: 
+07212:                 index = <int>(r[0] * f_redmap)
                              __pyx_v_index = ((int)((__pyx_v_r[0]) * __pyx_v_12PygameShader_6shader_f_redmap));
+07213:                 theta = <float>(mask_[i, j] * perc_)
                              __pyx_t_15 = __pyx_v_i;
                              __pyx_t_14 = __pyx_v_j;
                              __pyx_v_theta = ((float)((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mask_.data + __pyx_t_15 * __pyx_v_mask_.strides[0]) ) + __pyx_t_14 * __pyx_v_mask_.strides[1]) ))) * __pyx_v_perc_));
 07214: 
 07215:                 # ALTERNATIVE WITH BEST PERFORMANCES
+07216:                 r[0] = <unsigned char> (
                              (__pyx_v_r[0]) = ((unsigned char)__pyx_t_20);
                            }
                            goto __pyx_L15;
                            __pyx_L10_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L14;
                            __pyx_L14:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates6)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_i;
                                __pyx_parallel_temp1 = __pyx_v_index;
                                __pyx_parallel_temp2 = __pyx_v_j;
                                __pyx_parallel_temp3 = __pyx_v_r;
                                __pyx_parallel_temp4 = __pyx_v_theta;
                            }
                            __pyx_L15:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_i = __pyx_parallel_temp0;
              __pyx_v_index = __pyx_parallel_temp1;
              __pyx_v_j = __pyx_parallel_temp2;
              __pyx_v_r = __pyx_parallel_temp3;
              __pyx_v_theta = __pyx_parallel_temp4;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L6_error;
              }
            }
        }
        #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
      }
+07217:                     min(r[0] + <float> redmap_array[
                              if (unlikely(!__pyx_v_12PygameShader_6shader_redmap_array.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("redmap_array"); __PYX_ERR(1, 7217, __pyx_L10_error) }
/* … */
                              __pyx_t_16 = __pyx_v_index;
                              __pyx_t_18 = ((unsigned short)0);
/* … */
                              __pyx_t_19 = ((__pyx_v_r[0]) + (((float)(*((unsigned char *) ( /* dim=1 */ ((char *) (((unsigned char *) ( /* dim=0 */ (__pyx_v_12PygameShader_6shader_redmap_array.data + __pyx_t_16 * __pyx_v_12PygameShader_6shader_redmap_array.strides[0]) )) + __pyx_t_18)) )))) * __pyx_v_theta));
+07218:                         index, <unsigned short int>0] * theta, <unsigned char>255))
                              __pyx_t_17 = ((unsigned char)0xFF);
/* … */
                              if (((__pyx_t_17 < __pyx_t_19) != 0)) {
                                __pyx_t_20 = __pyx_t_17;
                              } else {
                                __pyx_t_20 = __pyx_t_19;
                              }
 07219: 
 07220: 
 07221: 
 07222: 
 07223: 
 07224: #
 07225: # def interpolant(t):
 07226: #     return t*t*t*(t*(t*6 - 15) + 10)
 07227: #
 07228: #
 07229: # def generate_perlin_noise_2d(
 07230: #         shape, res, tileable=(False, False), interpolant=interpolant
 07231: # ):
 07232: #     """Generate a 2D numpy array of perlin noise.
 07233: #
 07234: #     Args:
 07235: #         shape: The shape of the generated array (tuple of two ints).
 07236: #             This must be a multple of res.
 07237: #         res: The number of periods of noise to generate along each
 07238: #             axis (tuple of two ints). Note shape must be a multiple of
 07239: #             res.
 07240: #         tileable: If the noise should be tileable along each axis
 07241: #             (tuple of two bools). Defaults to (False, False).
 07242: #         interpolant: The interpolation function, defaults to
 07243: #             t*t*t*(t*(t*6 - 15) + 10).
 07244: #
 07245: #     Returns:
 07246: #         A numpy array of shape shape with the generated noise.
 07247: #
 07248: #     Raises:
 07249: #         ValueError: If shape is not a multiple of res.
 07250: #     """
 07251: #     delta = (res[0] / shape[0], res[1] / shape[1])
 07252: #     d = (shape[0] // res[0], shape[1] // res[1])
 07253: #     grid = numpy.mgrid[0:res[0]:delta[0], 0:res[1]:delta[1]]\
 07254: #              .transpose(1, 2, 0) % 1
 07255: #     # Gradients
 07256: #     angles = 2*numpy.pi*numpy.random.rand(res[0]+1, res[1]+1)
 07257: #     gradients = numpy.dstack((numpy.cos(angles), numpy.sin(angles)))
 07258: #     if tileable[0]:
 07259: #         gradients[-1,:] = gradients[0,:]
 07260: #     if tileable[1]:
 07261: #         gradients[:,-1] = gradients[:,0]
 07262: #     gradients = gradients.repeat(d[0], 0).repeat(d[1], 1)
 07263: #     g00 = gradients[    :-d[0],    :-d[1]]
 07264: #     g10 = gradients[d[0]:     ,    :-d[1]]
 07265: #     g01 = gradients[    :-d[0],d[1]:     ]
 07266: #     g11 = gradients[d[0]:     ,d[1]:     ]
 07267: #     # Ramps
 07268: #     n00 = numpy.sum(numpy.dstack((grid[:,:,0]  , grid[:,:,1]  )) * g00, 2)
 07269: #     n10 = numpy.sum(numpy.dstack((grid[:,:,0]-1, grid[:,:,1]  )) * g10, 2)
 07270: #     n01 = numpy.sum(numpy.dstack((grid[:,:,0]  , grid[:,:,1]-1)) * g01, 2)
 07271: #     n11 = numpy.sum(numpy.dstack((grid[:,:,0]-1, grid[:,:,1]-1)) * g11, 2)
 07272: #     # Interpolation
 07273: #     t = interpolant(grid)
 07274: #     n0 = n00*(1-t[:,:,0]) + t[:,:,0]*n10
 07275: #     n1 = n01*(1-t[:,:,0]) + t[:,:,0]*n11
 07276: #     return numpy.sqrt(2)*((1-t[:,:,1])*n0 + t[:,:,1]*n1)
 07277: #
 07278: #
 07279: #
 07280: # @cython.boundscheck(False)
 07281: # @cython.wraparound(False)
 07282: # @cython.nonecheck(False)
 07283: # @cython.cdivision(True)
 07284: # cdef inline cloud_effect_inplace_c(int frame):
 07285: #
 07286: #     cdef int w, h, i, j
 07287: #
 07288: #     # cdef float [:, :] noise_array = generate_perlin_noise_2d(
 07289: #     (800, 800), (16, 16), tileable=(True, True))
 07290: #
 07291: #     cdef float [:, :] noise_array = numpy.empty((200, 200), float32)
 07292: #
 07293: #     for j in range(0, 200):
 07294: #         for i in range(0, 200):
 07295: #             noise_array[i, j] = noise.pnoise2((i+ 50 * cos(frame * M_PI/180.0))/ 8.0,
 07296: #                           j / 8.0,
 07297: #                           octaves=8,
 07298: #                           persistence=0.25,
 07299: #                           lacunarity=2,
 07300: #                           repeatx=1024,
 07301: #                           repeaty=1024,
 07302: #                           base=0)
 07303: #
 07304: #
 07305: #     cdef:
 07306: #         unsigned char [:, :, :] dest_array = numpy.empty((800, 800, 3), numpy.uint8)
 07307: #         int ii, jj
 07308: #         int v
 07309: #
 07310: #     with nogil:
 07311: #         for i in prange(0, 800, schedule='static', num_threads=THREADS):
 07312: #             for j in range(0, 800):
 07313: #                 ii = <int>(200.0/800.0 * i)
 07314: #                 jj = <int>(200.0/800.0 * j)
 07315: #                 dest_array[i, j, 0] =<unsigned char>(noise_array[ii, jj] * 255)
 07316: #                 dest_array[i, j, 1] =<unsigned char>(noise_array[ii, jj] * 255)
 07317: #                 dest_array[i, j, 2] =<unsigned char>(noise_array[ii, jj] * 255)
 07318: #
 07319: #
 07320: #     return pygame.surfarray.make_surface(asarray(dest_array))
 07321: #
 07322: 
 07323: 
 07324: @cython.binding(False)
 07325: @cython.binding(False)
 07326: @cython.boundscheck(False)
 07327: @cython.wraparound(False)
 07328: @cython.nonecheck(False)
 07329: @cython.cdivision(True)
 07330: @cython.profile(False)
+07331: cpdef inline unsigned int rgb_to_int(int red, int green, int blue)nogil:
static PyObject *__pyx_pw_12PygameShader_6shader_173rgb_to_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE unsigned int __pyx_f_12PygameShader_6shader_rgb_to_int(int __pyx_v_red, int __pyx_v_green, int __pyx_v_blue, CYTHON_UNUSED int __pyx_skip_dispatch) {
  unsigned int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_173rgb_to_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_172rgb_to_int[] = "\n    CONVERT RGB MODEL INTO A PYTHON INTEGER EQUIVALENT TO THE FUNCTION PYGAME MAP_RGB()\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    :param red   : Red color value,  must be in range [0..255]\n    :param green : Green color value, must be in range [0..255]\n    :param blue  : Blue color, must be in range [0.255]\n    :return      : returns a positive python integer representing the RGB values(int32)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_173rgb_to_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_red;
  int __pyx_v_green;
  int __pyx_v_blue;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_int (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_red,&__pyx_n_s_green,&__pyx_n_s_blue,0};
    PyObject* values[3] = {0,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  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_red)) != 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_green)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rgb_to_int", 1, 3, 3, 1); __PYX_ERR(1, 7331, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rgb_to_int", 1, 3, 3, 2); __PYX_ERR(1, 7331, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rgb_to_int") < 0)) __PYX_ERR(1, 7331, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_red = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_red == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7331, __pyx_L3_error)
    __pyx_v_green = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_green == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7331, __pyx_L3_error)
    __pyx_v_blue = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_blue == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7331, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rgb_to_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 7331, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.rgb_to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_172rgb_to_int(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
  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_6shader_172rgb_to_int(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_red, int __pyx_v_green, int __pyx_v_blue) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rgb_to_int", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_f_12PygameShader_6shader_rgb_to_int(__pyx_v_red, __pyx_v_green, __pyx_v_blue, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7331, __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.shader.rgb_to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07332:     """
 07333:     CONVERT RGB MODEL INTO A PYTHON INTEGER EQUIVALENT TO THE FUNCTION PYGAME MAP_RGB()
 07334: 
 07335:     Cython cpdef function, this function can be called directly and do not require a
 07336:     hook function.
 07337: 
 07338:     :param red   : Red color value,  must be in range [0..255]
 07339:     :param green : Green color value, must be in range [0..255]
 07340:     :param blue  : Blue color, must be in range [0.255]
 07341:     :return      : returns a positive python integer representing the RGB values(int32)
 07342:     """
+07343:     return <unsigned int>65536 * red + <unsigned int>256 * green + blue
  __pyx_r = (((((unsigned int)0x10000) * __pyx_v_red) + (((unsigned int)0x100) * __pyx_v_green)) + __pyx_v_blue);
  goto __pyx_L0;
 07344: 
 07345: @cython.binding(False)
 07346: @cython.binding(False)
 07347: @cython.boundscheck(False)
 07348: @cython.wraparound(False)
 07349: @cython.nonecheck(False)
 07350: @cython.cdivision(True)
 07351: @cython.profile(False)
+07352: cpdef inline rgb int_to_rgb(unsigned int n)nogil:
static PyObject *__pyx_pw_12PygameShader_6shader_175int_to_rgb(PyObject *__pyx_self, PyObject *__pyx_arg_n); /*proto*/
static CYTHON_INLINE struct rgb __pyx_f_12PygameShader_6shader_int_to_rgb(unsigned int __pyx_v_n, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct rgb __pyx_v_rgb_;
  struct rgb __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_175int_to_rgb(PyObject *__pyx_self, PyObject *__pyx_arg_n); /*proto*/
static char __pyx_doc_12PygameShader_6shader_174int_to_rgb[] = "\n    CONVERT A PYTHON INTEGER INTO A RGB COLOUR MODEL (UNSIGNED CHAR VALUES [0..255]).\n    EQUIVALENT TO PYGAME UNMAP_RGB()\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    :param n : positive integer value to convert\n    :return  : return a C structure rgb containing RGB values\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_175int_to_rgb(PyObject *__pyx_self, PyObject *__pyx_arg_n) {
  unsigned int __pyx_v_n;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("int_to_rgb (wrapper)", 0);
  assert(__pyx_arg_n); {
    __pyx_v_n = __Pyx_PyInt_As_unsigned_int(__pyx_arg_n); if (unlikely((__pyx_v_n == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7352, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.int_to_rgb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_174int_to_rgb(__pyx_self, ((unsigned int)__pyx_v_n));
  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_6shader_174int_to_rgb(CYTHON_UNUSED PyObject *__pyx_self, unsigned int __pyx_v_n) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("int_to_rgb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_convert__to_py_struct__rgb(__pyx_f_12PygameShader_6shader_int_to_rgb(__pyx_v_n, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7352, __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.shader.int_to_rgb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07353:     """
 07354:     CONVERT A PYTHON INTEGER INTO A RGB COLOUR MODEL (UNSIGNED CHAR VALUES [0..255]).
 07355:     EQUIVALENT TO PYGAME UNMAP_RGB()
 07356: 
 07357:     Cython cpdef function, this function can be called directly and do not require a
 07358:     hook function.
 07359: 
 07360:     :param n : positive integer value to convert
 07361:     :return  : return a C structure rgb containing RGB values
 07362:     """
 07363:     cdef:
 07364:         rgb rgb_
 07365: 
+07366:     rgb_.r = <float>((n >> <unsigned short int>16) & <unsigned char>255)
  __pyx_v_rgb_.r = ((float)((__pyx_v_n >> ((unsigned short)16)) & ((unsigned char)0xFF)));
+07367:     rgb_.g = <float>((n >> <unsigned short int>8) & <unsigned char>255)
  __pyx_v_rgb_.g = ((float)((__pyx_v_n >> ((unsigned short)8)) & ((unsigned char)0xFF)));
+07368:     rgb_.b = <float>(n & <unsigned char>255)
  __pyx_v_rgb_.b = ((float)(__pyx_v_n & ((unsigned char)0xFF)));
+07369:     return rgb_
  __pyx_r = __pyx_v_rgb_;
  goto __pyx_L0;
 07370: 
 07371: 
 07372: @cython.binding(False)
 07373: @cython.binding(False)
 07374: @cython.boundscheck(False)
 07375: @cython.wraparound(False)
 07376: @cython.nonecheck(False)
 07377: @cython.cdivision(True)
 07378: @cython.profile(False)
+07379: cdef inline make_palette_c(int width, float fh, float fs, float fl):
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_make_palette_c(int __pyx_v_width, float __pyx_v_fh, float __pyx_v_fs, float __pyx_v_fl) {
  __Pyx_memviewslice __pyx_v_palette = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  float __pyx_v_h;
  float __pyx_v_s;
  float __pyx_v_l;
  struct rgb __pyx_v_rgb_;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_palette_c", 0);
/* … */
  /* 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_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("PygameShader.shader.make_palette_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_palette, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07380:     """
 07381:     CREATE A PALETTE (ARRAY) FROM HSL VALUES (HUE, SATURATION, LIGHTNESS)
 07382: 
 07383:     e.g:
 07384:         # below: palette of 256 colors & surface (width=256, height=50).
 07385:         # hue * 6, saturation = 255.0, lightness * 2.0
 07386:         palette, surf = make_palette(256, 50, 6, 255, 2)
 07387:         palette, surf = make_palette(256, 50, 4, 255, 2)
 07388: 
 07389:     :param width  : integer, Palette width
 07390:     :param fh     : float, hue factor
 07391:     :param fs     : float, saturation factor
 07392:     :param fl     : float, lightness factor
 07393:     :return       : Return a tuple ndarray type uint32 and pygame.Surface (width, height)
 07394:     """
+07395:     assert width > 0, "Argument width should be > 0, got %s " % width
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_width > 0) != 0))) {
      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Argument_width_should_be_0_got_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 7395, __pyx_L1_error)
    }
  }
  #endif
 07396: 
 07397:     cdef:
+07398:         unsigned int [::1] palette = numpy.empty(width, uint32)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_uint32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7398, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7398, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 7398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_1 = 0;
    __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_int(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 7398, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_palette = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 07399:         int x, y
 07400:         float h, s, l
 07401:         rgb rgb_
 07402: 
+07403:     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:;
      }
  }
+07404:         for x in prange(width, schedule='static', num_threads=THREADS):
        __pyx_t_6 = __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_10 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_h) lastprivate(__pyx_v_l) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) schedule(static)
/* … */
        __pyx_t_6 = __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_10 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_h) lastprivate(__pyx_v_l) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_10; __pyx_t_9++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_9);
                            /* Initialize private variables to invalid values */
                            __pyx_v_h = ((float)__PYX_NAN());
                            __pyx_v_l = ((float)__PYX_NAN());
                            __pyx_v_s = ((float)__PYX_NAN());
+07405:             h, s, l = <float>x * fh,  min(fs, <float>255.0), min(<float>x * fl, <float>255.0)
                            __pyx_t_11 = (((float)__pyx_v_x) * __pyx_v_fh);
                            __pyx_t_12 = ((float)255.0);
                            __pyx_t_13 = __pyx_v_fs;
                            if (((__pyx_t_12 < __pyx_t_13) != 0)) {
                              __pyx_t_14 = __pyx_t_12;
                            } else {
                              __pyx_t_14 = __pyx_t_13;
                            }
                            __pyx_t_12 = __pyx_t_14;
                            __pyx_t_14 = ((float)255.0);
                            __pyx_t_13 = (((float)__pyx_v_x) * __pyx_v_fl);
                            if (((__pyx_t_14 < __pyx_t_13) != 0)) {
                              __pyx_t_15 = __pyx_t_14;
                            } else {
                              __pyx_t_15 = __pyx_t_13;
                            }
                            __pyx_t_14 = __pyx_t_15;
                            __pyx_v_h = __pyx_t_11;
                            __pyx_v_s = __pyx_t_12;
                            __pyx_v_l = __pyx_t_14;
+07406:             rgb_ = struct_hsl_to_rgb(h * <float>ONE_360, s * <float>ONE_255, l * <float>ONE_255)
                            __pyx_v_rgb_ = struct_hsl_to_rgb((__pyx_v_h * ((float)0.002777777777777778)), (__pyx_v_s * ((float)0.00392156862745098)), (__pyx_v_l * ((float)0.00392156862745098)));
 07407:             # build the palette (1d buffer int values)
+07408:             palette[x] = rgb_to_int(<int>(rgb_.r * <float>255.0),
                            __pyx_t_16 = __pyx_v_x;
                            *((unsigned int *) ( /* dim=0 */ ((char *) (((unsigned int *) __pyx_v_palette.data) + __pyx_t_16)) )) = __pyx_f_12PygameShader_6shader_rgb_to_int(((int)(__pyx_v_rgb_.r * ((float)255.0))), ((int)(__pyx_v_rgb_.g * ((float)255.0))), ((int)((__pyx_v_rgb_.b * ((float)255.0)) * ((float)0.5))), 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
      }
 07409:                                     <int>(rgb_.g * <float>255.0),
 07410:                                     <int>(rgb_.b * <float>255.0 * <float>0.5))
 07411: 
+07412:     return asarray(palette)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_palette, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 7412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __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_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 07413: 
 07414: @cython.binding(False)
 07415: @cython.binding(False)
 07416: @cython.boundscheck(False)
 07417: @cython.wraparound(False)
 07418: @cython.nonecheck(False)
 07419: @cython.cdivision(True)
 07420: @cython.profile(False)
+07421: cdef fire_surface24_c(
static PyObject *__pyx_f_12PygameShader_6shader_fire_surface24_c(int __pyx_v_width, int __pyx_v_height, float __pyx_v_factor, __Pyx_memviewslice __pyx_v_palette, __Pyx_memviewslice __pyx_v_fire, struct __pyx_opt_args_12PygameShader_6shader_fire_surface24_c *__pyx_optional_args) {
  int __pyx_v_intensity = ((int)0);
  int __pyx_v_low = ((int)0);
  int __pyx_v_high = ((int)0);
  __Pyx_memviewslice __pyx_v_out = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  float __pyx_v_d;
  unsigned int __pyx_v_ii;
  unsigned int __pyx_v_c1;
  unsigned int __pyx_v_c2;
  CYTHON_UNUSED int __pyx_v_min_;
  CYTHON_UNUSED int __pyx_v_max_;
  int __pyx_v_middle;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fire_surface24_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_intensity = __pyx_optional_args->intensity;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_low = __pyx_optional_args->low;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_high = __pyx_optional_args->high;
        }
      }
    }
  }
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("PygameShader.shader.fire_surface24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_out, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+07422:         int width,
struct __pyx_opt_args_12PygameShader_6shader_fire_surface24_c {
  int __pyx_n;
  int intensity;
  int low;
  int high;
};
 07423:         int height,
 07424:         float factor,
 07425:         unsigned int [::1] palette,
 07426:         float [:, ::1] fire,
 07427:         int intensity = 0,
 07428:         int low       = 0,
 07429:         int high      = 0,
 07430: ):
 07431:     """
 07432: 
 07433:     CREATE A FIRE EFFECT
 07434: 
 07435:     * Do not call this function directly
 07436: 
 07437:     :param width    : integer; max width of the effect
 07438:     :param height   : integer; max height of the effect
 07439:     :param factor   : float; factor to reduce the flame effect
 07440:     :param palette  : ndarray; Color palette 1d numpy array (colors buffer unsigned int values)
 07441:     :param fire     : ndarray; 2d array (x, y) (contiguous) containing float values
 07442:     :param intensity: integer; Control the flame intensity default 0 (low intensity), range [0...32]
 07443:     :param low      : integer; The x lowest position of the effect, x must be >=0 and < high
 07444:     :param high     : integer; The x highest position of the effect, x must be > low and <= high
 07445:     :return         : Return a numpy array containing the fire effect array shape
 07446:      (w, h, 3) of RGB pixels
 07447:     """
 07448: 
 07449:     cdef:
 07450:         # flame opacity palette
+07451:         unsigned char [:, :, ::1] out = zeros((width, height, 3), dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7451, __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(1, 7451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_4, 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(1, 7451, __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(1, 7451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 7451, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(1, 7451, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_out = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+07452:         int x = 0, y = 0
  __pyx_v_x = 0;
  __pyx_v_y = 0;
 07453:         float d
+07454:         unsigned int ii=0
  __pyx_v_ii = 0;
+07455:         unsigned c1 = 0, c2 = 0
  __pyx_v_c1 = 0;
  __pyx_v_c2 = 0;
 07456: 
 07457:     cdef int min_, max_, middle
 07458: 
 07459: 
+07460:     if low != 0 or high != 0:
  __pyx_t_7 = ((__pyx_v_low != 0) != 0);
  if (!__pyx_t_7) {
  } else {
    __pyx_t_6 = __pyx_t_7;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_7 = ((__pyx_v_high != 0) != 0);
  __pyx_t_6 = __pyx_t_7;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+07461:         assert 0 <= low < high, "Argument low_ must be < high_"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_6 = (0 <= __pyx_v_low);
      if (__pyx_t_6) {
        __pyx_t_6 = (__pyx_v_low < __pyx_v_high);
      }
      if (unlikely(!(__pyx_t_6 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_low__must_be_high);
        __PYX_ERR(1, 7461, __pyx_L1_error)
      }
    }
    #endif
+07462:         assert high <= width, "Argument high must be <= width"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_high <= __pyx_v_width) != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_high_must_be_width);
        __PYX_ERR(1, 7462, __pyx_L1_error)
      }
    }
    #endif
 07463: 
+07464:         middle = low + ((high - low) >> 1)
    __pyx_v_middle = (__pyx_v_low + ((__pyx_v_high - __pyx_v_low) >> 1));
+07465:         min_ = randRange(low, middle)
    __pyx_v_min_ = randRange(__pyx_v_low, __pyx_v_middle);
+07466:         max_ = randRange(middle + <unsigned short int>1, high)
    __pyx_v_max_ = randRange((__pyx_v_middle + ((unsigned short)1)), __pyx_v_high);
 07467:     else:
+07468:         middle = width >> 1
  /*else*/ {
    __pyx_v_middle = (__pyx_v_width >> 1);
+07469:         min_ = randRange(0, middle)
    __pyx_v_min_ = randRange(0, __pyx_v_middle);
+07470:         max_ = randRange(middle + <unsigned short int>1, width)
    __pyx_v_max_ = randRange((__pyx_v_middle + ((unsigned short)1)), __pyx_v_width);
  }
  __pyx_L3:;
 07471: 
 07472: 
+07473:     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_L8;
        }
        __pyx_L8:;
      }
  }
 07474:         # POPULATE TO THE BASE OF THE FIRE (THIS WILL CONFIGURE THE FLAME ASPECT)
+07475:         for x in prange(min_, max_, schedule='static', num_threads=THREADS):
        __pyx_t_8 = __pyx_v_min_;
        __pyx_t_9 = __pyx_v_max_;
        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_11 = (__pyx_t_9 - __pyx_t_8 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) schedule(static)        __pyx_t_9 = __pyx_v_max_;
        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_11 = (__pyx_t_9 - __pyx_t_8 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
                        {
                            __pyx_v_x = (int)(__pyx_t_8 + 1 * __pyx_t_10);
+07476:                 fire[height-1, x] = <float>randRange(intensity, <int>260)
                            __pyx_t_12 = (__pyx_v_height - 1);
                            __pyx_t_13 = __pyx_v_x;
                            *((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_12 * __pyx_v_fire.strides[0]) )) + __pyx_t_13)) )) = ((float)randRange(__pyx_v_intensity, ((int)0x104)));
                        }
                    }
                }
            }
        }
        #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
 07477: 
 07478: 
 07479:         # DILUTE THE FLAME EFFECT (DECREASE THE MAXIMUM INT VALUE) WHEN THE FLAME TRAVEL UPWARD
+07480:         for y in prange(1, height-1, schedule='static', num_threads=THREADS):
        __pyx_t_14 = (__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_16 = (__pyx_t_14 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_d) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_14 = (__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_16 = (__pyx_t_14 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_d) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_16; __pyx_t_15++){
                        {
                            __pyx_v_y = (int)(1 + 1 * __pyx_t_15);
                            /* Initialize private variables to invalid values */
                            __pyx_v_c1 = ((unsigned int)0xbad0bad0);
                            __pyx_v_c2 = ((unsigned int)0xbad0bad0);
                            __pyx_v_d = ((float)__PYX_NAN());
                            __pyx_v_ii = ((unsigned int)0xbad0bad0);
                            __pyx_v_x = ((int)0xbad0bad0);
 07481: 
+07482:             for x in range(0, width):
                            __pyx_t_11 = __pyx_v_width;
                            __pyx_t_10 = __pyx_t_11;
                            for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_10; __pyx_t_9+=1) {
                              __pyx_v_x = __pyx_t_9;
 07483: 
+07484:                     c1 = (y + <unsigned short int>1) % height
                              __pyx_v_c1 = ((__pyx_v_y + ((unsigned short)1)) % __pyx_v_height);
+07485:                     c2 = x % width
                              __pyx_v_c2 = (__pyx_v_x % __pyx_v_width);
+07486:                     d = (fire[c1, (x - <unsigned short int>1 + width) % width]
                              __pyx_t_17 = __pyx_v_c1;
                              __pyx_t_13 = (((__pyx_v_x - ((unsigned short)1)) + __pyx_v_width) % __pyx_v_width);
+07487:                        + fire[c1, c2]
                              __pyx_t_18 = __pyx_v_c1;
                              __pyx_t_19 = __pyx_v_c2;
+07488:                        + fire[c1, (x + <unsigned short int>1) % width]
                              __pyx_t_20 = __pyx_v_c1;
                              __pyx_t_12 = ((__pyx_v_x + ((unsigned short)1)) % __pyx_v_width);
+07489:                        + fire[(y + <unsigned short int>2) % height, c2]) * factor
                              __pyx_t_21 = ((__pyx_v_y + ((unsigned short)2)) % __pyx_v_height);
                              __pyx_t_22 = __pyx_v_c2;
                              __pyx_v_d = (((((*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_17 * __pyx_v_fire.strides[0]) )) + __pyx_t_13)) ))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_18 * __pyx_v_fire.strides[0]) )) + __pyx_t_19)) )))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_20 * __pyx_v_fire.strides[0]) )) + __pyx_t_12)) )))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_21 * __pyx_v_fire.strides[0]) )) + __pyx_t_22)) )))) * __pyx_v_factor);
 07490: 
+07491:                     d = d - <float>(<float>rand() * <float>0.0001)
                              __pyx_v_d = (__pyx_v_d - ((float)(((float)rand()) * ((float)0.0001))));
 07492: 
 07493:                     # Cap the values
+07494:                     if d < <unsigned short int>0:
                              __pyx_t_6 = ((__pyx_v_d < ((unsigned short)0)) != 0);
                              if (__pyx_t_6) {
/* … */
                              }
+07495:                         d = <float>0.0
                                __pyx_v_d = ((float)0.0);
 07496: 
 07497:                     # CAP THE VALUE TO 255
+07498:                     if d > <unsigned char>255:
                              __pyx_t_6 = ((__pyx_v_d > ((unsigned char)0xFF)) != 0);
                              if (__pyx_t_6) {
/* … */
                              }
+07499:                         d = <float>255.0
                                __pyx_v_d = ((float)255.0);
+07500:                     fire[y, x] = d
                              __pyx_t_21 = __pyx_v_y;
                              __pyx_t_12 = __pyx_v_x;
                              *((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_21 * __pyx_v_fire.strides[0]) )) + __pyx_t_12)) )) = __pyx_v_d;
 07501: 
+07502:                     ii = palette[<unsigned int>d % width]
                              __pyx_t_22 = (((unsigned int)__pyx_v_d) % __pyx_v_width);
                              __pyx_v_ii = (*((unsigned int *) ( /* dim=0 */ ((char *) (((unsigned int *) __pyx_v_palette.data) + __pyx_t_22)) )));
 07503: 
+07504:                     out[x, y, 0] = (ii >> <unsigned short int>16) & <unsigned char>255
                              __pyx_t_12 = __pyx_v_x;
                              __pyx_t_21 = __pyx_v_y;
                              __pyx_t_13 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_12 * __pyx_v_out.strides[0]) ) + __pyx_t_21 * __pyx_v_out.strides[1]) )) + __pyx_t_13)) )) = ((__pyx_v_ii >> ((unsigned short)16)) & ((unsigned char)0xFF));
+07505:                     out[x, y, 1] = (ii >> <unsigned short int>8) & <unsigned char>255
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_21 = __pyx_v_y;
                              __pyx_t_12 = 1;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_13 * __pyx_v_out.strides[0]) ) + __pyx_t_21 * __pyx_v_out.strides[1]) )) + __pyx_t_12)) )) = ((__pyx_v_ii >> ((unsigned short)8)) & ((unsigned char)0xFF));
+07506:                     out[x, y, 2] = ii & <unsigned char>255
                              __pyx_t_12 = __pyx_v_x;
                              __pyx_t_21 = __pyx_v_y;
                              __pyx_t_13 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_12 * __pyx_v_out.strides[0]) ) + __pyx_t_21 * __pyx_v_out.strides[1]) )) + __pyx_t_13)) )) = (__pyx_v_ii & ((unsigned char)0xFF));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 07507: 
+07508:     return asarray(out)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_out, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 07509: 
 07510: 
 07511: 
 07512: @cython.binding(False)
 07513: @cython.boundscheck(False)
 07514: @cython.wraparound(False)
 07515: @cython.nonecheck(False)
 07516: @cython.cdivision(False)
 07517: @cython.profile(False)
+07518: cdef fire_surface24_c_border(
static PyObject *__pyx_f_12PygameShader_6shader_fire_surface24_c_border(int __pyx_v_width, int __pyx_v_height, float __pyx_v_factor, __Pyx_memviewslice __pyx_v_palette, __Pyx_memviewslice __pyx_v_fire, struct __pyx_opt_args_12PygameShader_6shader_fire_surface24_c_border *__pyx_optional_args) {
  int __pyx_v_intensity = ((int)0);
  int __pyx_v_low = ((int)0);
  int __pyx_v_high = ((int)0);
  __Pyx_memviewslice __pyx_v_out = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  float __pyx_v_d;
  unsigned int __pyx_v_ii;
  unsigned int __pyx_v_c1;
  unsigned int __pyx_v_c2;
  CYTHON_UNUSED int __pyx_v_min_;
  CYTHON_UNUSED int __pyx_v_max_;
  int __pyx_v_middle;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fire_surface24_c_border", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_intensity = __pyx_optional_args->intensity;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_low = __pyx_optional_args->low;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_high = __pyx_optional_args->high;
        }
      }
    }
  }
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("PygameShader.shader.fire_surface24_c_border", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_out, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+07519:         int width,
struct __pyx_opt_args_12PygameShader_6shader_fire_surface24_c_border {
  int __pyx_n;
  int intensity;
  int low;
  int high;
};
 07520:         int height,
 07521: 
 07522:         float factor,
 07523:         unsigned int [::1] palette,
 07524:         float [:, ::1] fire,
 07525:         int intensity = 0,
 07526:         int low       = 0,
 07527:         int high      = 0,
 07528: ):
 07529:     """
 07530: 
 07531:     CREATE A FIRE EFFECT (BORDER EFFECT)
 07532: 
 07533:     * Do not call this function directly
 07534: 
 07535:     :param width    : integer; max width of the effect
 07536:     :param height   : integer; max height of the effect
 07537:     :param factor   : float; factor to reduce the flame effect
 07538:     :param palette  : ndarray; Color palette 1d numpy array (colors buffer unsigned int values)
 07539:     :param fire     : ndarray; 2d array (x, y) (contiguous) containing float values
 07540:     :param intensity: integer; Control the flame intensity default 0 (low intensity), range [0...32]
 07541:     :param low      : integer; The x lowest position of the effect, x must be >=0 and < high
 07542:     :param high     : integer; The x highest position of the effect, x must be > low and <= high
 07543:     :return         : Return a numpy array containing the fire effect array
 07544:     shape (w, h, 3) of RGB pixels
 07545:     """
 07546: 
 07547:     cdef:
 07548:         # flame opacity palette
+07549:         unsigned char [:, :, ::1] out = zeros((width, height, 3), dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7549, __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(1, 7549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_4, 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(1, 7549, __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(1, 7549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 7549, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(1, 7549, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_out = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+07550:         int x = 0, y = 0
  __pyx_v_x = 0;
  __pyx_v_y = 0;
 07551:         float d
+07552:         unsigned int ii=0
  __pyx_v_ii = 0;
+07553:         unsigned c1 = 0, c2 = 0
  __pyx_v_c1 = 0;
  __pyx_v_c2 = 0;
 07554: 
 07555:     cdef int min_, max_, middle
 07556: 
 07557: 
+07558:     if low != 0 or high != 0:
  __pyx_t_7 = ((__pyx_v_low != 0) != 0);
  if (!__pyx_t_7) {
  } else {
    __pyx_t_6 = __pyx_t_7;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_7 = ((__pyx_v_high != 0) != 0);
  __pyx_t_6 = __pyx_t_7;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+07559:         assert 0 <= low < high, "Argument low_ must be < high_"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_6 = (0 <= __pyx_v_low);
      if (__pyx_t_6) {
        __pyx_t_6 = (__pyx_v_low < __pyx_v_high);
      }
      if (unlikely(!(__pyx_t_6 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_low__must_be_high);
        __PYX_ERR(1, 7559, __pyx_L1_error)
      }
    }
    #endif
+07560:         assert high <= width, "Argument high must be <= width"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_high <= __pyx_v_width) != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_high_must_be_width);
        __PYX_ERR(1, 7560, __pyx_L1_error)
      }
    }
    #endif
 07561: 
+07562:         middle = low + ((high - low) >> 1)
    __pyx_v_middle = (__pyx_v_low + ((__pyx_v_high - __pyx_v_low) >> 1));
+07563:         min_ = randRange(low, middle)
    __pyx_v_min_ = randRange(__pyx_v_low, __pyx_v_middle);
+07564:         max_ = randRange(middle + 1, high)
    __pyx_v_max_ = randRange((__pyx_v_middle + 1), __pyx_v_high);
 07565:     else:
+07566:         middle = width >> 1
  /*else*/ {
    __pyx_v_middle = (__pyx_v_width >> 1);
+07567:         min_ = randRange(0, middle)
    __pyx_v_min_ = randRange(0, __pyx_v_middle);
+07568:         max_ = randRange(middle +1, width)
    __pyx_v_max_ = randRange((__pyx_v_middle + 1), __pyx_v_width);
  }
  __pyx_L3:;
 07569: 
 07570: 
+07571:     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_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }
 07572:         # POPULATE TO THE BASE OF THE FIRE (THIS WILL CONFIGURE THE FLAME ASPECT)
 07573:         # for x in prange(min_, max_, schedule='static', num_threads=THREADS
 07574:         #         fire[height - 1, x] = randRange(intensity, 260)
 07575: 
 07576:         # FIRE ARRAY IS [HEIGHT, WIDTH]
+07577:         for x in prange(min_, max_, schedule='static', num_threads=THREADS):
        __pyx_t_8 = __pyx_v_min_;
        __pyx_t_9 = __pyx_v_max_;
        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_11 = (__pyx_t_9 - __pyx_t_8 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) schedule(static)        __pyx_t_9 = __pyx_v_max_;
        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_11 = (__pyx_t_9 - __pyx_t_8 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
                        {
                            __pyx_v_x = (int)(__pyx_t_8 + 1 * __pyx_t_10);
+07578:                 fire[x % height, (height - 1) % width] = <float>randRange(intensity, <int>260)
                            if (unlikely(__pyx_v_height == 0)) {
                              #ifdef WITH_THREAD
                              PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                              #endif
                              PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                              #ifdef WITH_THREAD
                              __Pyx_PyGILState_Release(__pyx_gilstate_save);
                              #endif
                              __PYX_ERR(1, 7578, __pyx_L11_error)
                            }
                            __pyx_t_12 = (__pyx_v_height - 1);
                            if (unlikely(__pyx_v_width == 0)) {
                              #ifdef WITH_THREAD
                              PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                              #endif
                              PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                              #ifdef WITH_THREAD
                              __Pyx_PyGILState_Release(__pyx_gilstate_save);
                              #endif
                              __PYX_ERR(1, 7578, __pyx_L11_error)
                            }
                            __pyx_t_13 = __Pyx_mod_int(__pyx_v_x, __pyx_v_height);
                            __pyx_t_14 = __Pyx_mod_long(__pyx_t_12, __pyx_v_width);
                            *((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_13 * __pyx_v_fire.strides[0]) )) + __pyx_t_14)) )) = ((float)randRange(__pyx_v_intensity, ((int)0x104)));
                            goto __pyx_L14;
                            __pyx_L11_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L13;
                            __pyx_L13:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates7)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_x;
                            }
                            __pyx_L14:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_x = __pyx_parallel_temp0;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L7_error;
              }
            }
        }
        #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
 07579: 
 07580: 
 07581:         # DILUTE THE FLAME EFFECT (DECREASE THE MAXIMUM INT VALUE) WHEN THE FLAME TRAVEL UPWARD
+07582:         for y in prange(1, height - 1, schedule='static', num_threads=THREADS):
        __pyx_t_12 = (__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_16 = (__pyx_t_12 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_d) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_12 = (__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_16 = (__pyx_t_12 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_d) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_16; __pyx_t_15++){
                        {
                            __pyx_v_y = (int)(1 + 1 * __pyx_t_15);
                            /* Initialize private variables to invalid values */
                            __pyx_v_c1 = ((unsigned int)0xbad0bad0);
                            __pyx_v_c2 = ((unsigned int)0xbad0bad0);
                            __pyx_v_d = ((float)__PYX_NAN());
                            __pyx_v_ii = ((unsigned int)0xbad0bad0);
                            __pyx_v_x = ((int)0xbad0bad0);
 07583: 
+07584:             for x in range(0, width):
                            __pyx_t_11 = __pyx_v_width;
                            __pyx_t_10 = __pyx_t_11;
                            for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_10; __pyx_t_9+=1) {
                              __pyx_v_x = __pyx_t_9;
 07585: 
+07586:                     c1 = (y + 1) % height
                              __pyx_t_17 = (__pyx_v_y + 1);
                              if (unlikely(__pyx_v_height == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 7586, __pyx_L17_error)
                              }
                              __pyx_v_c1 = __Pyx_mod_long(__pyx_t_17, __pyx_v_height);
+07587:                     c2 = x % width
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 7587, __pyx_L17_error)
                              }
                              __pyx_v_c2 = __Pyx_mod_int(__pyx_v_x, __pyx_v_width);
+07588:                     d = (fire[c1, (x - 1 + width) % width]
                              __pyx_t_17 = ((__pyx_v_x - 1) + __pyx_v_width);
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 7588, __pyx_L17_error)
                              }
                              __pyx_t_18 = __pyx_v_c1;
                              __pyx_t_14 = __Pyx_mod_long(__pyx_t_17, __pyx_v_width);
+07589:                        + fire[c1, c2]
                              __pyx_t_19 = __pyx_v_c1;
                              __pyx_t_20 = __pyx_v_c2;
+07590:                        + fire[c1, (x + 1) % width]
                              __pyx_t_21 = (__pyx_v_x + 1);
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 7590, __pyx_L17_error)
                              }
                              __pyx_t_22 = __pyx_v_c1;
                              __pyx_t_13 = __Pyx_mod_long(__pyx_t_21, __pyx_v_width);
+07591:                        + fire[(y + 2) % height, c2]) * factor
                              __pyx_t_23 = (__pyx_v_y + 2);
                              if (unlikely(__pyx_v_height == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 7591, __pyx_L17_error)
                              }
                              __pyx_t_24 = __Pyx_mod_long(__pyx_t_23, __pyx_v_height);
                              __pyx_t_25 = __pyx_v_c2;
                              __pyx_v_d = (((((*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_18 * __pyx_v_fire.strides[0]) )) + __pyx_t_14)) ))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_19 * __pyx_v_fire.strides[0]) )) + __pyx_t_20)) )))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_22 * __pyx_v_fire.strides[0]) )) + __pyx_t_13)) )))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_24 * __pyx_v_fire.strides[0]) )) + __pyx_t_25)) )))) * __pyx_v_factor);
 07592: 
+07593:                     d = d - <float>(rand() * <float>0.0001)
                              __pyx_v_d = (__pyx_v_d - ((float)(rand() * ((float)0.0001))));
 07594: 
 07595:                     # Cap the values
+07596:                     if d <0:
                              __pyx_t_6 = ((__pyx_v_d < 0.0) != 0);
                              if (__pyx_t_6) {
/* … */
                              }
+07597:                         d = 0.0
                                __pyx_v_d = 0.0;
 07598: 
+07599:                     if d>255.0:
                              __pyx_t_6 = ((__pyx_v_d > 255.0) != 0);
                              if (__pyx_t_6) {
/* … */
                              }
+07600:                         d = <float>255.0
                                __pyx_v_d = ((float)255.0);
 07601: 
+07602:                     fire[x % height , y % width] = d
                              if (unlikely(__pyx_v_height == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 7602, __pyx_L17_error)
                              }
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 7602, __pyx_L17_error)
                              }
                              __pyx_t_24 = __Pyx_mod_int(__pyx_v_x, __pyx_v_height);
                              __pyx_t_13 = __Pyx_mod_int(__pyx_v_y, __pyx_v_width);
                              *((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_fire.data + __pyx_t_24 * __pyx_v_fire.strides[0]) )) + __pyx_t_13)) )) = __pyx_v_d;
 07603: 
+07604:                     ii = palette[<unsigned int>d % width]
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 7604, __pyx_L17_error)
                              }
                              __pyx_t_25 = (((unsigned int)__pyx_v_d) % __pyx_v_width);
                              __pyx_v_ii = (*((unsigned int *) ( /* dim=0 */ ((char *) (((unsigned int *) __pyx_v_palette.data) + __pyx_t_25)) )));
 07605: 
+07606:                     out[x, y, 0] = (ii >> 16) & 255
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_24 = __pyx_v_y;
                              __pyx_t_14 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_13 * __pyx_v_out.strides[0]) ) + __pyx_t_24 * __pyx_v_out.strides[1]) )) + __pyx_t_14)) )) = ((__pyx_v_ii >> 16) & 0xFF);
+07607:                     out[x, y, 1] = (ii >> 8) & 255
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_24 = __pyx_v_y;
                              __pyx_t_13 = 1;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_14 * __pyx_v_out.strides[0]) ) + __pyx_t_24 * __pyx_v_out.strides[1]) )) + __pyx_t_13)) )) = ((__pyx_v_ii >> 8) & 0xFF);
+07608:                     out[x, y, 2] = ii & 255
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_24 = __pyx_v_y;
                              __pyx_t_14 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_13 * __pyx_v_out.strides[0]) ) + __pyx_t_24 * __pyx_v_out.strides[1]) )) + __pyx_t_14)) )) = (__pyx_v_ii & 0xFF);
                            }
                            goto __pyx_L24;
                            __pyx_L17_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L23;
                            __pyx_L23:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates8)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_c1;
                                __pyx_parallel_temp1 = __pyx_v_c2;
                                __pyx_parallel_temp2 = __pyx_v_d;
                                __pyx_parallel_temp3 = __pyx_v_ii;
                                __pyx_parallel_temp4 = __pyx_v_x;
                                __pyx_parallel_temp5 = __pyx_v_y;
                            }
                            __pyx_L24:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_c1 = __pyx_parallel_temp0;
              __pyx_v_c2 = __pyx_parallel_temp1;
              __pyx_v_d = __pyx_parallel_temp2;
              __pyx_v_ii = __pyx_parallel_temp3;
              __pyx_v_x = __pyx_parallel_temp4;
              __pyx_v_y = __pyx_parallel_temp5;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L7_error;
              }
            }
        }
        #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
      }
 07609: 
+07610:     return asarray(out)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_out, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 07611: 
 07612: 
 07613: # CUSTOM FIRE PALETTE
 07614: # arr = numpy.array([0, 1,       # violet
 07615: #                    0, 1,       # blue
 07616: #                    0, 1,       # green
 07617: #                    2, 619,     # yellow
 07618: #                    620, 650,   # orange
 07619: #                    651, 660],  # red
 07620: #                   numpy.int)
 07621: #
 07622: # HEATMAP = [custom_map(i - 20, arr, 1.0) for i in range(380, 800)]
 07623: # heatmap_array = numpy.zeros((800 - 380, 3), uint8)
 07624: # heatmap_rescale = numpy.zeros(255, numpy.uint)
 07625: # i = 0
 07626: # for t in HEATMAP:
 07627: #     heatmap_array[i, 0] = t[0]
 07628: #     heatmap_array[i, 1] = t[1]
 07629: #     heatmap_array[i, 2] = t[2]
 07630: #     i += 1
 07631: # for r in range(0, 255):
 07632: #     s = int(r * (800.0-380.0)/255)
 07633: #     heatmap_rescale[r] = rgb_to_int(heatmap_array[s][0], heatmap_array[s][1], heatmap_array[s][2])
 07634: # heatmap_rescale = numpy.ascontiguousarray(heatmap_rescale[::-1])
 07635: # -------- main loop ----
 07636: # if frame % 2 == 0:
 07637: # surface_ = fire_effect(
 07638: #     width, height, 3.95 + random.uniform(0.002, 0.008),
 07639: #     heatmap_rescale,
 07640: #     FIRE_ARRAY,
 07641: #     reduce_factor_=3,  fire_intensity_=8,
 07642: #     smooth_=True, bloom_=True, fast_bloom_=True,
 07643: #     bpf_threshold_=70, low_=0, high_=800, brightness_=True, brightness_intensity_=0.1,
 07644: #     adjust_palette_=False, hsv_=(10,  80, 1.8), transpose_=False, border_=False, surface_=None)
 07645: 
 07646: @cython.binding(False)
 07647: @cython.binding(False)
 07648: @cython.boundscheck(False)
 07649: @cython.wraparound(False)
 07650: @cython.nonecheck(False)
 07651: @cython.cdivision(True)
 07652: @cython.profile(False)
+07653: cdef inline shader_fire_effect_c(
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_shader_fire_effect_c(int __pyx_v_width_, int __pyx_v_height_, float __pyx_v_factor_, __Pyx_memviewslice __pyx_v_palette_, __Pyx_memviewslice __pyx_v_fire_, struct __pyx_opt_args_12PygameShader_6shader_shader_fire_effect_c *__pyx_optional_args) {
  unsigned short __pyx_v_reduce_factor_ = ((unsigned short)3);
  unsigned short __pyx_v_fire_intensity_ = ((unsigned short)32);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
  __Pyx_AddTraceback("PygameShader.shader.shader_fire_effect_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_fire_surface_smallest);
  __Pyx_XDECREF(__pyx_v_rgb_array_);
  __Pyx_XDECREF(__pyx_v_fire_effect);
  __PYX_XDEC_MEMVIEW(&__pyx_v_palette_, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+07654:         int width_,
struct __pyx_opt_args_12PygameShader_6shader_shader_fire_effect_c {
  int __pyx_n;
  unsigned short reduce_factor_;
  unsigned short fire_intensity_;
  int smooth_;
  int bloom_;
  int fast_bloom_;
  unsigned char bpf_threshold_;
  unsigned int low_;
  unsigned int high_;
  int brightness_;
  float brightness_intensity_;
  PyObject *surface_;
  int adjust_palette_;
  PyObject *hsl_;
  int transpose_;
  int border_;
  int blur_;
};
 07655:         int height_,
 07656:         float factor_,
 07657:         unsigned int [::1] palette_,
 07658:         float [:, ::1] fire_,
 07659:         unsigned short int reduce_factor_ = 3,
 07660:         unsigned short int fire_intensity_= 32,
+07661:         bint smooth_                      = True,
  int __pyx_v_smooth_ = ((int)1);
+07662:         bint bloom_                       = True,
  int __pyx_v_bloom_ = ((int)1);
  unsigned char __pyx_v_bpf_threshold_ = ((unsigned char)0);
  unsigned int __pyx_v_low_ = ((unsigned int)0);
  unsigned int __pyx_v_high_ = ((unsigned int)0x258);
 07663:         bint fast_bloom_                  = False,
 07664:         unsigned char bpf_threshold_      = 0,
 07665:         unsigned int low_                 = 0,
 07666:         unsigned int high_                = 600,
+07667:         bint brightness_                  = True,
  int __pyx_v_brightness_ = ((int)1);
  float __pyx_v_brightness_intensity_ = ((float)0.15);
 07668:         float brightness_intensity_       = 0.15,
+07669:         object surface_                   = None,
  PyObject *__pyx_v_surface_ = ((PyObject *)Py_None);
+07670:         bint adjust_palette_              = False,
  int __pyx_v_adjust_palette_ = ((int)0);
+07671:         tuple hsl_                        = (10, 80, 1.8),
  PyObject *__pyx_v_hsl_ = ((PyObject*)__pyx_tuple__33);
/* … */
  __pyx_tuple__33 = PyTuple_Pack(3, __pyx_int_10, __pyx_int_80, __pyx_float_1_8); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(1, 7671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
+07672:         bint transpose_                   = False,
  int __pyx_v_transpose_ = ((int)0);
+07673:         bint border_                      = False,
  int __pyx_v_border_ = ((int)0);
+07674:         bint blur_                        = True
  int __pyx_v_blur_ = ((int)1);
  int __pyx_v_w4;
  int __pyx_v_h4;
  int __pyx_v_f_height;
  int __pyx_v_f_width;
  PyObject *__pyx_v_fire_surface_smallest = NULL;
  PyObject *__pyx_v_rgb_array_ = NULL;
  PyObject *__pyx_v_fire_effect = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_fire_effect_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_reduce_factor_ = __pyx_optional_args->reduce_factor_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_fire_intensity_ = __pyx_optional_args->fire_intensity_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_smooth_ = __pyx_optional_args->smooth_;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_bloom_ = __pyx_optional_args->bloom_;
            if (__pyx_optional_args->__pyx_n > 5) {
              __pyx_v_bpf_threshold_ = __pyx_optional_args->bpf_threshold_;
              if (__pyx_optional_args->__pyx_n > 6) {
                __pyx_v_low_ = __pyx_optional_args->low_;
                if (__pyx_optional_args->__pyx_n > 7) {
                  __pyx_v_high_ = __pyx_optional_args->high_;
                  if (__pyx_optional_args->__pyx_n > 8) {
                    __pyx_v_brightness_ = __pyx_optional_args->brightness_;
                    if (__pyx_optional_args->__pyx_n > 9) {
                      __pyx_v_brightness_intensity_ = __pyx_optional_args->brightness_intensity_;
                      if (__pyx_optional_args->__pyx_n > 10) {
                        __pyx_v_surface_ = __pyx_optional_args->surface_;
                        if (__pyx_optional_args->__pyx_n > 11) {
                          __pyx_v_adjust_palette_ = __pyx_optional_args->adjust_palette_;
                          if (__pyx_optional_args->__pyx_n > 12) {
                            __pyx_v_hsl_ = __pyx_optional_args->hsl_;
                            if (__pyx_optional_args->__pyx_n > 13) {
                              __pyx_v_transpose_ = __pyx_optional_args->transpose_;
                              if (__pyx_optional_args->__pyx_n > 14) {
                                __pyx_v_border_ = __pyx_optional_args->border_;
                                if (__pyx_optional_args->__pyx_n > 15) {
                                  __pyx_v_blur_ = __pyx_optional_args->blur_;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  __PYX_INC_MEMVIEW(&__pyx_v_palette_, 1);
 07675:         ):
 07676:     """
 07677: 
 07678:     FIRE SHADER EFFECT
 07679: 
 07680:     * FIRE TEXTURE SIZES
 07681: 
 07682:     input width_  : integer,
 07683:     input height_ : integer
 07684: 
 07685:     width_ and height_ values define the size of the texture e.g Surface(width x height)
 07686: 
 07687:     * FIRE ASPECT (CONTROL OVER THE WIDTH):
 07688: 
 07689:     inputs low_ : integer
 07690:     input high_ : integer
 07691: 
 07692:     Optional arguments low_ & high_ (integer values) define the width 's limits of the fire effect.
 07693:     low_ for the starting point and high_ for the ending of the effect.
 07694:     e.g low_ = 10 and high_ = 200. The fire effect will be contain within width = 10 and 200
 07695:     low_ & high_ values must be in range [0 ... width_]
 07696: 
 07697:     * FIRE HEIGHT:
 07698: 
 07699:     input factor_ : float
 07700: 
 07701:     The fire maximum height can be adjust with the variable factor_ (float value)
 07702:     value > 3.95 will contain the effect within the display
 07703:     value < 3.95 will enlarge the effect over the display height
 07704:     Recommended value is 3.95 with reduce_factor_ = 3 otherwise adjust the value manually
 07705:     to contain the fire effect within the display
 07706: 
 07707:     * SPEED CONSIDERATION
 07708: 
 07709:     input reduce_factor_ : integer
 07710: 
 07711:     The argument reduce_factor_ control the size of the texture to be processed
 07712:     e.g : a value of 2, divide by 4 the pygame surface define by the values (width_ & height_)
 07713:     Smaller texture improve the overall performances but will slightly degrade the fire aspect,
 07714:     especially if the blur and smooth option are not enabled.
 07715:     Recommended value for reduce_factor_ is 3 (fast process)
 07716:     reduce_factor_ values must be an integer in range [ 0 ... 4]
 07717:     The reduce_factor_ value will have a significant impact on the fire effect maximum height,
 07718:     adjust the argument factor_ accordingly
 07719: 
 07720:     * FIRE INTENSITY AT THE SOURCE
 07721: 
 07722:     input fire_intensity_: integer
 07723: 
 07724:     Set the fire intensity with the variable fire_intensity_, 0 low flame,
 07725:     32 maximum flame effect
 07726:     Values must be an int in range [0 ... 32]
 07727: 
 07728:     * SMOOTHING THE EFFECT
 07729: 
 07730:     input smooth_: True | False
 07731: 
 07732:     When smooth_ is True the algorithm will use the pygame function smoothscale (bi-linear
 07733:     filtering) or False the final texture will be adjust with the scale function.
 07734:     Set this variable to False if you need the best performance for the effect or if you require
 07735:     a pixelated fire effect. Otherwise set the variable to True for a more realistic effect.
 07736: 
 07737: 
 07738:     * BLOOM EFFECT
 07739: 
 07740:     input bloom_         : True | False
 07741:     input fast_bloom_    : True | False
 07742:     input bpf_threshold_ : integer
 07743: 
 07744:     Fire effect produce a bright and smooth light effect to the background texture where the fire
 07745:     intensity is at its maximum.
 07746:     Use the flag fast_bloom_ for a compromise between a realistic effect and the best performances
 07747:     The flag fast_bloom_ define a very fast bloom algo using only the smallest texture
 07748:     to create a bloom effect (all the intermediate textures will be bypassed). See the bloom effect
 07749:     project for more details.
 07750:     When fast_bloom is False, all the sub-surfaces will be blit to the final effect and will
 07751:     produce a more realistic fire effect (this will slightly degrade the overall performances).
 07752:     If the fire effect is too bright, you can always adjust the bright pass filter value
 07753:     bpf_threshold_(this will adjust the bloom intensity)
 07754:     bpf_threshold_ value must be in range [ 0 ... 255]
 07755:     Below 128 the bloom effect will be more noticeable and above 128 only the brightest
 07756:     area will be enhanced.
 07757: 
 07758:     * LIGHT EFFECT INTENSITY
 07759: 
 07760:     input brightness_            : True | False
 07761:     input brightness_intensity_  : float
 07762: 
 07763:     When the flag is set to True, the algorithm will use an external function,
 07764:     <shader_brightness24_exclude_inplace_c> to increase the brightness of the effect / texture
 07765:     A custom color can be passed to the function defining the pixels to be ignored during the
 07766:     process (default is black color).
 07767:     the value must be in range [-1.0 ... 1.0]. Values below zero will decrease the brightness
 07768:     of the flame effect and positive values will increase the brightness of the effect (causing
 07769:     bright white patches on the fire texture).
 07770:     Values below -0.4 will cause the fire effect to be translucent and this effect can also be
 07771:     used for simulating ascending heat convection effects on a background texture.
 07772: 
 07773: 
 07774:     * OPTIONAL SURFACE
 07775: 
 07776:     input surface_ : pygame.Surface
 07777: 
 07778:     This is an optional surface that can be passed to the shader to improve the performances
 07779:     and to avoid a new surface to be generated every iterations. The surface size must match
 07780:     exactly the reduce texture dimensions otherwise an exception will be raise.
 07781:     see reduce_factor_ option to determine the fire texture size that will be processed.
 07782: 
 07783:     * COLOR PALETTE ADJUSTMENT
 07784: 
 07785:     input adjust_palette_ : True | False
 07786:     input hsl_            : (10, 80, 1.8)
 07787: 
 07788:     Set this flag to True to modify the color palette of the fire texture.
 07789:     This allow the HSL color model to be apply to the palette values
 07790:     You can redefine the palette when the flag is True and by customizing a tuple of 3 float
 07791:     values, default is (10, 80, 1.8).
 07792:     The first value control the palette hue value, the second is for the saturation and last,
 07793:     the palette color lightness.
 07794:     With the variable hsl_ you can rotate the palette colors and define a new flame
 07795:     aspect/color/intensity
 07796: 
 07797:     * FLAME ORIENTATION / DIRECTION & BORDER FLAME EFFECT
 07798: 
 07799:     input transpose_ = True | False,
 07800:     input border_    = True | False,
 07801: 
 07802:     transpose_ = True, this will transpose the final array
 07803:     for e.g :
 07804:     If the final fire texture is (w, h) after setting the transpose flag, the final
 07805:     fire texture will become (h, w). As a result the fire effect will be transversal (starting
 07806:     from the right of the display to the left side).
 07807:     You can always transpose / flip the texture to get the right flame orientation
 07808:     BORDER FLAME EFFECT
 07809:     border_ = True to create a flame effect burning the edge of the display
 07810: 
 07811:     * FINAL TOUCH
 07812: 
 07813:     input blur_ : True | False
 07814: 
 07815:     This will will blur the fire effect for a more realistic appearance, remove all the jagged
 07816:     edge when and pixelated effect
 07817: 
 07818: 
 07819:     :param width_           : integer; Size (width) of the surface or display in pixels
 07820:     :param height_          : integer; size (height) of the surface or display in pixels
 07821:     :param factor_          : float; Value controlling the fire height value
 07822:                               must be in range [3.95 ... 4.2].
 07823:                               The value 3.95 gives the highest flame effect
 07824:     :param palette_         : numpy.ndarray, buffer containing mapped RGB colors (uint values)
 07825:     :param fire_            : numpy.ndarray shape (w, h) containing float values (fire intensity).
 07826:                               For better performance it is advised to set the array to the size
 07827:                               of the texture after applying the reduction_factor_.
 07828:                               For example if the reduction_factor_ is 2, the texture would have
 07829:                               width >> 1 and height >> 1 and the fire_array should be set to
 07830:                               numpy.empty((height >> 1, width >> 1), float32)
 07831:     :param reduce_factor_   : unsigned short int ; Can be either 0, 1, 2, 3, 4.
 07832:                               2 and 3 provide the best performance and the best looking effect.
 07833:     :param fire_intensity_  : Integer; Control the original amount of energy at the
 07834:                               bottom of the fire, must be in range of [0 ... 32].
 07835:                               32 being the maximum value and the maximum fire intensity
 07836:     :param smooth_          : boolean; True smoothscale (bi-linear filtering) or
 07837:                               scale algorithm jagged edges (mush faster)
 07838:     :param bloom_           : boolean; True or False, True apply a bloom effect to the fire effect
 07839:     :param fast_bloom_      : boolean; Fastest bloom. This reduce the amount of calculation
 07840:     :param bpf_threshold_   : integer; control the bright pass filter threshold
 07841:                               value, must be in range [0 ... 255].
 07842:                               Maximum brightness amplification with threshold = 0,
 07843:                               when bpf_threshold_ = 255, no change.
 07844:     :param low_             : integer; Starting position x for the fire effect
 07845:     :param high_            : integer; Ending position x for the fire effect
 07846:     :param brightness_      : boolean; True apply a bright filter shader to the array.
 07847:                               Increase overall brightness of the effect
 07848:     :param brightness_intensity_: float; must be in range [-1.0 ... 1.0] control
 07849:                               the brightness intensity
 07850:                               of the effect
 07851:     :param surface_         : pygame.Surface. Pass a surface to the shader for
 07852:                               better performance, otherwise algo is creating a new surface each
 07853:                               calls.
 07854:     :param adjust_palette_  : boolean; True adjust the palette setting HSL
 07855:                               (hue, saturation, luminescence).
 07856:                               Be aware that if adjust_palette is True, the optional palette
 07857:                               passed to the Shader will be disregarded
 07858:     :param hsl_             : tuple; float values of hue, saturation and luminescence.
 07859:                               Hue in range [0.0 ... 100],  saturation [0...100],
 07860:                               luminescence [0.0 ... 2.0]
 07861:     :param transpose_       : boolean; Transpose the array (w, h) become (h, w).
 07862:                               The fire effect will start from the left and move to the right
 07863:     :param border_          : boolean; Flame effect affect the border of the texture
 07864:     :param blur_            : boolean; Blur the fire effect
 07865:     :return                 : Return a pygame surface that can be blit directly to the game display
 07866: 
 07867:     """
 07868: 
 07869: 
 07870:     cdef int w4, h4
 07871: 
 07872:     # TEXTURE DIVIDE BY POWER OF 2
+07873:     if reduce_factor_ in (0, 1, 2):
  switch (__pyx_v_reduce_factor_) {
    case 0:
    case 1:
    case 2:
/* … */
    break;
    case 3:
+07874:         w4, h4 = width_ >> reduce_factor_, height_ >> reduce_factor_
    __pyx_t_1 = (__pyx_v_width_ >> __pyx_v_reduce_factor_);
    __pyx_t_2 = (__pyx_v_height_ >> __pyx_v_reduce_factor_);
    __pyx_v_w4 = __pyx_t_1;
    __pyx_v_h4 = __pyx_t_2;
 07875: 
 07876:     # TEXTURE 150 x 150 * ratio
+07877:     elif reduce_factor_ == 3:
    break;
    case 4:
 07878:         # CUSTOM SIZE WIDTH 150 AND RATIO * HIGH
+07879:         w4 = 150
    __pyx_v_w4 = 0x96;
+07880:         h4 = <int>(150 * height_/width_)
    __pyx_v_h4 = ((int)((0x96 * __pyx_v_height_) / __pyx_v_width_));
+07881:         low_ = <int>(low_ * low_/width_)
    __pyx_v_low_ = ((int)((__pyx_v_low_ * __pyx_v_low_) / __pyx_v_width_));
+07882:         high_ = <int>(high_ * 150/width_)
    __pyx_v_high_ = ((int)((__pyx_v_high_ * 0x96) / __pyx_v_width_));
+07883:         reduce_factor_ = 0
    __pyx_v_reduce_factor_ = 0;
 07884: 
 07885:     # TEXTURE 100 x 100 * ratio
+07886:     elif reduce_factor_ == 4:
    break;
    default: break;
  }
+07887:         w4 = 100
    __pyx_v_w4 = 0x64;
+07888:         h4 = <int> (100 * height_ / width_)
    __pyx_v_h4 = ((int)((0x64 * __pyx_v_height_) / __pyx_v_width_));
+07889:         low_ = <int> (low_ * low_ / width_)
    __pyx_v_low_ = ((int)((__pyx_v_low_ * __pyx_v_low_) / __pyx_v_width_));
+07890:         high_ = <int> (high_ * 100 / width_)
    __pyx_v_high_ = ((int)((__pyx_v_high_ * 0x64) / __pyx_v_width_));
+07891:         reduce_factor_ = 0
    __pyx_v_reduce_factor_ = 0;
 07892: 
 07893:     cdef int f_height, f_width
+07894:     f_height, f_width = (<object>fire_).shape[:2]
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_fire_, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_4, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    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(1, 7894, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(1, 7894, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 7894, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7894, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7894, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_f_height = __pyx_t_2;
  __pyx_v_f_width = __pyx_t_1;
 07895: 
+07896:     assert f_width >= w4 or f_height >= h4,\
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_9 = ((__pyx_v_f_width >= __pyx_v_w4) != 0);
    if (!__pyx_t_9) {
    } else {
      __pyx_t_8 = __pyx_t_9;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_9 = ((__pyx_v_f_height >= __pyx_v_h4) != 0);
    __pyx_t_8 = __pyx_t_9;
    __pyx_L5_bool_binop_done:;
    if (unlikely(!__pyx_t_8)) {
 07897:         "Fire array size mismatch the texture size.\n" \
+07898:         "Set fire_ array to numpy.empty((%s, %s), dtype=numpy.float32)" % (h4, w4)
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7898, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7898, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7898, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
      __pyx_t_3 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Fire_array_size_mismatch_the_tex, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7898, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(1, 7896, __pyx_L1_error)
    }
  }
  #endif
 07899: 
+07900:     if surface_ is None:
  __pyx_t_8 = (__pyx_v_surface_ == Py_None);
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L7;
  }
+07901:         fire_surface_smallest = pygame.Surface((w4, h4)).convert()
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Surface); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7901, __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_w4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_10);
    __pyx_t_3 = 0;
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_10, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_convert); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_fire_surface_smallest = __pyx_t_5;
    __pyx_t_5 = 0;
 07902: 
 07903:     else:
+07904:         if PyObject_IsInstance(surface_, pygame.Surface):
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pygame); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Surface); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_6); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 7904, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = (__pyx_t_9 != 0);
    if (likely(__pyx_t_8)) {
/* … */
      goto __pyx_L8;
    }
+07905:             assert surface_.get_width() == w4 and surface_.get_height() == h4, \
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_width); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
          }
        }
        __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (__pyx_t_9) {
        } else {
          __pyx_t_8 = __pyx_t_9;
          goto __pyx_L9_bool_binop_done;
        }
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_height); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(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_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(1, 7905, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_8 = __pyx_t_9;
        __pyx_L9_bool_binop_done:;
        if (unlikely(!__pyx_t_8)) {
 07906:             "Surface argument has incorrect dimension surface must be (w:%s, h:%s) got (%s, %s)\n" \
 07907:             "Set argument surface_ to None to avoid this error message"\
+07908:             % (w4, h4, surface_.get_width(), surface_.get_height())
          __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7908, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7908, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_width); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7908, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_10 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_10)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_10);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
            }
          }
          __pyx_t_4 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7908, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_height); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7908, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_3 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
            if (likely(__pyx_t_3)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_10, function);
            }
          }
          __pyx_t_11 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7908, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7908, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_11);
          __pyx_t_6 = 0;
          __pyx_t_5 = 0;
          __pyx_t_4 = 0;
          __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_PyString_Format(__pyx_kp_s_Surface_argument_has_incorrect_d, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7908, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __PYX_ERR(1, 7905, __pyx_L1_error)
        }
      }
      #endif
+07909:             fire_surface_smallest = surface_
      __Pyx_INCREF(__pyx_v_surface_);
      __pyx_v_fire_surface_smallest = __pyx_v_surface_;
 07910:         else:
+07911:             raise ValueError("Argument surface_ must be a Surface type got %s " % type(surface_))
    /*else*/ {
      __pyx_t_11 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_Surf, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7911, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7911, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 7911, __pyx_L1_error)
    }
    __pyx_L8:;
  }
  __pyx_L7:;
 07912: 
+07913:     if adjust_palette_:
  __pyx_t_8 = (__pyx_v_adjust_palette_ != 0);
  if (__pyx_t_8) {
/* … */
  }
+07914:         palette_= make_palette_c(w4, hsl_[0], hsl_[1], hsl_[2])
    if (unlikely(__pyx_v_hsl_ == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7914, __pyx_L1_error)
    }
    __pyx_t_12 = __pyx_PyFloat_AsFloat(PyTuple_GET_ITEM(__pyx_v_hsl_, 0)); if (unlikely((__pyx_t_12 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 7914, __pyx_L1_error)
    if (unlikely(__pyx_v_hsl_ == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7914, __pyx_L1_error)
    }
    __pyx_t_13 = __pyx_PyFloat_AsFloat(PyTuple_GET_ITEM(__pyx_v_hsl_, 1)); if (unlikely((__pyx_t_13 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 7914, __pyx_L1_error)
    if (unlikely(__pyx_v_hsl_ == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 7914, __pyx_L1_error)
    }
    __pyx_t_14 = __pyx_PyFloat_AsFloat(PyTuple_GET_ITEM(__pyx_v_hsl_, 2)); if (unlikely((__pyx_t_14 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 7914, __pyx_L1_error)
    __pyx_t_10 = __pyx_f_12PygameShader_6shader_make_palette_c(__pyx_v_w4, __pyx_t_12, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7914, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_int(__pyx_t_10, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 7914, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_palette_, 1);
    __pyx_v_palette_ = __pyx_t_15;
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
 07915: 
+07916:     if border_:
  __pyx_t_8 = (__pyx_v_border_ != 0);
  if (__pyx_t_8) {
/* … */
    goto __pyx_L12;
  }
 07917:         # CREATE THE FIRE EFFECT ONTO A PYGAME SURFACE
+07918:         rgb_array_ = fire_surface24_c_border(
    __pyx_t_16.__pyx_n = 3;
    __pyx_t_16.intensity = __pyx_v_fire_intensity_;
    __pyx_t_16.low = (__pyx_v_low_ >> __pyx_v_reduce_factor_);
    __pyx_t_16.high = (__pyx_v_high_ >> __pyx_v_reduce_factor_);
    __pyx_t_10 = __pyx_f_12PygameShader_6shader_fire_surface24_c_border(__pyx_v_w4, __pyx_v_h4, (((float)1.0) / __pyx_v_factor_), __pyx_v_palette_, __pyx_v_fire_, &__pyx_t_16); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7918, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_v_rgb_array_ = __pyx_t_10;
    __pyx_t_10 = 0;
 07919:             w4, h4, <float>1.0 / factor_, palette_, fire_, fire_intensity_,
 07920:             low_ >> reduce_factor_, high_ >> reduce_factor_)
 07921:     else:
+07922:         rgb_array_ = fire_surface24_c(
  /*else*/ {
/* … */
    __pyx_t_17.__pyx_n = 3;
    __pyx_t_17.intensity = __pyx_v_fire_intensity_;
    __pyx_t_17.low = (__pyx_v_low_ >> __pyx_v_reduce_factor_);
    __pyx_t_17.high = (__pyx_v_high_ >> __pyx_v_reduce_factor_);
    __pyx_t_10 = __pyx_f_12PygameShader_6shader_fire_surface24_c(__pyx_v_w4, __pyx_v_h4, (((float)1.0) / __pyx_v_factor_), __pyx_v_palette_, __pyx_v_fire_, &__pyx_t_17); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_v_rgb_array_ = __pyx_t_10;
    __pyx_t_10 = 0;
  }
  __pyx_L12:;
 07923:             w4, h4, <float>1.0 / factor_, palette_, fire_, fire_intensity_,
 07924:                     low_ >> reduce_factor_, high_ >> reduce_factor_)
 07925: 
 07926:     # BRIGHTNESS SHADER
+07927:     if brightness_:
  __pyx_t_8 = (__pyx_v_brightness_ != 0);
  if (__pyx_t_8) {
/* … */
  }
 07928:         # EXCLUDE BLACK COLORS (DEFAULT)
+07929:         assert -1.0 <= brightness_intensity_ <= 1.0, \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_8 = (-1.0 <= __pyx_v_brightness_intensity_);
      if (__pyx_t_8) {
        __pyx_t_8 = (__pyx_v_brightness_intensity_ <= 1.0);
      }
      if (unlikely(!(__pyx_t_8 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_brightness_intensity_mu);
        __PYX_ERR(1, 7929, __pyx_L1_error)
      }
    }
    #endif
 07930:             "Argument brightness intensity must be in range [-1.0 ... 1.0]"
+07931:         shader_brightness24_exclude_inplace_c(rgb_array_=rgb_array_,
    __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(1, 7931, __pyx_L1_error)
/* … */
    __pyx_t_19.__pyx_n = 2;
    __pyx_t_19.shift_ = __pyx_v_brightness_intensity_;
    __pyx_t_19.color_ = __pyx_tuple__9;
    __pyx_f_12PygameShader_6shader_shader_brightness24_exclude_inplace_c(__pyx_t_18, &__pyx_t_19); 
    __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
    __pyx_t_18.memview = NULL;
    __pyx_t_18.data = NULL;
 07932:                                               shift_=brightness_intensity_, color_=(0, 0, 0))
 07933: 
+07934:     if blur_:
  __pyx_t_8 = (__pyx_v_blur_ != 0);
  if (__pyx_t_8) {
/* … */
  }
+07935:         shader_blur5x5_array24_inplace_c(rgb_array_)
    __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(1, 7935, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_18, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
    __pyx_t_18.memview = NULL;
    __pyx_t_18.data = NULL;
 07936: 
+07937:     if transpose_:
  __pyx_t_8 = (__pyx_v_transpose_ != 0);
  if (__pyx_t_8) {
/* … */
  }
+07938:         rgb_array_ = rgb_array_.transpose(1, 0, 2)
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_rgb_array_, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7938, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7938, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF_SET(__pyx_v_rgb_array_, __pyx_t_11);
    __pyx_t_11 = 0;
+07939:         fire_surface_smallest = rotate(fire_surface_smallest, 90)
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_rotate); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7939, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_4 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
        __pyx_t_1 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_fire_surface_smallest, __pyx_int_90};
      __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7939, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_11);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_fire_surface_smallest, __pyx_int_90};
      __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7939, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_11);
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7939, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_fire_surface_smallest);
      __Pyx_GIVEREF(__pyx_v_fire_surface_smallest);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_1, __pyx_v_fire_surface_smallest);
      __Pyx_INCREF(__pyx_int_90);
      __Pyx_GIVEREF(__pyx_int_90);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_1, __pyx_int_90);
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_5, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7939, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF_SET(__pyx_v_fire_surface_smallest, __pyx_t_11);
    __pyx_t_11 = 0;
 07940: 
 07941: 
 07942:     # CONVERT THE ARRAY INTO A PYGAME SURFACE
+07943:     array_to_surface(fire_surface_smallest, rgb_array_)
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_array_to_surface); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_5 = NULL;
  __pyx_t_1 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_1 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fire_surface_smallest, __pyx_v_rgb_array_};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7943, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_11);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fire_surface_smallest, __pyx_v_rgb_array_};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7943, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_11);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7943, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_fire_surface_smallest);
    __Pyx_GIVEREF(__pyx_v_fire_surface_smallest);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_1, __pyx_v_fire_surface_smallest);
    __Pyx_INCREF(__pyx_v_rgb_array_);
    __Pyx_GIVEREF(__pyx_v_rgb_array_);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_1, __pyx_v_rgb_array_);
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_4, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7943, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 07944: 
 07945: 
 07946:     # BLOOM SHADER EFFECT
+07947:     if bloom_:
  __pyx_t_8 = (__pyx_v_bloom_ != 0);
  if (__pyx_t_8) {
/* … */
  }
+07948:         assert 0 <= bpf_threshold_ < 256, \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_8 = (0 <= __pyx_v_bpf_threshold_);
      if (__pyx_t_8) {
        __pyx_t_8 = (__pyx_v_bpf_threshold_ < 0x100);
      }
      if (unlikely(!(__pyx_t_8 != 0))) {
+07949:             "Argument bpf_threshold_ must be in range [0 ... 256] got %s " % bpf_threshold_
        __pyx_t_11 = __Pyx_PyInt_From_unsigned_char(__pyx_v_bpf_threshold_); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7949, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_10 = __Pyx_PyString_Format(__pyx_kp_s_Argument_bpf_threshold__must_be, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7949, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_10);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __PYX_ERR(1, 7948, __pyx_L1_error)
      }
    }
    #endif
 07950:         # shader_bloom_effect_array24_c(fire_surface_smallest, bpf_threshold_, fast_=fast_bloom_)
+07951:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      goto __pyx_L22_try_end;
      __pyx_L17_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
      __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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_20);
      __Pyx_XGIVEREF(__pyx_t_21);
      __Pyx_XGIVEREF(__pyx_t_22);
      __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      goto __pyx_L1_error;
      __pyx_L22_try_end:;
    }
 07952:             # fire_surface_smallest = shader_bloom_fast(
 07953:             #     fire_surface_smallest, bpf_threshold_, fast_=fast_bloom_, factor_=1)
 07954: 
+07955:             shader_bloom_fast1(
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_shader_bloom_fast1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7955, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_10);
/* … */
        __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7955, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_v_fire_surface_smallest);
        __Pyx_GIVEREF(__pyx_v_fire_surface_smallest);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_fire_surface_smallest);
/* … */
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7955, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 07956:                 fire_surface_smallest,
+07957:                 threshold_ = bpf_threshold_,
        __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7957, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = __Pyx_PyInt_From_unsigned_char(__pyx_v_bpf_threshold_); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7957, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_threshold, __pyx_t_5) < 0) __PYX_ERR(1, 7957, __pyx_L17_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_smooth, __pyx_int_0) < 0) __PYX_ERR(1, 7957, __pyx_L17_error)
 07958:                 smooth_    = 0,
+07959:                 saturation_= False
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_saturation, Py_False) < 0) __PYX_ERR(1, 7957, __pyx_L17_error)
 07960:             )
 07961: 
+07962:         except ValueError:
      __pyx_t_1 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_1) {
        __Pyx_AddTraceback("PygameShader.shader.shader_fire_effect_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_11) < 0) __PYX_ERR(1, 7962, __pyx_L19_except_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GOTREF(__pyx_t_11);
+07963:             raise ValueError(
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7963, __pyx_L19_except_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_Raise(__pyx_t_10, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __PYX_ERR(1, 7963, __pyx_L19_except_error)
      }
      goto __pyx_L19_except_error;
      __pyx_L19_except_error:;
/* … */
  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_The_surface_is_too_small_and_can); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(1, 7963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__34);
  __Pyx_GIVEREF(__pyx_tuple__34);
 07964:                 "The surface is too small and cannot be bloomed with shader_bloom_fast1.\n"
 07965:                 "Increase the size of the image")
 07966: 
 07967:     # RESCALE THE SURFACE TO THE FULL SIZE
+07968:     if smooth_:
  __pyx_t_8 = (__pyx_v_smooth_ != 0);
  if (__pyx_t_8) {
/* … */
    goto __pyx_L25;
  }
+07969:         fire_effect = smoothscale(fire_surface_smallest, (width_, height_))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_10);
    __pyx_t_5 = 0;
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_1 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_fire_surface_smallest, __pyx_t_6};
      __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7969, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_fire_surface_smallest, __pyx_t_6};
      __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7969, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_INCREF(__pyx_v_fire_surface_smallest);
      __Pyx_GIVEREF(__pyx_v_fire_surface_smallest);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_1, __pyx_v_fire_surface_smallest);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_1, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_fire_effect = __pyx_t_11;
    __pyx_t_11 = 0;
 07970:     else:
+07971:         fire_effect = scale(fire_surface_smallest, (width_, height_))
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 7971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6);
    __pyx_t_5 = 0;
    __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_1 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_fire_surface_smallest, __pyx_t_10};
      __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7971, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_fire_surface_smallest, __pyx_t_10};
      __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7971, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7971, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_v_fire_surface_smallest);
      __Pyx_GIVEREF(__pyx_v_fire_surface_smallest);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_1, __pyx_v_fire_surface_smallest);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_1, __pyx_t_10);
      __pyx_t_10 = 0;
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 7971, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_fire_effect = __pyx_t_11;
    __pyx_t_11 = 0;
  }
  __pyx_L25:;
 07972: 
+07973:     return fire_effect
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_fire_effect);
  __pyx_r = __pyx_v_fire_effect;
  goto __pyx_L0;
 07974: 
 07975: 
 07976: 
 07977: @cython.binding(False)
 07978: @cython.boundscheck(False)
 07979: @cython.wraparound(False)
 07980: @cython.nonecheck(False)
 07981: @cython.cdivision(False)
 07982: @cython.profile(False)
+07983: cdef cloud_surface24_c(
static PyObject *__pyx_f_12PygameShader_6shader_cloud_surface24_c(int __pyx_v_width, int __pyx_v_height, float __pyx_v_factor, __Pyx_memviewslice __pyx_v_palette, __Pyx_memviewslice __pyx_v_cloud_, struct __pyx_opt_args_12PygameShader_6shader_cloud_surface24_c *__pyx_optional_args) {
  int __pyx_v_intensity = ((int)0);
  int __pyx_v_low = ((int)0);
  int __pyx_v_high = ((int)0);
  int __pyx_v_new_height;
  __Pyx_memviewslice __pyx_v_out = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  float __pyx_v_d;
  unsigned int __pyx_v_ii;
  unsigned int __pyx_v_c1;
  unsigned int __pyx_v_c2;
  int __pyx_v_p_length;
  CYTHON_UNUSED int __pyx_v_min_;
  CYTHON_UNUSED int __pyx_v_max_;
  int __pyx_v_middle;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cloud_surface24_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_intensity = __pyx_optional_args->intensity;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_low = __pyx_optional_args->low;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_high = __pyx_optional_args->high;
        }
      }
    }
  }
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("PygameShader.shader.cloud_surface24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_out, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+07984:         int width,
struct __pyx_opt_args_12PygameShader_6shader_cloud_surface24_c {
  int __pyx_n;
  int intensity;
  int low;
  int high;
};
 07985:         int height,
 07986:         float factor,
 07987:         unsigned int [::1] palette,
 07988:         float [:, ::1] cloud_,
 07989:         int intensity = 0,
 07990:         int low       = 0,
 07991:         int high      = 0,
 07992:     ):
 07993: 
 07994:     """
 07995:     CLOUD PROCESSING FUNCTION
 07996: 
 07997:     * Do not call that function directly, this function is a sub function of cloud_effect
 07998: 
 07999:     :param width    : integer; Size (width) of the surface or display in pixels
 08000:     :param height   : integer; size (height) of the surface or display in pixels
 08001:     :param factor   : float; Value controlling the cloud size value must
 08002:                       be in range [3.95 ... 4.2].
 08003:                       value 3.95 will fill entirely the display with the cloud while value
 08004:                       above 3.95 will shrink the cloud effect
 08005:     :param palette  : numpy.ndarray, buffer containing mapped RGB colors (uint values)
 08006:     :param cloud_   : numpy.ndarray shape (w, h) containing float values (cloud intensity).
 08007:     :param intensity: integer; Determine the guaranteed amount of smoke the cloud
 08008:                       effect will generate at the base
 08009:                       of the effect (value must be in range [0 .. 260]). If you provide zero a
 08010:                       random value between 0 ... 260 will be
 08011:                       assigned. If you provide 250, a random value between 250 and 260 will be set.
 08012:     :param low      : integer; low determine the X starting position on the display,
 08013:                       if you provide a value of
 08014:                       100 pixels, the effect will start at the position 100 from the display
 08015:                       (first 100 pixels will bot be affected by the cloud/smoke effect)
 08016:     :param high     : integer; high determine the X ending position on the display,
 08017:                       if you provide a value of 800 pixels, the effect will end at the
 08018:                       position 800 from the display (last remaining pixels will not be affected
 08019:                       by the cloud/smoke effect)
 08020:     :return         : Return a numpy array shape (w, h, 3) containing the RGB pixels (smoke effect)
 08021:     """
 08022: 
 08023:     cdef:
+08024:         int new_height = height
  __pyx_v_new_height = __pyx_v_height;
+08025:         unsigned char [:, :, ::1] out = empty((width, new_height, 3), dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_new_height); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_4, 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(1, 8025, __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(1, 8025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 8025, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(1, 8025, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_out = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+08026:         int x = 0, y = 0
  __pyx_v_x = 0;
  __pyx_v_y = 0;
 08027:         float d
+08028:         unsigned int ii=0
  __pyx_v_ii = 0;
+08029:         unsigned c1 = 0, c2 = 0
  __pyx_v_c1 = 0;
  __pyx_v_c2 = 0;
+08030:         int p_length = (<object>palette).size
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_palette, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_p_length = __pyx_t_6;
 08031: 
 08032:     cdef int min_, max_, middle
 08033: 
+08034:     if low != 0 or high != 0:
  __pyx_t_8 = ((__pyx_v_low != 0) != 0);
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_8 = ((__pyx_v_high != 0) != 0);
  __pyx_t_7 = __pyx_t_8;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
    goto __pyx_L3;
  }
+08035:         assert 0 <= low < high, "Argument low_ must be < high_"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_7 = (0 <= __pyx_v_low);
      if (__pyx_t_7) {
        __pyx_t_7 = (__pyx_v_low < __pyx_v_high);
      }
      if (unlikely(!(__pyx_t_7 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_low__must_be_high);
        __PYX_ERR(1, 8035, __pyx_L1_error)
      }
    }
    #endif
+08036:         assert high <= width,   "Argument high must be <= width"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_high <= __pyx_v_width) != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_high_must_be_width);
        __PYX_ERR(1, 8036, __pyx_L1_error)
      }
    }
    #endif
 08037: 
+08038:         middle = low + ((high - low) >> 1)
    __pyx_v_middle = (__pyx_v_low + ((__pyx_v_high - __pyx_v_low) >> 1));
+08039:         min_ = randRange(low, middle)
    __pyx_v_min_ = randRange(__pyx_v_low, __pyx_v_middle);
+08040:         max_ = randRange(middle + 1, high)
    __pyx_v_max_ = randRange((__pyx_v_middle + 1), __pyx_v_high);
 08041:     else:
+08042:         middle = width >> 1
  /*else*/ {
    __pyx_v_middle = (__pyx_v_width >> 1);
+08043:         min_ = randRange(0, middle)
    __pyx_v_min_ = randRange(0, __pyx_v_middle);
+08044:         max_ = randRange(middle +1, width)
    __pyx_v_max_ = randRange((__pyx_v_middle + 1), __pyx_v_width);
  }
  __pyx_L3:;
 08045: 
 08046: 
+08047:     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_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }
 08048:         # POPULATE TO THE BASE OF THE FIRE (THIS WILL CONFIGURE THE FLAME ASPECT)
+08049:         for x in prange(min_, max_, schedule='static', num_threads=THREADS):
        __pyx_t_6 = __pyx_v_min_;
        __pyx_t_9 = __pyx_v_max_;
        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_11 = (__pyx_t_9 - __pyx_t_6 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) schedule(static)        __pyx_t_9 = __pyx_v_max_;
        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_11 = (__pyx_t_9 - __pyx_t_6 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
                        {
                            __pyx_v_x = (int)(__pyx_t_6 + 1 * __pyx_t_10);
+08050:                 cloud_[(new_height - 1) % height, x % width] = randRange(intensity, 260)
                            __pyx_t_12 = (__pyx_v_new_height - 1);
                            if (unlikely(__pyx_v_height == 0)) {
                              #ifdef WITH_THREAD
                              PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                              #endif
                              PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                              #ifdef WITH_THREAD
                              __Pyx_PyGILState_Release(__pyx_gilstate_save);
                              #endif
                              __PYX_ERR(1, 8050, __pyx_L11_error)
                            }
                            if (unlikely(__pyx_v_width == 0)) {
                              #ifdef WITH_THREAD
                              PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                              #endif
                              PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                              #ifdef WITH_THREAD
                              __Pyx_PyGILState_Release(__pyx_gilstate_save);
                              #endif
                              __PYX_ERR(1, 8050, __pyx_L11_error)
                            }
                            __pyx_t_13 = __Pyx_mod_long(__pyx_t_12, __pyx_v_height);
                            __pyx_t_14 = __Pyx_mod_int(__pyx_v_x, __pyx_v_width);
                            *((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_cloud_.data + __pyx_t_13 * __pyx_v_cloud_.strides[0]) )) + __pyx_t_14)) )) = randRange(__pyx_v_intensity, 0x104);
                            goto __pyx_L14;
                            __pyx_L11_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L13;
                            __pyx_L13:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates9)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_x;
                            }
                            __pyx_L14:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_x = __pyx_parallel_temp0;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L7_error;
              }
            }
        }
        #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
 08051: 
 08052: 
 08053:         # DILUTE THE FLAME EFFECT (DECREASE THE MAXIMUM INT VALUE) WHEN THE FLAME TRAVEL UPWARD
+08054:         for y in prange(0, new_height - 1, schedule='static', num_threads=THREADS):
        __pyx_t_12 = (__pyx_v_new_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_16 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_d) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_12 = (__pyx_v_new_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_16 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_d) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_16; __pyx_t_15++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_15);
                            /* Initialize private variables to invalid values */
                            __pyx_v_c1 = ((unsigned int)0xbad0bad0);
                            __pyx_v_c2 = ((unsigned int)0xbad0bad0);
                            __pyx_v_d = ((float)__PYX_NAN());
                            __pyx_v_ii = ((unsigned int)0xbad0bad0);
                            __pyx_v_x = ((int)0xbad0bad0);
 08055: 
+08056:             for x in range(0, width):
                            __pyx_t_11 = __pyx_v_width;
                            __pyx_t_10 = __pyx_t_11;
                            for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_10; __pyx_t_9+=1) {
                              __pyx_v_x = __pyx_t_9;
 08057: 
+08058:                     c1 = (y + 1) % height
                              __pyx_t_17 = (__pyx_v_y + 1);
                              if (unlikely(__pyx_v_height == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 8058, __pyx_L17_error)
                              }
                              __pyx_v_c1 = __Pyx_mod_long(__pyx_t_17, __pyx_v_height);
+08059:                     c2 = x % width
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 8059, __pyx_L17_error)
                              }
                              __pyx_v_c2 = __Pyx_mod_int(__pyx_v_x, __pyx_v_width);
+08060:                     d = (cloud_[c1, (x - 1 + width) % width]
                              __pyx_t_17 = ((__pyx_v_x - 1) + __pyx_v_width);
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 8060, __pyx_L17_error)
                              }
                              __pyx_t_18 = __pyx_v_c1;
                              __pyx_t_14 = __Pyx_mod_long(__pyx_t_17, __pyx_v_width);
+08061:                        + cloud_[c1, c2]
                              __pyx_t_19 = __pyx_v_c1;
                              __pyx_t_20 = __pyx_v_c2;
+08062:                        + cloud_[c1, (x + 1) % width]
                              __pyx_t_21 = (__pyx_v_x + 1);
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 8062, __pyx_L17_error)
                              }
                              __pyx_t_22 = __pyx_v_c1;
                              __pyx_t_13 = __Pyx_mod_long(__pyx_t_21, __pyx_v_width);
+08063:                        + cloud_[(y + 2) % height, c2]) * factor
                              __pyx_t_23 = (__pyx_v_y + 2);
                              if (unlikely(__pyx_v_height == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 8063, __pyx_L17_error)
                              }
                              __pyx_t_24 = __Pyx_mod_long(__pyx_t_23, __pyx_v_height);
                              __pyx_t_25 = __pyx_v_c2;
                              __pyx_v_d = (((((*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_cloud_.data + __pyx_t_18 * __pyx_v_cloud_.strides[0]) )) + __pyx_t_14)) ))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_cloud_.data + __pyx_t_19 * __pyx_v_cloud_.strides[0]) )) + __pyx_t_20)) )))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_cloud_.data + __pyx_t_22 * __pyx_v_cloud_.strides[0]) )) + __pyx_t_13)) )))) + (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_cloud_.data + __pyx_t_24 * __pyx_v_cloud_.strides[0]) )) + __pyx_t_25)) )))) * __pyx_v_factor);
 08064: 
+08065:                     d = d - <float>(rand() * 0.0001)
                              __pyx_v_d = (__pyx_v_d - ((float)(rand() * 0.0001)));
 08066: 
 08067:                     # Cap the values
+08068:                     if d <0:
                              __pyx_t_7 = ((__pyx_v_d < 0.0) != 0);
                              if (__pyx_t_7) {
/* … */
                              }
+08069:                         d = 0.0
                                __pyx_v_d = 0.0;
 08070: 
 08071:                     # CAP THE VALUE TO 255
+08072:                     if d>512.0:
                              __pyx_t_7 = ((__pyx_v_d > 512.0) != 0);
                              if (__pyx_t_7) {
/* … */
                              }
+08073:                         d = <float>512.0
                                __pyx_v_d = ((float)512.0);
+08074:                     cloud_[y % height, x % width] = d
                              if (unlikely(__pyx_v_height == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 8074, __pyx_L17_error)
                              }
                              if (unlikely(__pyx_v_width == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 8074, __pyx_L17_error)
                              }
                              __pyx_t_24 = __Pyx_mod_int(__pyx_v_y, __pyx_v_height);
                              __pyx_t_13 = __Pyx_mod_int(__pyx_v_x, __pyx_v_width);
                              *((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_cloud_.data + __pyx_t_24 * __pyx_v_cloud_.strides[0]) )) + __pyx_t_13)) )) = __pyx_v_d;
 08075: 
+08076:                     ii = palette[<unsigned int>d % p_length]
                              if (unlikely(__pyx_v_p_length == 0)) {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                                __PYX_ERR(1, 8076, __pyx_L17_error)
                              }
                              __pyx_t_25 = (((unsigned int)__pyx_v_d) % __pyx_v_p_length);
                              __pyx_v_ii = (*((unsigned int *) ( /* dim=0 */ ((char *) (((unsigned int *) __pyx_v_palette.data) + __pyx_t_25)) )));
 08077: 
+08078:                     out[x, y, 0] = (ii >> 16) & 255
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_24 = __pyx_v_y;
                              __pyx_t_14 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_13 * __pyx_v_out.strides[0]) ) + __pyx_t_24 * __pyx_v_out.strides[1]) )) + __pyx_t_14)) )) = ((__pyx_v_ii >> 16) & 0xFF);
+08079:                     out[x, y, 1] = (ii >> 8) & 255
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_24 = __pyx_v_y;
                              __pyx_t_13 = 1;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_14 * __pyx_v_out.strides[0]) ) + __pyx_t_24 * __pyx_v_out.strides[1]) )) + __pyx_t_13)) )) = ((__pyx_v_ii >> 8) & 0xFF);
+08080:                     out[x, y, 2] = ii & 255
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_24 = __pyx_v_y;
                              __pyx_t_14 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out.data + __pyx_t_13 * __pyx_v_out.strides[0]) ) + __pyx_t_24 * __pyx_v_out.strides[1]) )) + __pyx_t_14)) )) = (__pyx_v_ii & 0xFF);
                            }
                            goto __pyx_L24;
                            __pyx_L17_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L23;
                            __pyx_L23:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates10)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_c1;
                                __pyx_parallel_temp1 = __pyx_v_c2;
                                __pyx_parallel_temp2 = __pyx_v_d;
                                __pyx_parallel_temp3 = __pyx_v_ii;
                                __pyx_parallel_temp4 = __pyx_v_x;
                                __pyx_parallel_temp5 = __pyx_v_y;
                            }
                            __pyx_L24:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_c1 = __pyx_parallel_temp0;
              __pyx_v_c2 = __pyx_parallel_temp1;
              __pyx_v_d = __pyx_parallel_temp2;
              __pyx_v_ii = __pyx_parallel_temp3;
              __pyx_v_x = __pyx_parallel_temp4;
              __pyx_v_y = __pyx_parallel_temp5;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L7_error;
              }
            }
        }
        #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
      }
 08081: 
+08082:     return asarray(out[:, 0:height, :])
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5.data = __pyx_v_out.data;
  __pyx_t_5.memview = __pyx_v_out.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_5, 0);
  __pyx_t_5.shape[0] = __pyx_v_out.shape[0];
__pyx_t_5.strides[0] = __pyx_v_out.strides[0];
    __pyx_t_5.suboffsets[0] = -1;

__pyx_t_11 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_5,
    __pyx_v_out.shape[1], __pyx_v_out.strides[1], __pyx_v_out.suboffsets[1],
    1,
    1,
    &__pyx_t_11,
    0,
    __pyx_v_height,
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(1, 8082, __pyx_L1_error)
}

__pyx_t_5.shape[2] = __pyx_v_out.shape[2];
__pyx_t_5.strides[2] = __pyx_v_out.strides[2];
    __pyx_t_5.suboffsets[2] = -1;

__pyx_t_3 = __pyx_memoryview_fromslice(__pyx_t_5, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8082, __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;
 08083: 
 08084: 
 08085: # CLOUD ARRAY PALETTE
 08086: # cloud_rescale = numpy.zeros(256 * 2 * 3, numpy.uint)
 08087: #
 08088: # arr1 = create_horizontal_gradient_1d(255, (0, 0, 0), (255, 255, 255))
 08089: # arr2 = create_horizontal_gradient_1d(255, (255, 255, 255), (0, 0, 0))
 08090: # arr3 = numpy.concatenate((arr1, arr2), axis=None)
 08091: # i = 0
 08092: # for r in range(0, 1530, 3):
 08093: #     cloud_rescale[i] = rgb_to_int(arr3[r], arr3[r+1], arr3[r+2])
 08094: #     i += 1
 08095: # -------- main loop ----------
 08096: # surface_ = cloud_effect(
 08097: #             width, height, 3.956 + random.uniform(0.002, 0.008),
 08098: #             heatmap_rescale,
 08099: #             CLOUD_ARRAY,
 08100: #             reduce_factor_=2,  cloud_intensity_=75,
 08101: #             smooth_=True, bloom_=False, fast_bloom_=True,
 08102: #             bpf_threshold_=80, low_=0, high_=800, brightness_=False, brightness_intensity_=0.1,
 08103: #             transpose_=False, surface_=None, blur_=False)
 08104: 
 08105: # TODO MASK ? TO MOVE CLOUD ?
 08106: 
 08107: @cython.binding(False)
 08108: @cython.boundscheck(False)
 08109: @cython.wraparound(False)
 08110: @cython.nonecheck(False)
 08111: @cython.cdivision(False)
 08112: @cython.profile(False)
+08113: cdef inline shader_cloud_effect_c(
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_shader_cloud_effect_c(int __pyx_v_width_, int __pyx_v_height_, float __pyx_v_factor_, __Pyx_memviewslice __pyx_v_palette_, __Pyx_memviewslice __pyx_v_cloud_, struct __pyx_opt_args_12PygameShader_6shader_shader_cloud_effect_c *__pyx_optional_args) {
  unsigned short __pyx_v_reduce_factor_ = ((unsigned short)2);
  unsigned short __pyx_v_cloud_intensity_ = ((unsigned short)16);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
  __Pyx_AddTraceback("PygameShader.shader.shader_cloud_effect_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cloud_surface_smallest);
  __Pyx_XDECREF(__pyx_v_rgb_array_);
  __Pyx_XDECREF(__pyx_v_cloud_effect);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+08114:         int width_,
struct __pyx_opt_args_12PygameShader_6shader_shader_cloud_effect_c {
  int __pyx_n;
  unsigned short reduce_factor_;
  unsigned short cloud_intensity_;
  int smooth_;
  int bloom_;
  int fast_bloom_;
  unsigned short bpf_threshold_;
  unsigned int low_;
  unsigned int high_;
  int brightness_;
  float brightness_intensity_;
  PyObject *surface_;
  int transpose_;
  int blur_;
};
 08115:         int height_,
 08116:         float factor_,
 08117:         unsigned int [::1] palette_,
 08118:         float [:, ::1] cloud_,
 08119: 
 08120:         # OPTIONAL
 08121:         unsigned short int reduce_factor_   = 2,
 08122:         unsigned short int cloud_intensity_ = 16,
+08123:         bint smooth_                        = True,
  int __pyx_v_smooth_ = ((int)1);
+08124:         bint bloom_                         = False,
  int __pyx_v_bloom_ = ((int)0);
+08125:         bint fast_bloom_                    = True,
  int __pyx_v_fast_bloom_ = ((int)1);
  unsigned short __pyx_v_bpf_threshold_ = ((unsigned short)0x80);
  unsigned int __pyx_v_low_ = ((unsigned int)0);
  unsigned int __pyx_v_high_ = ((unsigned int)0);
 08126:         unsigned short int bpf_threshold_   = 128,
 08127:         unsigned int low_                   = 0,
 08128:         unsigned int high_                  = 0,
+08129:         bint brightness_                    = False,
  int __pyx_v_brightness_ = ((int)0);
  float __pyx_v_brightness_intensity_ = ((float)0.0);
 08130:         float brightness_intensity_         = 0.0,
+08131:         object surface_                     = None,
  PyObject *__pyx_v_surface_ = ((PyObject *)Py_None);
+08132:         bint transpose_                     = False,
  int __pyx_v_transpose_ = ((int)0);
+08133:         bint blur_                          = True
  int __pyx_v_blur_ = ((int)1);
  int __pyx_v_w4;
  int __pyx_v_h4;
  int __pyx_v_f_height;
  int __pyx_v_f_width;
  PyObject *__pyx_v_cloud_surface_smallest = NULL;
  PyObject *__pyx_v_rgb_array_ = NULL;
  PyObject *__pyx_v_cloud_effect = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_cloud_effect_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_reduce_factor_ = __pyx_optional_args->reduce_factor_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_cloud_intensity_ = __pyx_optional_args->cloud_intensity_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_smooth_ = __pyx_optional_args->smooth_;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_bloom_ = __pyx_optional_args->bloom_;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_fast_bloom_ = __pyx_optional_args->fast_bloom_;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_bpf_threshold_ = __pyx_optional_args->bpf_threshold_;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_low_ = __pyx_optional_args->low_;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_high_ = __pyx_optional_args->high_;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_brightness_ = __pyx_optional_args->brightness_;
                      if (__pyx_optional_args->__pyx_n > 9) {
                        __pyx_v_brightness_intensity_ = __pyx_optional_args->brightness_intensity_;
                        if (__pyx_optional_args->__pyx_n > 10) {
                          __pyx_v_surface_ = __pyx_optional_args->surface_;
                          if (__pyx_optional_args->__pyx_n > 11) {
                            __pyx_v_transpose_ = __pyx_optional_args->transpose_;
                            if (__pyx_optional_args->__pyx_n > 12) {
                              __pyx_v_blur_ = __pyx_optional_args->blur_;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
 08134:         ):
 08135:     """
 08136:     GENERATE CLOUD /SMOKE ON THE GAME DISPLAY
 08137: 
 08138:     * CLOUD TEXTURE SIZES
 08139: 
 08140:     input width_  : integer,
 08141:     input height_ : integer
 08142: 
 08143:     width_ and height_ values define the size of the texture e.g Surface(width x height)
 08144: 
 08145:     * CLOUD ASPECT (CONTROL OVER THE WIDTH):
 08146: 
 08147:     inputs low_ : integer
 08148:     input high_ : integer
 08149: 
 08150:     Optional arguments low_ & high_ (integer values) define the width 's limits of the cloud
 08151:     effect. low_ for the starting point and high_ for the ending of the effect.
 08152:     e.g low_ = 10 and high_ = 200. The cloud effect will be contain within width = 10 and 200
 08153:     low_ & high_ values must be in range [0 ... width_]
 08154: 
 08155:     * CLOUD HEIGHT:
 08156: 
 08157:     input factor_ : float
 08158: 
 08159:     The cloud maximum height can be adjust with the variable factor_ (float value)
 08160:     value > 3.95 will contain the effect within the display
 08161:     value < 3.95 will enlarge the effect over the display height
 08162:     Recommended value is 3.95 with reduce_factor_ = 3 otherwise adjust the value manually
 08163:     to contain the cloud effect within the display
 08164: 
 08165:     * SPEED CONSIDERATION
 08166: 
 08167:     input reduce_factor_ : integer
 08168: 
 08169:     The argument reduce_factor_ control the size of the texture to be processed
 08170:     e.g : a value of 2, divide by 4 the pygame surface define by the values (width_ & height_)
 08171:     Smaller texture improve the overall performances but will slightly degrade the cloud aspect,
 08172:     especially if the blur and smooth option are not enabled.
 08173:     Recommended value for reduce_factor_ is 3 (fast process)
 08174:     reduce_factor_ values must be an integer in range [ 0 ... 4]
 08175:     The reduce_factor_ value will have a significant impact on the cloud effect maximum height,
 08176:     adjust the argument factor_ accordingly
 08177: 
 08178:     * CLOUD INTENSITY AT THE SOURCE
 08179: 
 08180:     input cloud_intensity_: integer
 08181: 
 08182:     Set the cloud intensity with the variable cloud_intensity_, 0 low flame,
 08183:     32 maximum flame effect
 08184:     Values must be an int in range [0 ... 32]
 08185: 
 08186:     * SMOOTHING THE EFFECT
 08187: 
 08188:     input smooth_: True | False
 08189: 
 08190:     When smooth_ is True the algorithm will use the pygame function smoothscale (bi-linear
 08191:     filtering) or False the final texture will be adjust with the scale function.
 08192:     Set this variable to False if you need the best performance for the effect or if you require
 08193:     a pixelated cloud effect. Otherwise set the variable to True for a more realistic effect.
 08194: 
 08195:     * BLOOM EFFECT
 08196: 
 08197:     input bloom_         : True | False
 08198:     input fast_bloom_    : True | False
 08199:     input bpf_threshold_ : integer
 08200: 
 08201:     Bloom effect produce a bright and smooth light effect to the background texture where the cloud
 08202:     intensity is at its maximum.
 08203:     Use the flag fast_bloom_ for a compromise between a realistic effect and the best performances
 08204:     The flag fast_bloom_ define a very fast bloom algo using only the smallest texture
 08205:     to create a bloom effect (all the intermediate textures will be bypassed). See the bloom effect
 08206:     project for more details.
 08207:     When fast_bloom is False, all the sub-surfaces will be blit to the final effect and will
 08208:     produce a more realistic cloud effect (this will slightly degrade the overall performances).
 08209:     If the cloud effect is too bright, you can always adjust the bright pass filter value
 08210:     bpf_threshold_(this will adjust the bloom intensity)
 08211:     bpf_threshold_ value must be in range [ 0 ... 255]
 08212:     Below 128 the bloom effect will be more noticeable and above 128 only the brightest
 08213:     area will be enhanced.
 08214: 
 08215:     * LIGHT EFFECT INTENSITY
 08216: 
 08217:     input brightness_            : True | False
 08218:     input brightness_intensity_  : float
 08219: 
 08220:     When the flag is set to True, the algorithm will use an external function,
 08221:     <shader_brightness24_exclude_inplace_c> to increase the brightness of the effect / texture
 08222:     A custom color can be passed to the function defining the pixels to be ignored during the
 08223:     process (default is black color).
 08224:     the value must be in range [-1.0 ... 1.0]. Values below zero will decrease the brightness
 08225:     of the cloud effect and positive values will increase the brightness of the effect (causing
 08226:     bright white patches on the cloud texture).
 08227:     Values below -0.4 will cause the cloud effect to be translucent
 08228: 
 08229: 
 08230:     * OPTIONAL SURFACE
 08231: 
 08232:     input surface_ : pygame.Surface
 08233: 
 08234:     This is an optional surface that can be passed to the shader to improve the performances
 08235:     and to avoid a new surface to be generated every iterations. The surface size must match
 08236:     exactly the reduce texture dimensions otherwise an exception will be raise.
 08237:     see reduce_factor_ option to determine the cloud texture size that will be processed.
 08238: 
 08239: 
 08240:     * CLOUD ORIENTATION / DIRECTION
 08241: 
 08242:     input transpose_ = True | False,
 08243: 
 08244:     transpose_ = True, this will transpose the final array
 08245:     for e.g :
 08246:     If the final cloud texture is (w, h) after setting the transpose flag, the final
 08247:     cloud texture will become (h, w). As a result the cloud effect will be transversal (starting
 08248:     from the right of the display to the left side).
 08249:     You can always transpose / flip the texture to get the right cloud orientation
 08250: 
 08251:     * FINAL TOUCH
 08252: 
 08253:     input blur_ : True | False
 08254: 
 08255:     This will will blur the cloud effect for a more realistic appearance, remove all the jagged
 08256:     edge when and pixelated effect
 08257: 
 08258:     :param width_               : integer; Texture size (width)
 08259:     :param height_              : integer; Texture size (height)
 08260:     :param factor_              : float; Floating value used to control the size of the cloud
 08261:                                   effect. Value must be in range [3.95 ... 4.2]. Value > 3.95
 08262:                                   will contain the smoke/ cloud effect within the display.
 08263:                                   Values < 3.95 will enlarge the smoke effect.
 08264:     :param palette_             : numpy.ndarray or cython memoryview containing the color for the
 08265:                                   cloud effect (buffer containing mapped RGB colors (uint values))
 08266:     :param cloud_               : numpy.ndarray shape (w, h) containing float values
 08267:                                   (cloud intensity). For better performance it is advised to set the
 08268:                                   array to the size of the texture after applying the
 08269:                                   reduction_factor_. For example if the reduction_factor_ is 2,
 08270:                                   the texture would have to be width >> 1 and height >> 1 and the
 08271:                                   cloud_ array should be equivalent to numpy.empty((height >> 1,
 08272:                                   width >> 1), float32)
 08273:     :param reduce_factor_       : integer; unsigned short int ; Can be either 0, 1, 2, 3, 4.
 08274:                                   2 and 3 provide the best performance and the best looking effect.
 08275:     :param cloud_intensity_     : integer; Determine the amount of smoke the cloud
 08276:                                   effect will generate at the base of the effect (value must be in
 08277:                                   range [0 .. 260]). If you provide zero a random value between
 08278:                                   0 ... 260 will be assigned. If you provide 250, a random value
 08279:                                   between 250 and 260 will be set for the amount of smoke.
 08280:                                   The highest the value, the more dense the cloud effect will be
 08281:     :param smooth_              : boolean; True use a smoothscale (bi-linear filtering) or
 08282:                                   False -> scale algorithm jagged edges (mush faster)
 08283:     :param bloom_               : True | False, Add a bloom effect when the flag is set to True
 08284:                                   The bloom effect will smooth the cloud and create a dense smoke
 08285:                                   areas where the cloud is the brightest.
 08286:     :param fast_bloom_          : True | False; This set a fast algorithm for the bloom effect (the
 08287:                                   bloom effect will use the smallest texture)
 08288:     :param bpf_threshold_       : integer; Bright pass filter value must be in range [ 0 ... 255]
 08289:                                   0 produce the maximum bloom effect
 08290:     :param low_                 : integer; must be in range [ 0 ... width_], left position of the
 08291:                                   cloud effect
 08292:     :param high_                : integer; must be in range [ 0 ... height_], right position of the
 08293:                                   cloud effect
 08294:     :param brightness_          : True | False; Increase the brightness of the cloud effect when
 08295:                                   True
 08296:     :param brightness_intensity_: float; Set the brightness intensity of the cloud. The value must
 08297:                                   be in range [-1.0 ... +1.0]. Changing the value overtime will
 08298:                                   generate a realistic cloud effect. Negative value will generate
 08299:                                   translucent patch of smoke on the background image
 08300:     :param surface_             : Pygame.Surface; Pass a surface to the shader for
 08301:                                   better performance, otherwise a new surface will be created each
 08302:                                   calls.
 08303:     :param transpose_           : boolean; Transpose the array (w, h) become (h, w).
 08304:                                   The cloud effect will start from the left and move to the right
 08305:     :param blur_                : boolean; Blur the cloud effect
 08306:     :return                     : Return a pygame surface that can be blit directly to the game
 08307:                                   display
 08308:     """
 08309: 
 08310: 
 08311:     cdef int w4, h4
 08312: 
 08313:     # TEXTURE DIVIDE BY POWER OF 2
+08314:     if reduce_factor_ in (0, 1, 2):
  switch (__pyx_v_reduce_factor_) {
    case 0:
    case 1:
    case 2:
/* … */
    break;
    case 3:
+08315:         w4, h4 = width_ >> reduce_factor_, height_ >> reduce_factor_
    __pyx_t_1 = (__pyx_v_width_ >> __pyx_v_reduce_factor_);
    __pyx_t_2 = (__pyx_v_height_ >> __pyx_v_reduce_factor_);
    __pyx_v_w4 = __pyx_t_1;
    __pyx_v_h4 = __pyx_t_2;
 08316: 
 08317:     # TEXTURE 150 x 150 * ratio
+08318:     elif reduce_factor_ == 3:
    break;
    case 4:
 08319:         # CUSTOM SIZE WIDTH 150 AND RATIO * HIGH
+08320:         w4 = 150
    __pyx_v_w4 = 0x96;
+08321:         h4 = <int>(150 * height_/width_)
    __pyx_t_3 = (0x96 * __pyx_v_height_);
    if (unlikely(__pyx_v_width_ == 0)) {
      PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
      __PYX_ERR(1, 8321, __pyx_L1_error)
    }
    else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_width_ == (int)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_3))) {
      PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
      __PYX_ERR(1, 8321, __pyx_L1_error)
    }
    __pyx_v_h4 = ((int)__Pyx_div_long(__pyx_t_3, __pyx_v_width_));
+08322:         low_ = <int>(low_ * low_/width_)
    __pyx_t_4 = (__pyx_v_low_ * __pyx_v_low_);
    if (unlikely(__pyx_v_width_ == 0)) {
      PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
      __PYX_ERR(1, 8322, __pyx_L1_error)
    }
    __pyx_v_low_ = ((int)(__pyx_t_4 / __pyx_v_width_));
+08323:         high_ = <int>(high_ * 150/width_)
    __pyx_t_3 = (__pyx_v_high_ * 0x96);
    if (unlikely(__pyx_v_width_ == 0)) {
      PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
      __PYX_ERR(1, 8323, __pyx_L1_error)
    }
    else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_width_ == (int)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_3))) {
      PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
      __PYX_ERR(1, 8323, __pyx_L1_error)
    }
    __pyx_v_high_ = ((int)__Pyx_div_long(__pyx_t_3, __pyx_v_width_));
+08324:         reduce_factor_ = 0
    __pyx_v_reduce_factor_ = 0;
 08325: 
 08326:     # TEXTURE 100 x 100 * ratio
+08327:     elif reduce_factor_ == 4:
    break;
    default: break;
  }
+08328:         w4 = 100
    __pyx_v_w4 = 0x64;
+08329:         h4 = <int> (100 * height_ / width_)
    __pyx_t_3 = (0x64 * __pyx_v_height_);
    if (unlikely(__pyx_v_width_ == 0)) {
      PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
      __PYX_ERR(1, 8329, __pyx_L1_error)
    }
    else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_width_ == (int)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_3))) {
      PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
      __PYX_ERR(1, 8329, __pyx_L1_error)
    }
    __pyx_v_h4 = ((int)__Pyx_div_long(__pyx_t_3, __pyx_v_width_));
+08330:         low_ = <int> (low_ * low_ / width_)
    __pyx_t_4 = (__pyx_v_low_ * __pyx_v_low_);
    if (unlikely(__pyx_v_width_ == 0)) {
      PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
      __PYX_ERR(1, 8330, __pyx_L1_error)
    }
    __pyx_v_low_ = ((int)(__pyx_t_4 / __pyx_v_width_));
+08331:         high_ = <int> (high_ * 100 / width_)
    __pyx_t_3 = (__pyx_v_high_ * 0x64);
    if (unlikely(__pyx_v_width_ == 0)) {
      PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
      __PYX_ERR(1, 8331, __pyx_L1_error)
    }
    else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_width_ == (int)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_3))) {
      PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
      __PYX_ERR(1, 8331, __pyx_L1_error)
    }
    __pyx_v_high_ = ((int)__Pyx_div_long(__pyx_t_3, __pyx_v_width_));
+08332:         reduce_factor_ = 0
    __pyx_v_reduce_factor_ = 0;
 08333: 
 08334:     cdef int f_height, f_width
+08335:     f_height, f_width = (<object> cloud_).shape[:2]
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_cloud_, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_shape); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_6, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    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(1, 8335, __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_7 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_7);
    #else
    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
    index = 0; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(1, 8335, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 8335, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8335, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8335, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_f_height = __pyx_t_2;
  __pyx_v_f_width = __pyx_t_1;
 08336: 
+08337:     assert f_width >= w4 or f_height >= h4, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_11 = ((__pyx_v_f_width >= __pyx_v_w4) != 0);
    if (!__pyx_t_11) {
    } else {
      __pyx_t_10 = __pyx_t_11;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_11 = ((__pyx_v_f_height >= __pyx_v_h4) != 0);
    __pyx_t_10 = __pyx_t_11;
    __pyx_L5_bool_binop_done:;
    if (unlikely(!__pyx_t_10)) {
 08338:         "Cloud array size mismatch the texture size.\n" \
+08339:         "Set cloud array to numpy.empty((%s, %s), dtype=numpy.float32)" % (h4, w4)
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
      __pyx_t_5 = 0;
      __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_Cloud_array_size_mismatch_the_te, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_7);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(1, 8337, __pyx_L1_error)
    }
  }
  #endif
 08340: 
+08341:     if surface_ is None:
  __pyx_t_10 = (__pyx_v_surface_ == Py_None);
  __pyx_t_11 = (__pyx_t_10 != 0);
  if (__pyx_t_11) {
/* … */
    goto __pyx_L7;
  }
+08342:         cloud_surface_smallest = pygame.Surface((w4, h4)).convert()
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pygame); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Surface); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_12);
    __pyx_t_5 = 0;
    __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_6 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_12, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_13);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_convert); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_7 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_cloud_surface_smallest = __pyx_t_7;
    __pyx_t_7 = 0;
 08343: 
 08344:     else:
+08345:         if PyObject_IsInstance(surface_, pygame.Surface):
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pygame); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_Surface); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_11 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_8); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 8345, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = (__pyx_t_11 != 0);
    if (likely(__pyx_t_10)) {
/* … */
      goto __pyx_L8;
    }
+08346:             assert surface_.get_width() == w4 and surface_.get_height() == h4, \
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_width); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_6 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
          }
        }
        __pyx_t_8 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (__pyx_t_11) {
        } else {
          __pyx_t_10 = __pyx_t_11;
          goto __pyx_L9_bool_binop_done;
        }
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_height); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
          }
        }
        __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(1, 8346, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_10 = __pyx_t_11;
        __pyx_L9_bool_binop_done:;
        if (unlikely(!__pyx_t_10)) {
 08347:             "Surface argument has incorrect dimension surface must be (w:%s, h:%s) got (%s, %s)\n" \
 08348:             "Set argument surface_ to None to avoid this error message"\
+08349:             % (w4, h4, surface_.get_width(), surface_.get_height())
          __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_width); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_12 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
            __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
            if (likely(__pyx_t_12)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_12);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_13, function);
            }
          }
          __pyx_t_6 = (__pyx_t_12) ? __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_12) : __Pyx_PyObject_CallNoArg(__pyx_t_13);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_height); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_5 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
            }
          }
          __pyx_t_13 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_12);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyTuple_New(4); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_8);
          PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_8);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_13);
          __pyx_t_8 = 0;
          __pyx_t_7 = 0;
          __pyx_t_6 = 0;
          __pyx_t_13 = 0;
          __pyx_t_13 = __Pyx_PyString_Format(__pyx_kp_s_Surface_argument_has_incorrect_d, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __PYX_ERR(1, 8346, __pyx_L1_error)
        }
      }
      #endif
+08350:             cloud_surface_smallest = surface_
      __Pyx_INCREF(__pyx_v_surface_);
      __pyx_v_cloud_surface_smallest = __pyx_v_surface_;
 08351:         else:
+08352:             raise ValueError("Argument surface_ must be a Surface type got %s " % type(surface_))
    /*else*/ {
      __pyx_t_13 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_Surf, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_Raise(__pyx_t_12, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __PYX_ERR(1, 8352, __pyx_L1_error)
    }
    __pyx_L8:;
  }
  __pyx_L7:;
 08353: 
+08354:     rgb_array_ = cloud_surface24_c(
  __pyx_t_14.__pyx_n = 3;
  __pyx_t_14.intensity = __pyx_v_cloud_intensity_;
  __pyx_t_14.low = (__pyx_v_low_ >> __pyx_v_reduce_factor_);
  __pyx_t_14.high = (__pyx_v_high_ >> __pyx_v_reduce_factor_);
  __pyx_t_12 = __pyx_f_12PygameShader_6shader_cloud_surface24_c(__pyx_v_w4, __pyx_v_h4, (((float)1.0) / __pyx_v_factor_), __pyx_v_palette_, __pyx_v_cloud_, &__pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_v_rgb_array_ = __pyx_t_12;
  __pyx_t_12 = 0;
+08355:         w4, h4, <float>1.0 / factor_, palette_, cloud_, cloud_intensity_,
  if (unlikely(__pyx_v_factor_ == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(1, 8355, __pyx_L1_error)
  }
 08356:                 low_ >> reduce_factor_, high_ >> reduce_factor_)
 08357: 
 08358:     # BRIGHTNESS SHADER
+08359:     if brightness_:
  __pyx_t_10 = (__pyx_v_brightness_ != 0);
  if (__pyx_t_10) {
/* … */
  }
 08360:         # EXCLUDE BLACK COLORS (DEFAULT)
+08361:         assert -1.0 <= brightness_intensity_ <= 1.0, \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_10 = (-1.0 <= __pyx_v_brightness_intensity_);
      if (__pyx_t_10) {
        __pyx_t_10 = (__pyx_v_brightness_intensity_ <= 1.0);
      }
      if (unlikely(!(__pyx_t_10 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_brightness_intensity_mu);
        __PYX_ERR(1, 8361, __pyx_L1_error)
      }
    }
    #endif
 08362:             "Argument brightness intensity must be in range [-1.0 ... 1.0]"
+08363:         shader_brightness24_exclude_inplace_c(rgb_array_=rgb_array_,
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 8363, __pyx_L1_error)
/* … */
    __pyx_t_16.__pyx_n = 2;
    __pyx_t_16.shift_ = __pyx_v_brightness_intensity_;
    __pyx_t_16.color_ = __pyx_tuple__9;
    __pyx_f_12PygameShader_6shader_shader_brightness24_exclude_inplace_c(__pyx_t_15, &__pyx_t_16); 
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
 08364:                                               shift_=brightness_intensity_, color_=(0, 0, 0))
 08365: 
+08366:     if blur_:
  __pyx_t_10 = (__pyx_v_blur_ != 0);
  if (__pyx_t_10) {
/* … */
  }
+08367:         shader_blur5x5_array24_inplace_c(rgb_array_)
    __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 8367, __pyx_L1_error)
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_t_15, NULL);
    __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
    __pyx_t_15.memview = NULL;
    __pyx_t_15.data = NULL;
 08368: 
+08369:     if transpose_:
  __pyx_t_10 = (__pyx_v_transpose_ != 0);
  if (__pyx_t_10) {
/* … */
    goto __pyx_L13;
  }
+08370:         rgb_array_ = rgb_array_.transpose(1, 0, 2)
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_rgb_array_, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF_SET(__pyx_v_rgb_array_, __pyx_t_13);
    __pyx_t_13 = 0;
+08371:         cloud_surface_smallest = make_surface(rgb_array_)
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_13 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_6, __pyx_v_rgb_array_) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_rgb_array_);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF_SET(__pyx_v_cloud_surface_smallest, __pyx_t_13);
    __pyx_t_13 = 0;
 08372:     else:
 08373:         # CONVERT THE ARRAY INTO A PYGAME SURFACE
+08374:         array_to_surface(cloud_surface_smallest, rgb_array_)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_array_to_surface); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8374, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_6 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
        __pyx_t_1 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_12)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_cloud_surface_smallest, __pyx_v_rgb_array_};
      __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8374, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_13);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_cloud_surface_smallest, __pyx_v_rgb_array_};
      __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8374, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_13);
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8374, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_v_cloud_surface_smallest);
      __Pyx_GIVEREF(__pyx_v_cloud_surface_smallest);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_1, __pyx_v_cloud_surface_smallest);
      __Pyx_INCREF(__pyx_v_rgb_array_);
      __Pyx_GIVEREF(__pyx_v_rgb_array_);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_1, __pyx_v_rgb_array_);
      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_7, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8374, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  }
  __pyx_L13:;
 08375: 
 08376: 
 08377:     # BLOOM SHADER EFFECT
+08378:     if bloom_:
  __pyx_t_10 = (__pyx_v_bloom_ != 0);
  if (__pyx_t_10) {
/* … */
  }
+08379:         assert 0 <= bpf_threshold_ < 256, \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_10 = (0 <= __pyx_v_bpf_threshold_);
      if (__pyx_t_10) {
        __pyx_t_10 = (__pyx_v_bpf_threshold_ < 0x100);
      }
      if (unlikely(!(__pyx_t_10 != 0))) {
+08380:             "Argument bpf_threshold_ must be in range [0 ... 256] got %s " % bpf_threshold_
        __pyx_t_13 = __Pyx_PyInt_From_unsigned_short(__pyx_v_bpf_threshold_); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8380, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_12 = __Pyx_PyString_Format(__pyx_kp_s_Argument_bpf_threshold__must_be, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8380, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_12);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __PYX_ERR(1, 8379, __pyx_L1_error)
      }
    }
    #endif
+08381:         shader_bloom_effect_array24_c(cloud_surface_smallest, bpf_threshold_, fast_=fast_bloom_)
    __pyx_t_17.__pyx_n = 1;
    __pyx_t_17.fast_ = __pyx_v_fast_bloom_;
    __pyx_f_12PygameShader_6shader_shader_bloom_effect_array24_c(__pyx_v_cloud_surface_smallest, __pyx_v_bpf_threshold_, &__pyx_t_17); 
 08382: 
 08383:     # RESCALE THE SURFACE TO THE FULL SIZE
+08384:     if smooth_:
  __pyx_t_10 = (__pyx_v_smooth_ != 0);
  if (__pyx_t_10) {
/* … */
    goto __pyx_L15;
  }
+08385:         cloud_effect = smoothscale(cloud_surface_smallest, (width_, height_))
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8385, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8385, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8385, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8385, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
    __pyx_t_7 = 0;
    __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
        __pyx_t_1 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_cloud_surface_smallest, __pyx_t_8};
      __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8385, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_cloud_surface_smallest, __pyx_t_8};
      __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8385, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8385, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_v_cloud_surface_smallest);
      __Pyx_GIVEREF(__pyx_v_cloud_surface_smallest);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_1, __pyx_v_cloud_surface_smallest);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_1, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_7, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8385, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_v_cloud_effect = __pyx_t_12;
    __pyx_t_12 = 0;
 08386:     else:
+08387:         cloud_effect = scale(cloud_surface_smallest, (width_, height_))
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_scale); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 8387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_width_); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_height_); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8);
    __pyx_t_7 = 0;
    __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
        __pyx_t_1 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_cloud_surface_smallest, __pyx_t_6};
      __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8387, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_cloud_surface_smallest, __pyx_t_6};
      __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8387, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8387, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_8) {
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
      }
      __Pyx_INCREF(__pyx_v_cloud_surface_smallest);
      __Pyx_GIVEREF(__pyx_v_cloud_surface_smallest);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_1, __pyx_v_cloud_surface_smallest);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_1, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_7, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8387, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_v_cloud_effect = __pyx_t_12;
    __pyx_t_12 = 0;
  }
  __pyx_L15:;
 08388: 
+08389:     return cloud_effect
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_cloud_effect);
  __pyx_r = __pyx_v_cloud_effect;
  goto __pyx_L0;
 08390: 
 08391: 
 08392: 
 08393: @cython.binding(False)
 08394: @cython.binding(False)
 08395: @cython.boundscheck(False)
 08396: @cython.wraparound(False)
 08397: @cython.nonecheck(False)
 08398: @cython.cdivision(True)
 08399: @cython.profile(False)
+08400: cdef inline mirroring_c(unsigned char[:, :, :] rgb_array_):
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_mirroring_c(__Pyx_memviewslice __pyx_v_rgb_array_) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_x2;
  int __pyx_v_x3;
  int __pyx_v_x;
  int __pyx_v_y;
  __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mirroring_c", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("PygameShader.shader.mirroring_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08401: 
 08402:     """
 08403:     SHADER MIRRORING
 08404: 
 08405:     This method create a mirror image placed to the right side of the
 08406:      original image referenced by rgb_array_
 08407: 
 08408:     The Array (rgb_array) must be a numpy array shape (w, h, 3)
 08409:     containing RGB pixels, please refer to pygame
 08410:     function pixels3d or array3d to convert an image into a 3d
 08411:     array (library surfarray)
 08412: 
 08413:     :param rgb_array_: numpy ndarray shape (w, h, 3) containing RGB pixels
 08414:     :return          : returns a numpy ndarray shape (w, h, 3) with transformation
 08415:     """
 08416: 
 08417:     cdef:
 08418:         Py_ssize_t w, h
 08419:         int x2, x3
+08420:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 08421: 
 08422: 
 08423:     cdef:
 08424:         int x, y
+08425:         unsigned char [:, :, :] new_array = empty((w, h, 3), uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_int_3);
  __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_uint8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = NULL;
  __pyx_t_9 = 0;
  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_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_7};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8425, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_7};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8425, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_7);
    __pyx_t_8 = 0;
    __pyx_t_7 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(1, 8425, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_new_array = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
 08426:         unsigned char *r
 08427:         unsigned char *g
 08428:         unsigned char *b
 08429: 
+08430:     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:;
      }
  }
+08431:         for x in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_12 = (__pyx_t_3 - 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_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_r) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_x3) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_3 = __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_12 = (__pyx_t_3 - 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_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_r) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_x3) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_12; __pyx_t_2++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_x2 = ((int)0xbad0bad0);
                            __pyx_v_x3 = ((int)0xbad0bad0);
                            __pyx_v_y = ((int)0xbad0bad0);
+08432:             for y in range(h):
                            __pyx_t_13 = __pyx_v_h;
                            __pyx_t_14 = __pyx_t_13;
                            for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_14; __pyx_t_9+=1) {
                              __pyx_v_y = __pyx_t_9;
 08433: 
+08434:                 r = &rgb_array_[x, y, <unsigned short int>0]
                              __pyx_t_15 = __pyx_v_x;
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)0);
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[2]) ))));
+08435:                 g = &rgb_array_[x, y, <unsigned short int>1]
                              __pyx_t_16 = __pyx_v_x;
                              __pyx_t_15 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)1);
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[2]) ))));
+08436:                 b = &rgb_array_[x, y, <unsigned short int>2]
                              __pyx_t_15 = __pyx_v_x;
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)2);
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[2]) ))));
 08437: 
+08438:                 x2 = x >> <unsigned short int>1
                              __pyx_v_x2 = (__pyx_v_x >> ((unsigned short)1));
+08439:                 new_array[x2, y, <unsigned short int>0] = r[<unsigned short int>0]
                              __pyx_t_16 = __pyx_v_x2;
                              __pyx_t_15 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_16 * __pyx_v_new_array.strides[0]) ) + __pyx_t_15 * __pyx_v_new_array.strides[1]) ) + __pyx_t_17 * __pyx_v_new_array.strides[2]) )) = (__pyx_v_r[((unsigned short)0)]);
+08440:                 new_array[x2, y, <unsigned short int>1] = g[<unsigned short int>0]
                              __pyx_t_15 = __pyx_v_x2;
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_15 * __pyx_v_new_array.strides[0]) ) + __pyx_t_16 * __pyx_v_new_array.strides[1]) ) + __pyx_t_17 * __pyx_v_new_array.strides[2]) )) = (__pyx_v_g[((unsigned short)0)]);
+08441:                 new_array[x2, y, <unsigned short int>2] = b[<unsigned short int>0]
                              __pyx_t_16 = __pyx_v_x2;
                              __pyx_t_15 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_16 * __pyx_v_new_array.strides[0]) ) + __pyx_t_15 * __pyx_v_new_array.strides[1]) ) + __pyx_t_17 * __pyx_v_new_array.strides[2]) )) = (__pyx_v_b[((unsigned short)0)]);
+08442:                 x3 = <int>w - x2 -<unsigned short int>1
                              __pyx_v_x3 = ((((int)__pyx_v_w) - __pyx_v_x2) - ((unsigned short)1));
+08443:                 new_array[x3, y, <unsigned short int>0] = r[<unsigned short int>0]
                              __pyx_t_15 = __pyx_v_x3;
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_15 * __pyx_v_new_array.strides[0]) ) + __pyx_t_16 * __pyx_v_new_array.strides[1]) ) + __pyx_t_17 * __pyx_v_new_array.strides[2]) )) = (__pyx_v_r[((unsigned short)0)]);
+08444:                 new_array[x3, y, <unsigned short int>1] = g[<unsigned short int>0]
                              __pyx_t_16 = __pyx_v_x3;
                              __pyx_t_15 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_16 * __pyx_v_new_array.strides[0]) ) + __pyx_t_15 * __pyx_v_new_array.strides[1]) ) + __pyx_t_17 * __pyx_v_new_array.strides[2]) )) = (__pyx_v_g[((unsigned short)0)]);
+08445:                 new_array[x3, y, <unsigned short int>2] = b[<unsigned short int>0]
                              __pyx_t_15 = __pyx_v_x3;
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_15 * __pyx_v_new_array.strides[0]) ) + __pyx_t_16 * __pyx_v_new_array.strides[1]) ) + __pyx_t_17 * __pyx_v_new_array.strides[2]) )) = (__pyx_v_b[((unsigned short)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
      }
 08446: 
+08447:     return asarray(new_array)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_asarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = __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_10)) __PYX_ERR(1, 8447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 08448: 
 08449: 
 08450: 
 08451: @cython.binding(False)
 08452: @cython.binding(False)
 08453: @cython.boundscheck(False)
 08454: @cython.wraparound(False)
 08455: @cython.nonecheck(False)
 08456: @cython.cdivision(True)
 08457: @cython.profile(False)
+08458: cdef inline mirroring_inplace_c(unsigned char[:, :, :] rgb_array_):
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_mirroring_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  int __pyx_v_x2;
  int __pyx_v_x3;
  int __pyx_v_x;
  int __pyx_v_y;
  __Pyx_memviewslice __pyx_v_rgb_array_copy = { 0, 0, { 0 }, { 0 }, { 0 } };
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mirroring_inplace_c", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("PygameShader.shader.mirroring_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_copy, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08459: 
 08460:     """
 08461:     SHADER MIRRORING (INPLACE)
 08462: 
 08463:     This method create a mirror image placed to the right side of
 08464:      the original image referenced by rgb_array_
 08465: 
 08466:     The Array (rgb_array) must be a numpy array shape (w, h, 3)
 08467:     containing RGB pixels, please refer to pygame
 08468:     function pixels3d or array3d to convert an image into a 3d array (library surfarray)
 08469: 
 08470:     :param rgb_array_: numpy ndarray shape (w, h, 3) containing RGB pixels
 08471:     :return          : void
 08472:     """
 08473: 
 08474:     cdef:
 08475:         Py_ssize_t w, h
 08476:         int x2, x3
+08477:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 08478: 
 08479:     cdef:
 08480:         int x, y
+08481:         unsigned char [:, :, :] rgb_array_copy = numpy.array(rgb_array_, copy=True)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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(1, 8481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(1, 8481, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 8481, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_rgb_array_copy = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 08482:         unsigned char *r
 08483:         unsigned char *g
 08484:         unsigned char *b
 08485: 
+08486:     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:;
      }
  }
+08487:         for x in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_r) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_x3) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_3 = __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_9 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_r) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_x2) lastprivate(__pyx_v_x3) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_9; __pyx_t_2++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_x2 = ((int)0xbad0bad0);
                            __pyx_v_x3 = ((int)0xbad0bad0);
                            __pyx_v_y = ((int)0xbad0bad0);
+08488:             for y in range(h):
                            __pyx_t_10 = __pyx_v_h;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_y = __pyx_t_12;
 08489: 
+08490:                 r = &rgb_array_copy[x, y, <unsigned short int>0]
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_13 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[2]) ))));
+08491:                 g = &rgb_array_copy[x, y, <unsigned short int>1]
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)1);
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[2]) ))));
+08492:                 b = &rgb_array_copy[x, y, <unsigned short int>2]
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)2);
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_copy.data + __pyx_t_13 * __pyx_v_rgb_array_copy.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_copy.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_copy.strides[2]) ))));
 08493: 
+08494:                 x2 = x >> <unsigned short int>1
                              __pyx_v_x2 = (__pyx_v_x >> ((unsigned short)1));
+08495:                 rgb_array_[x2, y, <unsigned short int>0] = r[<unsigned short int>0]
                              __pyx_t_14 = __pyx_v_x2;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_r[((unsigned short)0)]);
+08496:                 rgb_array_[x2, y, <unsigned short int>1] = g[<unsigned short int>0]
                              __pyx_t_13 = __pyx_v_x2;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_g[((unsigned short)0)]);
+08497:                 rgb_array_[x2, y, <unsigned short int>2] = b[<unsigned short int>0]
                              __pyx_t_14 = __pyx_v_x2;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_b[((unsigned short)0)]);
 08498: 
+08499:                 x3 = <int>w - x2 - <unsigned short int>1
                              __pyx_v_x3 = ((((int)__pyx_v_w) - __pyx_v_x2) - ((unsigned short)1));
 08500: 
+08501:                 rgb_array_[x3, y, <unsigned short int>0] = r[<unsigned short int>0]
                              __pyx_t_13 = __pyx_v_x3;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_r[((unsigned short)0)]);
+08502:                 rgb_array_[x3, y, <unsigned short int>1] = g[<unsigned short int>0]
                              __pyx_t_14 = __pyx_v_x3;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_g[((unsigned short)0)]);
+08503:                 rgb_array_[x3, y, <unsigned short int>2] = b[<unsigned short int>0]
                              __pyx_t_13 = __pyx_v_x3;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = (__pyx_v_b[((unsigned short)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
      }
 08504: 
 08505: @cython.binding(False)
 08506: @cython.binding(False)
 08507: @cython.boundscheck(False)
 08508: @cython.wraparound(False)
 08509: @cython.nonecheck(False)
 08510: @cython.cdivision(True)
 08511: @cython.profile(False)
+08512: cpdef tuple dampening(
static PyObject *__pyx_pw_12PygameShader_6shader_177dampening(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_dampening(PyObject *__pyx_v_surface_, int __pyx_v_frame_, int __pyx_v_display_width, int __pyx_v_display_height_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_dampening *__pyx_optional_args) {
  float __pyx_v_amplitude_ = ((float)50.0);
  int __pyx_v_duration_ = ((int)30);
  float __pyx_v_freq_ = ((float)20.0);
  float __pyx_v_t;
  int __pyx_v_width;
  int __pyx_v_height;
  float __pyx_v_tm;
  PyObject *__pyx_v_surf = 0;
  int __pyx_v_new_width;
  int __pyx_v_new_height;
  int __pyx_v_diff_x;
  int __pyx_v_diff_y;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dampening", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amplitude_ = __pyx_optional_args->amplitude_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_duration_ = __pyx_optional_args->duration_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_freq_ = __pyx_optional_args->freq_;
        }
      }
    }
  }
/* … */
  /* 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_9);
  __Pyx_AddTraceback("PygameShader.shader.dampening", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_surf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_177dampening(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_176dampening[] = "\n    DAMPENING EFFECT\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    Compatible with image 24-32 bit\n    The length of the effect equal duration_ * freq_\n\n    e.g :\n    surf, xx, yy = dampening(BCK, frame, width, height,\n    amplitude_=100, duration_=40, freq_=15)\n    SCREEN.blit(surf, (xx, yy))\n\n    :param surface_       : pygame.Surface (compatible 24 - 32 bit)\n    :param frame_         : integer; Frame number (linear variable changing overtime)\n    :param display_width  : integer; Size of your game display (width)\n    :param display_height_: integer; size of your game display (height)\n    :param amplitude_     : float; Amplitude of the dampening effect  (default is 50)\n    :param duration_      : integer; Duration of the effect (default value is 30)\n    :param freq_          : float; change the speed of the effect default value is 20.0.\n    A small value will decrease\n    the overall timing of the effect while a larger value will increase the duration of the effect.\n    :return               : Tuple values containing the Surface and the position (x, y)\n    with x & y are the top\n     left corner of the\n    image\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_177dampening(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  int __pyx_v_frame_;
  int __pyx_v_display_width;
  int __pyx_v_display_height_;
  float __pyx_v_amplitude_;
  int __pyx_v_duration_;
  float __pyx_v_freq_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dampening (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_frame_2,&__pyx_n_s_display_width,&__pyx_n_s_display_height,&__pyx_n_s_amplitude,&__pyx_n_s_duration,&__pyx_n_s_freq,0};
    PyObject* values[7] = {0,0,0,0,0,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  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_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_frame_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("dampening", 0, 4, 7, 1); __PYX_ERR(1, 8512, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_display_width)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("dampening", 0, 4, 7, 2); __PYX_ERR(1, 8512, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_display_height)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("dampening", 0, 4, 7, 3); __PYX_ERR(1, 8512, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_amplitude);
          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_duration);
          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_freq);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dampening") < 0)) __PYX_ERR(1, 8512, __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);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 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_surface_ = values[0];
    __pyx_v_frame_ = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_frame_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8514, __pyx_L3_error)
    __pyx_v_display_width = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_display_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8515, __pyx_L3_error)
    __pyx_v_display_height_ = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_display_height_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8516, __pyx_L3_error)
    if (values[4]) {
      __pyx_v_amplitude_ = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_amplitude_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 8517, __pyx_L3_error)
    } else {
      __pyx_v_amplitude_ = ((float)50.0);
    }
    if (values[5]) {
      __pyx_v_duration_ = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_duration_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8518, __pyx_L3_error)
    } else {
      __pyx_v_duration_ = ((int)30);
    }
    if (values[6]) {
      __pyx_v_freq_ = __pyx_PyFloat_AsFloat(values[6]); if (unlikely((__pyx_v_freq_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 8519, __pyx_L3_error)
    } else {
      __pyx_v_freq_ = ((float)20.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dampening", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 8512, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.dampening", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_176dampening(__pyx_self, __pyx_v_surface_, __pyx_v_frame_, __pyx_v_display_width, __pyx_v_display_height_, __pyx_v_amplitude_, __pyx_v_duration_, __pyx_v_freq_);
  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_6shader_176dampening(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, int __pyx_v_frame_, int __pyx_v_display_width, int __pyx_v_display_height_, float __pyx_v_amplitude_, int __pyx_v_duration_, float __pyx_v_freq_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dampening", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.amplitude_ = __pyx_v_amplitude_;
  __pyx_t_2.duration_ = __pyx_v_duration_;
  __pyx_t_2.freq_ = __pyx_v_freq_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_dampening(__pyx_v_surface_, __pyx_v_frame_, __pyx_v_display_width, __pyx_v_display_height_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8512, __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.shader.dampening", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08513:         object surface_,
 08514:         int frame_,
 08515:         int display_width,
 08516:         int display_height_,
 08517:         float amplitude_=50.0,
 08518:         int duration_=30,
 08519:         float freq_=20.0):
 08520: 
 08521:     """
 08522:     DAMPENING EFFECT
 08523: 
 08524:     Cython cpdef function, this function can be called directly and do not require a
 08525:     hook function.
 08526: 
 08527:     Compatible with image 24-32 bit
 08528:     The length of the effect equal duration_ * freq_
 08529: 
 08530:     e.g :
 08531:     surf, xx, yy = dampening(BCK, frame, width, height,
 08532:     amplitude_=100, duration_=40, freq_=15)
 08533:     SCREEN.blit(surf, (xx, yy))
 08534: 
 08535:     :param surface_       : pygame.Surface (compatible 24 - 32 bit)
 08536:     :param frame_         : integer; Frame number (linear variable changing overtime)
 08537:     :param display_width  : integer; Size of your game display (width)
 08538:     :param display_height_: integer; size of your game display (height)
 08539:     :param amplitude_     : float; Amplitude of the dampening effect  (default is 50)
 08540:     :param duration_      : integer; Duration of the effect (default value is 30)
 08541:     :param freq_          : float; change the speed of the effect default value is 20.0.
 08542:     A small value will decrease
 08543:     the overall timing of the effect while a larger value will increase the duration of the effect.
 08544:     :return               : Tuple values containing the Surface and the position (x, y)
 08545:     with x & y are the top
 08546:      left corner of the
 08547:     image
 08548:     """
 08549: 
+08550:     assert freq_ > <float>0.0, "Argument freq_ must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_freq_ > ((float)0.0)) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_freq__must_be_0);
      __PYX_ERR(1, 8550, __pyx_L1_error)
    }
  }
  #endif
+08551:     assert duration_ > <float>0.0, "Argument duration_ must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_duration_ > ((float)0.0)) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_duration__must_be_0);
      __PYX_ERR(1, 8551, __pyx_L1_error)
    }
  }
  #endif
 08552: 
+08553:     cdef float t = damped_oscillation(<float>((<float>frame_ / freq_) % duration_))
  __pyx_v_t = __pyx_f_12PygameShader_6shader_damped_oscillation(((float)fmodf((((float)__pyx_v_frame_) / __pyx_v_freq_), __pyx_v_duration_)));
 08554:     cdef int width, height,
+08555:     cdef float tm = t * amplitude_
  __pyx_v_tm = (__pyx_v_t * __pyx_v_amplitude_);
 08556: 
+08557:     width, height = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 8557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 8557, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 8557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 8557, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 8557, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8557, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8557, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_width = __pyx_t_6;
  __pyx_v_height = __pyx_t_7;
 08558: 
+08559:     if width + tm < 0:
  __pyx_t_8 = (((__pyx_v_width + __pyx_v_tm) < 0.0) != 0);
  if (__pyx_t_8) {
/* … */
  }
+08560:         tm = 0
    __pyx_v_tm = 0.0;
+08561:     if height + tm < 0:
  __pyx_t_8 = (((__pyx_v_height + __pyx_v_tm) < 0.0) != 0);
  if (__pyx_t_8) {
/* … */
  }
+08562:         tm = 0
    __pyx_v_tm = 0.0;
+08563:     cdef object surf = smoothscale(surface_, (<int>tm +<int> (width + <int>tm),
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_int((((int)__pyx_v_tm) + ((int)(__pyx_v_width + ((int)__pyx_v_tm))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  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_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_surface_, __pyx_t_9};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8563, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_surface_, __pyx_t_9};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8563, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_v_surface_);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_7, __pyx_v_surface_);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_7, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_surf = __pyx_t_1;
  __pyx_t_1 = 0;
+08564:                                               <int>tm +<int> (height + <int>tm)))
  __pyx_t_4 = __Pyx_PyInt_From_int((((int)__pyx_v_tm) + ((int)(__pyx_v_height + ((int)__pyx_v_tm))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
 08565:     cdef int new_width, new_height
+08566:     new_width, new_height = surf.get_size()
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_surf, __pyx_n_s_get_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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(1, 8566, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8566, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8566, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8566, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_9)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_5(__pyx_t_9); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_9); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_9), 2) < 0) __PYX_ERR(1, 8566, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 8566, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8566, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8566, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_new_width = __pyx_t_7;
  __pyx_v_new_height = __pyx_t_6;
 08567: 
+08568:     cdef int diff_x = display_width - new_width
  __pyx_v_diff_x = (__pyx_v_display_width - __pyx_v_new_width);
+08569:     cdef int diff_y = display_height_ - new_height
  __pyx_v_diff_y = (__pyx_v_display_height_ - __pyx_v_new_height);
 08570: 
+08571:     return surf, diff_x >> 1, diff_y >> 1
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_diff_x >> 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_diff_y >> 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_surf);
  __Pyx_GIVEREF(__pyx_v_surf);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_surf);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;
 08572: 
 08573: 
 08574: @cython.binding(False)
 08575: @cython.boundscheck(False)
 08576: @cython.wraparound(False)
 08577: @cython.nonecheck(False)
 08578: @cython.cdivision(False)
 08579: @cython.profile(False)
+08580: cpdef inline float lateral_dampening(int frame_, float amplitude_=50.0,
static PyObject *__pyx_pw_12PygameShader_6shader_179lateral_dampening(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE float __pyx_f_12PygameShader_6shader_lateral_dampening(int __pyx_v_frame_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_lateral_dampening *__pyx_optional_args) {
  float __pyx_v_amplitude_ = ((float)50.0);
  int __pyx_v_duration_ = ((int)30);
  float __pyx_v_freq_ = ((float)20.0);
  float __pyx_v_t;
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lateral_dampening", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amplitude_ = __pyx_optional_args->amplitude_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_duration_ = __pyx_optional_args->duration_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_freq_ = __pyx_optional_args->freq_;
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("PygameShader.shader.lateral_dampening", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_179lateral_dampening(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_178lateral_dampening[] = "\n    DAMPENING EFFECT\n\n    * This method return the lateral displacement (x)\n\n    e.g:\n    tm = lateral_dampening(frame, amplitude_=50.0, duration_=35, freq_=5.0)\n    SCREEN.blit(BCK, (tm, 0), special_flags=0)\n\n    Cython cpdef function, this function can be called directly and do not require a\n    hook function.\n\n    The length of the effect equal duration_ * freq_\n\n    :param frame_    : integer; Your game frame number\n    :param amplitude_: float; Represent the amplitude of the dampening effect.\n                       An amplitude of 1.0 will have no effect.Default value is 50.0\n    :param duration_ : float; This represent the duration of the effect, default value is 30\n    :param freq_     : float; change the speed of the effect default value is 20.0.\n                       A small value will decrease\n                       the overall timing of the effect while a larger value will increase the \n                       duration of the effect.\n    :return          : Return a float corresponding to the lateral displacement (x)\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_179lateral_dampening(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_frame_;
  float __pyx_v_amplitude_;
  int __pyx_v_duration_;
  float __pyx_v_freq_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lateral_dampening (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame_2,&__pyx_n_s_amplitude,&__pyx_n_s_duration,&__pyx_n_s_freq,0};
    PyObject* values[4] = {0,0,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  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_frame_2)) != 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_amplitude);
          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_duration);
          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_freq);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lateral_dampening") < 0)) __PYX_ERR(1, 8580, __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);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frame_ = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_frame_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8580, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_amplitude_ = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_amplitude_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 8580, __pyx_L3_error)
    } else {
      __pyx_v_amplitude_ = ((float)50.0);
    }
    if (values[2]) {
      __pyx_v_duration_ = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_duration_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8581, __pyx_L3_error)
    } else {
      __pyx_v_duration_ = ((int)30);
    }
    if (values[3]) {
      __pyx_v_freq_ = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_freq_ == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 8581, __pyx_L3_error)
    } else {
      __pyx_v_freq_ = ((float)20.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("lateral_dampening", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 8580, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.lateral_dampening", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_178lateral_dampening(__pyx_self, __pyx_v_frame_, __pyx_v_amplitude_, __pyx_v_duration_, __pyx_v_freq_);
  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_6shader_178lateral_dampening(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_frame_, float __pyx_v_amplitude_, int __pyx_v_duration_, float __pyx_v_freq_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lateral_dampening", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.amplitude_ = __pyx_v_amplitude_;
  __pyx_t_2.duration_ = __pyx_v_duration_;
  __pyx_t_2.freq_ = __pyx_v_freq_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_lateral_dampening(__pyx_v_frame_, 0, &__pyx_t_2); 
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("PygameShader.shader.lateral_dampening", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08581:                                      int duration_=30, float freq_=20.0):
 08582:     """
 08583:     DAMPENING EFFECT
 08584: 
 08585:     * This method return the lateral displacement (x)
 08586: 
 08587:     e.g:
 08588:     tm = lateral_dampening(frame, amplitude_=50.0, duration_=35, freq_=5.0)
 08589:     SCREEN.blit(BCK, (tm, 0), special_flags=0)
 08590: 
 08591:     Cython cpdef function, this function can be called directly and do not require a
 08592:     hook function.
 08593: 
 08594:     The length of the effect equal duration_ * freq_
 08595: 
 08596:     :param frame_    : integer; Your game frame number
 08597:     :param amplitude_: float; Represent the amplitude of the dampening effect.
 08598:                        An amplitude of 1.0 will have no effect.Default value is 50.0
 08599:     :param duration_ : float; This represent the duration of the effect, default value is 30
 08600:     :param freq_     : float; change the speed of the effect default value is 20.0.
 08601:                        A small value will decrease
 08602:                        the overall timing of the effect while a larger value will increase the
 08603:                        duration of the effect.
 08604:     :return          : Return a float corresponding to the lateral displacement (x)
 08605:     """
+08606:     assert freq_ > 0, "Argument freq_ must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_freq_ > 0.0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_freq__must_be_0);
      __PYX_ERR(1, 8606, __pyx_L1_error)
    }
  }
  #endif
+08607:     assert duration_ > 0, "Argument duration_ must be > 0"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_duration_ > 0) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_duration__must_be_0);
      __PYX_ERR(1, 8607, __pyx_L1_error)
    }
  }
  #endif
 08608: 
+08609:     cdef float t = damped_oscillation(<float>((<float>frame_ / freq_) % duration_)) * amplitude_
  if (unlikely(__pyx_v_freq_ == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(1, 8609, __pyx_L1_error)
  }
  __pyx_t_1 = (((float)__pyx_v_frame_) / __pyx_v_freq_);
  if (unlikely(__pyx_v_duration_ == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()");
    __PYX_ERR(1, 8609, __pyx_L1_error)
  }
  __pyx_v_t = (__pyx_f_12PygameShader_6shader_damped_oscillation(((float)__Pyx_mod_float(__pyx_t_1, __pyx_v_duration_))) * __pyx_v_amplitude_);
+08610:     return t
  __pyx_r = __pyx_v_t;
  goto __pyx_L0;
 08611: 
 08612: # --------------------------------------------------------------------------------------------------------
 08613: # KERNEL DEFINITION FOR SHARPEN ALGORITHM
+08614: cdef float [:, :] SHARPEN_KERNEL = numpy.array(([0, -1, 0],
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 8614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_array_2); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 8614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_30 = PyList_New(3); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 8614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_30, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyList_SET_ITEM(__pyx_t_30, 1, __pyx_int_neg_1);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_30, 2, __pyx_int_0);
/* … */
  __pyx_t_32 = PyTuple_New(3); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 8614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_GIVEREF(__pyx_t_30);
  PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_t_30);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_32, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_31);
  PyTuple_SET_ITEM(__pyx_t_32, 2, __pyx_t_31);
  __pyx_t_30 = 0;
  __pyx_t_2 = 0;
  __pyx_t_31 = 0;
  __pyx_t_31 = __Pyx_PyObject_CallOneArg(__pyx_t_33, __pyx_t_32); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 8614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
+08615:                       [-1, 5, -1],
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_int_neg_1);
  __Pyx_INCREF(__pyx_int_5);
  __Pyx_GIVEREF(__pyx_int_5);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_int_5);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_int_neg_1);
+08616:                       [0, -1, 0])).astype(dtype=float32)
  __pyx_t_31 = PyList_New(3); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 8616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_31, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyList_SET_ITEM(__pyx_t_31, 1, __pyx_int_neg_1);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyList_SET_ITEM(__pyx_t_31, 2, __pyx_int_0);
/* … */
  __pyx_t_32 = __Pyx_PyObject_GetAttrStr(__pyx_t_31, __pyx_n_s_astype); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 8616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  __pyx_t_31 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 8616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_float32); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 8616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  if (PyDict_SetItem(__pyx_t_31, __pyx_n_s_dtype, __pyx_t_33) < 0) __PYX_ERR(1, 8616, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __pyx_t_33 = __Pyx_PyObject_Call(__pyx_t_32, __pyx_empty_tuple, __pyx_t_31); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 8616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  __pyx_t_34 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_33, PyBUF_WRITABLE); if (unlikely(!__pyx_t_34.memview)) __PYX_ERR(1, 8616, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_12PygameShader_6shader_SHARPEN_KERNEL, 1);
  __pyx_v_12PygameShader_6shader_SHARPEN_KERNEL = __pyx_t_34;
  __pyx_t_34.memview = NULL;
  __pyx_t_34.data = NULL;
+08617: cdef int HALF_KERNEL = <int>len(SHARPEN_KERNEL) >> 1
  if (unlikely(!__pyx_v_12PygameShader_6shader_SHARPEN_KERNEL.memview)) { __Pyx_RaiseUnboundLocalError("SHARPEN_KERNEL"); __PYX_ERR(1, 8617, __pyx_L1_error) }
  __pyx_t_47 = __Pyx_MemoryView_Len(__pyx_v_12PygameShader_6shader_SHARPEN_KERNEL); 
  __pyx_v_12PygameShader_6shader_HALF_KERNEL = (((int)__pyx_t_47) >> 1);
 08618: 
 08619: @cython.binding(False)
 08620: @cython.binding(False)
 08621: @cython.boundscheck(False)
 08622: @cython.wraparound(False)
 08623: @cython.nonecheck(False)
 08624: @cython.cdivision(True)
 08625: @cython.profile(False)
+08626: cdef inline void shader_sharpen_filter_inplace_c(unsigned char [:, :, :] rgb_array_):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_shader_sharpen_filter_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array_) {
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb_array_1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_xx;
  int __pyx_v_yy;
  short __pyx_v_kernel_offset_y;
  short __pyx_v_kernel_offset_x;
  float __pyx_v_r;
  float __pyx_v_g;
  float __pyx_v_b;
  float __pyx_v_k;
  unsigned char *__pyx_v_rr;
  unsigned char *__pyx_v_gg;
  unsigned char *__pyx_v_bb;
  int __pyx_v_w_1;
  int __pyx_v_h_1;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shader_sharpen_filter_inplace_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.shader_sharpen_filter_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array_1, 1);
  __Pyx_RefNannyFinishContext();
}
 08627:         """
 08628:         SHARPEN IMAGE APPLYING THE BELOW 3 X 3 KERNEL OVER EVERY PIXELS.
 08629: 
 08630:         The Array (rgb_array) must be a numpy array shape (w, h, 3)
 08631:         containing RGB pixels, please refer to pygame
 08632:         function pixels3d or array3d to convert an image into a 3d array (library surfarray)
 08633: 
 08634:         pixels convoluted outside image edges will be set to adjacent edge value
 08635:         [0 , -1,  0]
 08636:         [-1,  5, -1]
 08637:         [0 , -1,  0]
 08638: 
 08639:         e.g
 08640:         sharpen(surface_)
 08641: 
 08642:         :param rgb_array_: numpy.ndarray shape (w, h, 3) containing all the RGB pixels
 08643:         :return          : void
 08644:         """
 08645: 
 08646:         # texture sizes
 08647:         cdef Py_ssize_t w, h
+08648:         w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 08649: 
 08650:         cdef:
 08651: 
+08652:             unsigned char [:, :, :] rgb_array_1 = numpy.empty((w, h, 3), uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_int_3);
  __pyx_t_5 = 0;
  __pyx_t_7 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_uint8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(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_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_7};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8652, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_7};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8652, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_7);
    __pyx_t_8 = 0;
    __pyx_t_7 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(1, 8652, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_rgb_array_1 = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
 08653:             int x, y, xx, yy
 08654:             short kernel_offset_y, kernel_offset_x
 08655:             float r, g, b, k
 08656:             unsigned char *rr
 08657:             unsigned char *gg
 08658:             unsigned char *bb
+08659:             int w_1 = <int>w - 1
  __pyx_v_w_1 = (((int)__pyx_v_w) - 1);
+08660:             int h_1 = <int>h - 1
  __pyx_v_h_1 = (((int)__pyx_v_h) - 1);
 08661: 
+08662:         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_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }
 08663: 
+08664:             for y in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_3 - 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_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset_x) lastprivate(__pyx_v_kernel_offset_y) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_3 - 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_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset_x) lastprivate(__pyx_v_kernel_offset_y) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_12; __pyx_t_2++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((float)__PYX_NAN());
                            __pyx_v_bb = ((unsigned char *)1);
                            __pyx_v_g = ((float)__PYX_NAN());
                            __pyx_v_gg = ((unsigned char *)1);
                            __pyx_v_k = ((float)__PYX_NAN());
                            __pyx_v_kernel_offset_x = ((short)0xbad0bad0);
                            __pyx_v_kernel_offset_y = ((short)0xbad0bad0);
                            __pyx_v_r = ((float)__PYX_NAN());
                            __pyx_v_rr = ((unsigned char *)1);
                            __pyx_v_x = ((int)0xbad0bad0);
                            __pyx_v_xx = ((int)0xbad0bad0);
                            __pyx_v_yy = ((int)0xbad0bad0);
 08665: 
+08666:                 for x in range(w):
                            __pyx_t_13 = __pyx_v_w;
                            __pyx_t_14 = __pyx_t_13;
                            for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_14; __pyx_t_9+=1) {
                              __pyx_v_x = __pyx_t_9;
 08667: 
+08668:                     rr = &rgb_array_1[x, y, <unsigned short int>0]
                              __pyx_t_15 = __pyx_v_x;
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)0);
                              __pyx_v_rr = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_1.data + __pyx_t_15 * __pyx_v_rgb_array_1.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_1.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_1.strides[2]) ))));
+08669:                     gg = &rgb_array_1[x, y, <unsigned short int>1]
                              __pyx_t_16 = __pyx_v_x;
                              __pyx_t_15 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)1);
                              __pyx_v_gg = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_1.data + __pyx_t_16 * __pyx_v_rgb_array_1.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_1.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_1.strides[2]) ))));
+08670:                     bb = &rgb_array_1[x, y, <unsigned short int>2]
                              __pyx_t_15 = __pyx_v_x;
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)2);
                              __pyx_v_bb = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_1.data + __pyx_t_15 * __pyx_v_rgb_array_1.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_1.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_1.strides[2]) ))));
 08671: 
+08672:                     r, g, b = <unsigned char>0, <unsigned char>0, <unsigned char>0
                              __pyx_t_18 = ((unsigned char)0);
                              __pyx_t_19 = ((unsigned char)0);
                              __pyx_t_20 = ((unsigned char)0);
                              __pyx_v_r = __pyx_t_18;
                              __pyx_v_g = __pyx_t_19;
                              __pyx_v_b = __pyx_t_20;
 08673: 
+08674:                     for kernel_offset_y in range(-HALF_KERNEL, HALF_KERNEL + <unsigned short int>1):
                              __pyx_t_21 = (__pyx_v_12PygameShader_6shader_HALF_KERNEL + ((unsigned short)1));
                              __pyx_t_22 = __pyx_t_21;
                              for (__pyx_t_23 = (-__pyx_v_12PygameShader_6shader_HALF_KERNEL); __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
                                __pyx_v_kernel_offset_y = __pyx_t_23;
 08675: 
+08676:                         for kernel_offset_x in range(-HALF_KERNEL, HALF_KERNEL + <unsigned short int>1):
                                __pyx_t_24 = (__pyx_v_12PygameShader_6shader_HALF_KERNEL + ((unsigned short)1));
                                __pyx_t_25 = __pyx_t_24;
                                for (__pyx_t_26 = (-__pyx_v_12PygameShader_6shader_HALF_KERNEL); __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                                  __pyx_v_kernel_offset_x = __pyx_t_26;
 08677: 
+08678:                             xx = x + kernel_offset_x
                                  __pyx_v_xx = (__pyx_v_x + __pyx_v_kernel_offset_x);
+08679:                             yy = y + kernel_offset_y
                                  __pyx_v_yy = (__pyx_v_y + __pyx_v_kernel_offset_y);
 08680: 
+08681:                             if xx < <unsigned short int>0:
                                  __pyx_t_27 = ((__pyx_v_xx < ((unsigned short)0)) != 0);
                                  if (__pyx_t_27) {
/* … */
                                    goto __pyx_L16;
                                  }
+08682:                                 xx = <unsigned short int>0
                                    __pyx_v_xx = ((unsigned short)0);
+08683:                             elif xx > w_1:
                                  __pyx_t_27 = ((__pyx_v_xx > __pyx_v_w_1) != 0);
                                  if (__pyx_t_27) {
/* … */
                                  }
                                  __pyx_L16:;
+08684:                                 xx = w_1
                                    __pyx_v_xx = __pyx_v_w_1;
 08685: 
+08686:                             if yy < <unsigned short int>0:
                                  __pyx_t_27 = ((__pyx_v_yy < ((unsigned short)0)) != 0);
                                  if (__pyx_t_27) {
/* … */
                                    goto __pyx_L17;
                                  }
+08687:                                 yy = <unsigned short int>0
                                    __pyx_v_yy = ((unsigned short)0);
+08688:                             elif yy > h_1:
                                  __pyx_t_27 = ((__pyx_v_yy > __pyx_v_h_1) != 0);
                                  if (__pyx_t_27) {
/* … */
                                  }
                                  __pyx_L17:;
+08689:                                 yy = h_1
                                    __pyx_v_yy = __pyx_v_h_1;
 08690: 
+08691:                             k = SHARPEN_KERNEL[kernel_offset_y + HALF_KERNEL,
                                  if (unlikely(!__pyx_v_12PygameShader_6shader_SHARPEN_KERNEL.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("SHARPEN_KERNEL"); __PYX_ERR(1, 8691, __pyx_L8_error) }
/* … */
                                  __pyx_t_16 = (__pyx_v_kernel_offset_y + __pyx_v_12PygameShader_6shader_HALF_KERNEL);
                                  __pyx_t_15 = (__pyx_v_kernel_offset_x + __pyx_v_12PygameShader_6shader_HALF_KERNEL);
                                  __pyx_v_k = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_12PygameShader_6shader_SHARPEN_KERNEL.data + __pyx_t_16 * __pyx_v_12PygameShader_6shader_SHARPEN_KERNEL.strides[0]) ) + __pyx_t_15 * __pyx_v_12PygameShader_6shader_SHARPEN_KERNEL.strides[1]) )));
 08692:                                                kernel_offset_x + HALF_KERNEL]
 08693: 
+08694:                             r = r + rgb_array_[xx, yy, <unsigned short int>0] * k
                                  __pyx_t_15 = __pyx_v_xx;
                                  __pyx_t_16 = __pyx_v_yy;
                                  __pyx_t_17 = ((unsigned short)0);
                                  __pyx_v_r = (__pyx_v_r + ((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[2]) ))) * __pyx_v_k));
+08695:                             g = g + rgb_array_[xx, yy, <unsigned short int>1] * k
                                  __pyx_t_16 = __pyx_v_xx;
                                  __pyx_t_15 = __pyx_v_yy;
                                  __pyx_t_17 = ((unsigned short)1);
                                  __pyx_v_g = (__pyx_v_g + ((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_16 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[2]) ))) * __pyx_v_k));
+08696:                             b = b + rgb_array_[xx, yy, <unsigned short int>2] * k
                                  __pyx_t_15 = __pyx_v_xx;
                                  __pyx_t_16 = __pyx_v_yy;
                                  __pyx_t_17 = ((unsigned short)2);
                                  __pyx_v_b = (__pyx_v_b + ((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_.strides[2]) ))) * __pyx_v_k));
                                }
                              }
 08697: 
+08698:                     if r < <unsigned short int>0:
                              __pyx_t_27 = ((__pyx_v_r < ((unsigned short)0)) != 0);
                              if (__pyx_t_27) {
/* … */
                              }
+08699:                         r = <unsigned short int>0
                                __pyx_v_r = ((unsigned short)0);
+08700:                     if g < <unsigned short int>0:
                              __pyx_t_27 = ((__pyx_v_g < ((unsigned short)0)) != 0);
                              if (__pyx_t_27) {
/* … */
                              }
+08701:                         g = <unsigned short int>0
                                __pyx_v_g = ((unsigned short)0);
+08702:                     if b < <unsigned short int>0:
                              __pyx_t_27 = ((__pyx_v_b < ((unsigned short)0)) != 0);
                              if (__pyx_t_27) {
/* … */
                              }
+08703:                         b = <unsigned short int>0
                                __pyx_v_b = ((unsigned short)0);
+08704:                     if r > <unsigned char>255:
                              __pyx_t_27 = ((__pyx_v_r > ((unsigned char)0xFF)) != 0);
                              if (__pyx_t_27) {
/* … */
                              }
+08705:                         r= <unsigned char>255
                                __pyx_v_r = ((unsigned char)0xFF);
+08706:                     if g > <unsigned char>255:
                              __pyx_t_27 = ((__pyx_v_g > ((unsigned char)0xFF)) != 0);
                              if (__pyx_t_27) {
/* … */
                              }
+08707:                         g = <unsigned char>255
                                __pyx_v_g = ((unsigned char)0xFF);
+08708:                     if b > <unsigned char>255:
                              __pyx_t_27 = ((__pyx_v_b > ((unsigned char)0xFF)) != 0);
                              if (__pyx_t_27) {
/* … */
                              }
+08709:                         b = <unsigned char>255
                                __pyx_v_b = ((unsigned char)0xFF);
 08710: 
+08711:                     rr[<unsigned short int>0] = <unsigned char>r
                              (__pyx_v_rr[((unsigned short)0)]) = ((unsigned char)__pyx_v_r);
+08712:                     gg[<unsigned short int>0] = <unsigned char>g
                              (__pyx_v_gg[((unsigned short)0)]) = ((unsigned char)__pyx_v_g);
+08713:                     bb[<unsigned short int>0] = <unsigned char>b
                              (__pyx_v_bb[((unsigned short)0)]) = ((unsigned char)__pyx_v_b);
                            }
                            goto __pyx_L25;
                            __pyx_L8_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L24;
                            __pyx_L24:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates11)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_b;
                                __pyx_parallel_temp1 = __pyx_v_bb;
                                __pyx_parallel_temp2 = __pyx_v_g;
                                __pyx_parallel_temp3 = __pyx_v_gg;
                                __pyx_parallel_temp4 = __pyx_v_k;
                                __pyx_parallel_temp5 = __pyx_v_kernel_offset_x;
                                __pyx_parallel_temp6 = __pyx_v_kernel_offset_y;
                                __pyx_parallel_temp7 = __pyx_v_r;
                                __pyx_parallel_temp8 = __pyx_v_rr;
                                __pyx_parallel_temp9 = __pyx_v_x;
                                __pyx_parallel_temp10 = __pyx_v_xx;
                                __pyx_parallel_temp11 = __pyx_v_y;
                                __pyx_parallel_temp12 = __pyx_v_yy;
                            }
                            __pyx_L25:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_b = __pyx_parallel_temp0;
              __pyx_v_bb = __pyx_parallel_temp1;
              __pyx_v_g = __pyx_parallel_temp2;
              __pyx_v_gg = __pyx_parallel_temp3;
              __pyx_v_k = __pyx_parallel_temp4;
              __pyx_v_kernel_offset_x = __pyx_parallel_temp5;
              __pyx_v_kernel_offset_y = __pyx_parallel_temp6;
              __pyx_v_r = __pyx_parallel_temp7;
              __pyx_v_rr = __pyx_parallel_temp8;
              __pyx_v_x = __pyx_parallel_temp9;
              __pyx_v_xx = __pyx_parallel_temp10;
              __pyx_v_y = __pyx_parallel_temp11;
              __pyx_v_yy = __pyx_parallel_temp12;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L4_error;
              }
            }
        }
        #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
 08714: 
+08715:             for y in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_12 = __pyx_v_h;
        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_12 - 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_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_12 = __pyx_v_h;
        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_12 - 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_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_x = ((int)0xbad0bad0);
 08716: 
+08717:                 for x in range(w):
                            __pyx_t_13 = __pyx_v_w;
                            __pyx_t_14 = __pyx_t_13;
                            for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_14; __pyx_t_9+=1) {
                              __pyx_v_x = __pyx_t_9;
+08718:                     rgb_array_[x, y, <unsigned short int>0] = rgb_array_1[x, y, <unsigned short int>0]
                              __pyx_t_16 = __pyx_v_x;
                              __pyx_t_15 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)0);
                              __pyx_t_28 = __pyx_v_x;
                              __pyx_t_29 = __pyx_v_y;
                              __pyx_t_30 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_28 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_29 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_30 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_1.data + __pyx_t_16 * __pyx_v_rgb_array_1.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_1.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_1.strides[2]) )));
+08719:                     rgb_array_[x, y, <unsigned short int>1] = rgb_array_1[x, y, <unsigned short int>1]
                              __pyx_t_15 = __pyx_v_x;
                              __pyx_t_16 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)1);
                              __pyx_t_29 = __pyx_v_x;
                              __pyx_t_28 = __pyx_v_y;
                              __pyx_t_30 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_29 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_28 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_30 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_1.data + __pyx_t_15 * __pyx_v_rgb_array_1.strides[0]) ) + __pyx_t_16 * __pyx_v_rgb_array_1.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_1.strides[2]) )));
+08720:                     rgb_array_[x, y, <unsigned short int>2] = rgb_array_1[x, y, <unsigned short int>2]
                              __pyx_t_16 = __pyx_v_x;
                              __pyx_t_15 = __pyx_v_y;
                              __pyx_t_17 = ((unsigned short)2);
                              __pyx_t_28 = __pyx_v_x;
                              __pyx_t_29 = __pyx_v_y;
                              __pyx_t_30 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_28 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_29 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_30 * __pyx_v_rgb_array_.strides[2]) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_1.data + __pyx_t_16 * __pyx_v_rgb_array_1.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array_1.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array_1.strides[2]) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 08721: 
 08722: 
 08723: # Added to version 1.0.1
 08724: @cython.binding(False)
 08725: @cython.binding(False)
 08726: @cython.boundscheck(False)
 08727: @cython.wraparound(False)
 08728: @cython.nonecheck(False)
 08729: @cython.cdivision(True)
 08730: @cython.profile(False)
+08731: cdef cartoon_effect(
static PyObject *__pyx_f_12PygameShader_6shader_cartoon_effect(PyObject *__pyx_v_surface_, int __pyx_v_sobel_threshold_, int __pyx_v_median_kernel_, CYTHON_UNUSED int __pyx_v_color_, int __pyx_v_flag_) {
  PyObject *__pyx_v_surface_branch_1 = NULL;
  PyObject *__pyx_v_array_ = NULL;
  PyObject *__pyx_v_e = NULL;
  __Pyx_memviewslice __pyx_v_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cartoon_effect", 0);
/* … */
  /* 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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_AddTraceback("PygameShader.shader.cartoon_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_surface_branch_1);
  __Pyx_XDECREF(__pyx_v_array_);
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_arr, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08732:         object surface_,
 08733:         int sobel_threshold_,
 08734:         int median_kernel_,
 08735:         int color_, int flag_):
 08736:     """
 08737: 
 08738:     :param surface_: pygame.Surface compatible 24 - 32 bit
 08739:     :param sobel_threshold_: integer sobel threshold
 08740:     :param median_kernel_  : integer median kernel
 08741:     :param color_          : integer; color reduction value (max color)
 08742:     :param flag_           : integer; Blend flag e.g (BLEND_RGB_ADD, BLEND_RGB_SUB,
 08743:                              BLEND_RGB_MULT, BLEND_RGB_MAX, BLEND_RGB_MIN
 08744:     :return               : Return a pygame Surface with the cartoon effect
 08745:     """
 08746: 
 08747:     # First branch from the surface_
 08748:     # surface_branch_1
+08749:     surface_branch_1 = surface_.copy()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 8749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_surface_branch_1 = __pyx_t_1;
  __pyx_t_1 = 0;
 08750: 
+08751:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __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;
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+08752:         array_ = pixels3d(surface_branch_1)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8752, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_surface_branch_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_surface_branch_1);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8752, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_array_ = __pyx_t_1;
      __pyx_t_1 = 0;
 08753: 
+08754:     except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader.cartoon_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(1, 8754, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __pyx_v_e = __pyx_t_2;
+08755:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_8 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8755, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8755, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_Raise(__pyx_t_9, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __PYX_ERR(1, 8755, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 08756: 
+08757:     shader_sobel24_inplace_c(array_, sobel_threshold_)
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(1, 8757, __pyx_L1_error)
  __pyx_t_11.__pyx_n = 1;
  __pyx_t_11.threshold = __pyx_v_sobel_threshold_;
  __pyx_f_12PygameShader_6shader_shader_sobel24_inplace_c(__pyx_t_10, &__pyx_t_11); 
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
 08758: 
 08759:     cdef unsigned char [:,:,:] arr
 08760:     # Second branch
+08761:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L16_try_end;
    __pyx_L11_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L16_try_end:;
  }
+08762:         arr = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8762, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8762, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(1, 8762, __pyx_L11_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_arr = __pyx_t_10;
      __pyx_t_10.memview = NULL;
      __pyx_t_10.data = NULL;
 08763: 
+08764:     except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader.cartoon_effect", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0) __PYX_ERR(1, 8764, __pyx_L13_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __pyx_v_e = __pyx_t_2;
+08765:         raise ValueError("Cannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_9 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels_i, __pyx_v_e); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8765, __pyx_L13_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8765, __pyx_L13_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(1, 8765, __pyx_L13_except_error)
    }
    goto __pyx_L13_except_error;
    __pyx_L13_except_error:;
 08766: 
 08767: 
+08768:     shader_median_filter24_inplace_heapsort_c(arr, median_kernel_)
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.kernel_size_ = __pyx_v_median_kernel_;
  __pyx_f_12PygameShader_6shader_shader_median_filter24_inplace_heapsort_c(__pyx_v_arr, &__pyx_t_12); 
 08769: 
 08770: 
+08771:     del arr
  __PYX_XDEC_MEMVIEW(&__pyx_v_arr, 1);
+08772:     surface_.blit(make_surface(array_), (0, 0), special_flags=flag_)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_blit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_8, __pyx_v_array_) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_array_);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_tuple__12);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_flag_); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_special_flags, __pyx_t_8) < 0) __PYX_ERR(1, 8772, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __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;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08773:     return surface_
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_surface_);
  __pyx_r = __pyx_v_surface_;
  goto __pyx_L0;
 08774: 
 08775: 
 08776: 
 08777: @cython.binding(False)
 08778: @cython.binding(False)
 08779: @cython.boundscheck(False)
 08780: @cython.wraparound(False)
 08781: @cython.nonecheck(False)
 08782: @cython.cdivision(True)
 08783: @cython.profile(False)
+08784: cdef object blending(object source_, unsigned char[:, :, :] destination_, float percentage_):
static PyObject *__pyx_f_12PygameShader_6shader_blending(PyObject *__pyx_v_source_, __Pyx_memviewslice __pyx_v_destination_, float __pyx_v_percentage_) {
  __Pyx_memviewslice __pyx_v_source_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  int __pyx_v_c1;
  int __pyx_v_c2;
  int __pyx_v_c3;
  int __pyx_v_i;
  int __pyx_v_j;
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  __Pyx_memviewslice __pyx_v_final_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_c4;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blending", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_28);
  __Pyx_AddTraceback("PygameShader.shader.blending", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_source_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_final_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08785:     """
 08786:     BLEND A SOURCE TEXTURE TOWARD A DESTINATION TEXTURE (TRANSITION EFFECT)
 08787: 
 08788:     * Video system must be initialised
 08789:     * source_ & destination_ Textures must be same sizes
 08790:     * Compatible with 24 - 32 bit surface
 08791:     * Output create a new surface
 08792:     * Image returned is converted for fast blit (convert())
 08793: 
 08794:     :param source_     : pygame.Surface (Source)
 08795:     :param destination_: pygame.Surface (Destination)
 08796:     :param percentage_ : float; Percentage value between [0.0 ... 100.0]
 08797:     :return: return    : Return a 24 bit pygame.Surface and blended with a percentage
 08798:                          of the destination texture.
 08799:     """
 08800: 
 08801:     cdef:
 08802:             unsigned char [:, :, :] source_array
 08803: 
+08804:     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_L8_try_end;
    __pyx_L3_error:;
    __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_XDEC_MEMVIEW(&__pyx_t_7, 1);
/* … */
    __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_L8_try_end:;
  }
+08805:         source_array      = pixels3d(source_)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8805, __pyx_L3_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_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_source_) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_source_);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8805, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 8805, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_source_array = __pyx_t_7;
      __pyx_t_7.memview = NULL;
      __pyx_t_7.data = NULL;
 08806: 
+08807:     except Exception as e:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("PygameShader.shader.blending", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(1, 8807, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __pyx_v_e = __pyx_t_5;
+08808:         raise ValueError("\nCannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_9 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels, __pyx_v_e); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8808, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8808, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 8808, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 08809: 
 08810:     cdef:
 08811: 
 08812:         int c1, c2, c3
+08813:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+08814:         Py_ssize_t w = source_array.shape[0]
  __pyx_v_w = (__pyx_v_source_array.shape[0]);
+08815:         Py_ssize_t h = source_array.shape[1]
  __pyx_v_h = (__pyx_v_source_array.shape[1]);
+08816:         unsigned char[:, :, ::1] final_array = empty((h, w, 3), dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_4);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_int_3);
  __pyx_t_5 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_uint8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(1, 8816, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_final_array = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
+08817:         float c4 = percentage_ / <float> 100.0
  __pyx_v_c4 = (__pyx_v_percentage_ / ((float)100.0));
 08818: 
 08819: 
+08820:     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_L13;
        }
        __pyx_L13:;
      }
  }
+08821:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_12 = __pyx_v_h;
        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_14 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_c3) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) schedule(static)
/* … */
        __pyx_t_12 = __pyx_v_h;
        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_14 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_c3) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_14; __pyx_t_13++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_13);
                            /* Initialize private variables to invalid values */
                            __pyx_v_c1 = ((int)0xbad0bad0);
                            __pyx_v_c2 = ((int)0xbad0bad0);
                            __pyx_v_c3 = ((int)0xbad0bad0);
                            __pyx_v_i = ((int)0xbad0bad0);
+08822:             for i in range(w):
                            __pyx_t_15 = __pyx_v_w;
                            __pyx_t_16 = __pyx_t_15;
                            for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_16; __pyx_t_8+=1) {
                              __pyx_v_i = __pyx_t_8;
 08823: 
+08824:                 c1 = min(<int> (<float> destination_[i, j, <unsigned short int>0] * c4 +
                              __pyx_t_18 = __pyx_v_i;
                              __pyx_t_19 = __pyx_v_j;
                              __pyx_t_20 = ((unsigned short)0);
/* … */
                              __pyx_t_24 = ((int)((((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_.data + __pyx_t_18 * __pyx_v_destination_.strides[0]) ) + __pyx_t_19 * __pyx_v_destination_.strides[1]) ) + __pyx_t_20 * __pyx_v_destination_.strides[2]) )))) * __pyx_v_c4) + ((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_21 * __pyx_v_source_array.strides[0]) ) + __pyx_t_22 * __pyx_v_source_array.strides[1]) ) + __pyx_t_23 * __pyx_v_source_array.strides[2]) ))) * (((float)1.0) - __pyx_v_c4))));
+08825:                                 source_array[i, j, <unsigned short int>0] * (<float> 1.0 - c4)),
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_23 = ((unsigned short)0);
+08826:                          <unsigned char>255)
                              __pyx_t_17 = ((unsigned char)0xFF);
/* … */
                              if (((__pyx_t_17 < __pyx_t_24) != 0)) {
                                __pyx_t_25 = __pyx_t_17;
                              } else {
                                __pyx_t_25 = __pyx_t_24;
                              }
                              __pyx_v_c1 = __pyx_t_25;
+08827:                 c2 = min(<int> (<float> destination_[i, j, <unsigned short int>1] * c4 +
                              __pyx_t_22 = __pyx_v_i;
                              __pyx_t_21 = __pyx_v_j;
                              __pyx_t_23 = ((unsigned short)1);
/* … */
                              __pyx_t_25 = ((int)((((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_.data + __pyx_t_22 * __pyx_v_destination_.strides[0]) ) + __pyx_t_21 * __pyx_v_destination_.strides[1]) ) + __pyx_t_23 * __pyx_v_destination_.strides[2]) )))) * __pyx_v_c4) + ((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_19 * __pyx_v_source_array.strides[0]) ) + __pyx_t_18 * __pyx_v_source_array.strides[1]) ) + __pyx_t_20 * __pyx_v_source_array.strides[2]) ))) * (((float)1.0) - __pyx_v_c4))));
+08828:                                 source_array[i, j, <unsigned short int>1] * (<float> 1.0 - c4)),
                              __pyx_t_19 = __pyx_v_i;
                              __pyx_t_18 = __pyx_v_j;
                              __pyx_t_20 = ((unsigned short)1);
+08829:                          <unsigned char>255)
                              __pyx_t_17 = ((unsigned char)0xFF);
/* … */
                              if (((__pyx_t_17 < __pyx_t_25) != 0)) {
                                __pyx_t_24 = __pyx_t_17;
                              } else {
                                __pyx_t_24 = __pyx_t_25;
                              }
                              __pyx_v_c2 = __pyx_t_24;
+08830:                 c3 = min(<int> (<float> destination_[i, j, <unsigned short int>2] * c4 +
                              __pyx_t_18 = __pyx_v_i;
                              __pyx_t_19 = __pyx_v_j;
                              __pyx_t_20 = ((unsigned short)2);
/* … */
                              __pyx_t_24 = ((int)((((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_.data + __pyx_t_18 * __pyx_v_destination_.strides[0]) ) + __pyx_t_19 * __pyx_v_destination_.strides[1]) ) + __pyx_t_20 * __pyx_v_destination_.strides[2]) )))) * __pyx_v_c4) + ((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_21 * __pyx_v_source_array.strides[0]) ) + __pyx_t_22 * __pyx_v_source_array.strides[1]) ) + __pyx_t_23 * __pyx_v_source_array.strides[2]) ))) * (((float)1.0) - __pyx_v_c4))));
+08831:                                 source_array[i, j, <unsigned short int>2] * (<float> 1.0 - c4)),
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_23 = ((unsigned short)2);
+08832:                          <unsigned char>255)
                              __pyx_t_17 = ((unsigned char)0xFF);
/* … */
                              if (((__pyx_t_17 < __pyx_t_24) != 0)) {
                                __pyx_t_25 = __pyx_t_17;
                              } else {
                                __pyx_t_25 = __pyx_t_24;
                              }
                              __pyx_v_c3 = __pyx_t_25;
+08833:                 if c1 < <int>0:
                              __pyx_t_26 = ((__pyx_v_c1 < ((int)0)) != 0);
                              if (__pyx_t_26) {
/* … */
                              }
+08834:                     c1 = <int>0
                                __pyx_v_c1 = ((int)0);
+08835:                 if c2 < <int>0:
                              __pyx_t_26 = ((__pyx_v_c2 < ((int)0)) != 0);
                              if (__pyx_t_26) {
/* … */
                              }
+08836:                     c2 = <int>0
                                __pyx_v_c2 = ((int)0);
+08837:                 if c3 < <int>0:
                              __pyx_t_26 = ((__pyx_v_c3 < ((int)0)) != 0);
                              if (__pyx_t_26) {
/* … */
                              }
+08838:                     c3 = <int>0
                                __pyx_v_c3 = ((int)0);
+08839:                 final_array[j, i, <unsigned short int>0] = c1
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_23 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_final_array.data + __pyx_t_22 * __pyx_v_final_array.strides[0]) ) + __pyx_t_21 * __pyx_v_final_array.strides[1]) )) + __pyx_t_23)) )) = __pyx_v_c1;
+08840:                 final_array[j, i, <unsigned short int>1] = c2
                              __pyx_t_21 = __pyx_v_j;
                              __pyx_t_22 = __pyx_v_i;
                              __pyx_t_23 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_final_array.data + __pyx_t_21 * __pyx_v_final_array.strides[0]) ) + __pyx_t_22 * __pyx_v_final_array.strides[1]) )) + __pyx_t_23)) )) = __pyx_v_c2;
+08841:                 final_array[j, i, <unsigned short int>2] = c3
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_23 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_final_array.data + __pyx_t_22 * __pyx_v_final_array.strides[0]) ) + __pyx_t_21 * __pyx_v_final_array.strides[1]) )) + __pyx_t_23)) )) = __pyx_v_c3;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 08842: 
+08843:     return frombuffer(final_array, (w, h), 'RGB').convert()
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_final_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(1, 8843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_27 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 8843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __pyx_t_28 = PyTuple_New(2); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 8843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_27);
  PyTuple_SET_ITEM(__pyx_t_28, 1, __pyx_t_27);
  __pyx_t_9 = 0;
  __pyx_t_27 = 0;
  __pyx_t_27 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_27)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_27);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[4] = {__pyx_t_27, __pyx_t_6, __pyx_t_28, __pyx_n_s_RGB};
    __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8843, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[4] = {__pyx_t_27, __pyx_t_6, __pyx_t_28, __pyx_n_s_RGB};
    __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8843, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_27) {
      __Pyx_GIVEREF(__pyx_t_27); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_27); __pyx_t_27 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_28);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_28);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_8, __pyx_n_s_RGB);
    __pyx_t_6 = 0;
    __pyx_t_28 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_convert); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8843, __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;
 08844: 
 08845: 
 08846: @cython.binding(False)
 08847: @cython.boundscheck(False)
 08848: @cython.wraparound(False)
 08849: @cython.nonecheck(False)
 08850: @cython.cdivision(True)
 08851: @cython.profile(False)
+08852: cdef object blending_inplace(
static PyObject *__pyx_f_12PygameShader_6shader_blending_inplace(PyObject *__pyx_v_source_, __Pyx_memviewslice __pyx_v_destination_, float __pyx_v_percentage_) {
  __Pyx_memviewslice __pyx_v_source_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tmp_array_ = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  unsigned char __pyx_v_c1;
  unsigned char __pyx_v_c2;
  unsigned char __pyx_v_c3;
  int __pyx_v_i;
  int __pyx_v_j;
  CYTHON_UNUSED Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  float __pyx_v_c4;
  unsigned char __pyx_v_r;
  unsigned char __pyx_v_g;
  unsigned char __pyx_v_b;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blending_inplace", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_AddTraceback("PygameShader.shader.blending_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_source_array, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tmp_array_, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08853:         object source_,
 08854:         unsigned char[:, :, :] destination_,
 08855:         float percentage_
 08856:        ):
 08857:     """
 08858:     BLEND A SOURCE TEXTURE TOWARD A DESTINATION TEXTURE (TRANSITION EFFECT)
 08859: 
 08860:     * Video system must be initialised
 08861:     * source_ & destination_ Textures must be same sizes
 08862:     * Compatible with 24 - 32 bit surface
 08863:     * Output create a new surface
 08864:     * Image returned is converted for fast blit (convert())
 08865: 
 08866:     :param source_     : pygame.Surface (Source)
 08867:     :param destination_: 3d array, numpy.ndarray  (Destination)
 08868:     :param percentage_ : float; Percentage value between [0.0 ... 100.0]
 08869:     :return: return    : Return a 24 bit pygame.Surface and blended with a percentage
 08870:                          of the destination texture.
 08871:     """
 08872: 
 08873:     cdef:
 08874:             unsigned char [:, :, :] source_array
 08875:             unsigned char[ :, :, : ] tmp_array_
+08876:     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_L8_try_end;
    __pyx_L3_error:;
    __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_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
/* … */
    __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_L8_try_end:;
  }
 08877: 
+08878:         source_array  =  pixels3d(source_.copy())
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8878, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_copy); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8878, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8878, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8878, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 8878, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_source_array = __pyx_t_9;
      __pyx_t_9.memview = NULL;
      __pyx_t_9.data = NULL;
+08879:         tmp_array_ =  pixels3d(source_)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8879, __pyx_L3_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_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_source_) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_source_);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8879, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 8879, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_tmp_array_ = __pyx_t_9;
      __pyx_t_9.memview = NULL;
      __pyx_t_9.data = NULL;
+08880:     except Exception as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("PygameShader.shader.blending_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(1, 8880, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __pyx_v_e = __pyx_t_5;
+08881:         raise ValueError("\nCannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels, __pyx_v_e); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8881, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8881, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(1, 8881, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 08882: 
 08883: 
 08884:     cdef:
 08885: 
 08886:         unsigned char c1, c2, c3
+08887:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+08888:         Py_ssize_t w = source_array.shape[0]
  __pyx_v_w = (__pyx_v_source_array.shape[0]);
+08889:         Py_ssize_t h = source_array.shape[1]
  __pyx_v_h = (__pyx_v_source_array.shape[1]);
+08890:         float c4 = percentage_ / <float> 100.0
  __pyx_v_c4 = (__pyx_v_percentage_ / ((float)100.0));
 08891:         unsigned char r
 08892:         unsigned char g
 08893:         unsigned char b
 08894: 
+08895:     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_L13;
        }
        __pyx_L13:;
      }
  }
 08896: 
+08897:         for i in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_11 = __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_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_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_c3) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static)
/* … */
        __pyx_t_11 = __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_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_c1) lastprivate(__pyx_v_c2) lastprivate(__pyx_v_c3) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #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_b = ((unsigned char)'?');
                            __pyx_v_c1 = ((unsigned char)'?');
                            __pyx_v_c2 = ((unsigned char)'?');
                            __pyx_v_c3 = ((unsigned char)'?');
                            __pyx_v_g = ((unsigned char)'?');
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char)'?');
+08898:             for j in range(h):
                            __pyx_t_14 = __pyx_v_h;
                            __pyx_t_15 = __pyx_t_14;
                            for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_15; __pyx_t_10+=1) {
                              __pyx_v_j = __pyx_t_10;
 08899: 
+08900:                 r = source_array[i, j, 0]
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 0;
                              __pyx_v_r = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_16 * __pyx_v_source_array.strides[0]) ) + __pyx_t_17 * __pyx_v_source_array.strides[1]) ) + __pyx_t_18 * __pyx_v_source_array.strides[2]) )));
+08901:                 g = source_array[i, j, 1]
                              __pyx_t_18 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = 1;
                              __pyx_v_g = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_18 * __pyx_v_source_array.strides[0]) ) + __pyx_t_17 * __pyx_v_source_array.strides[1]) ) + __pyx_t_16 * __pyx_v_source_array.strides[2]) )));
+08902:                 b = source_array[i, j, 2]
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 2;
                              __pyx_v_b = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_16 * __pyx_v_source_array.strides[0]) ) + __pyx_t_17 * __pyx_v_source_array.strides[1]) ) + __pyx_t_18 * __pyx_v_source_array.strides[2]) )));
 08903: 
+08904:                 c1 = min(<unsigned char> (<float> destination_[i, j, 0] * c4 +
                              __pyx_t_18 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = 0;
/* … */
                              __pyx_t_20 = ((unsigned char)((((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_.data + __pyx_t_18 * __pyx_v_destination_.strides[0]) ) + __pyx_t_17 * __pyx_v_destination_.strides[1]) ) + __pyx_t_16 * __pyx_v_destination_.strides[2]) )))) * __pyx_v_c4) + (__pyx_v_r * (((float)1.0) - __pyx_v_c4))));
+08905:                                 r * (<float> 1.0 - c4)), <unsigned char>255)
                              __pyx_t_19 = ((unsigned char)0xFF);
                              if (((__pyx_t_19 < __pyx_t_20) != 0)) {
                                __pyx_t_21 = __pyx_t_19;
                              } else {
                                __pyx_t_21 = __pyx_t_20;
                              }
                              __pyx_v_c1 = __pyx_t_21;
+08906:                 c2 = min(<unsigned char> (<float> destination_[i, j, 1] * c4 +
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 1;
/* … */
                              __pyx_t_19 = ((unsigned char)((((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_.data + __pyx_t_16 * __pyx_v_destination_.strides[0]) ) + __pyx_t_17 * __pyx_v_destination_.strides[1]) ) + __pyx_t_18 * __pyx_v_destination_.strides[2]) )))) * __pyx_v_c4) + (__pyx_v_g * (((float)1.0) - __pyx_v_c4))));
+08907:                                 g * (<float> 1.0 - c4)), <unsigned char>255)
                              __pyx_t_21 = ((unsigned char)0xFF);
                              if (((__pyx_t_21 < __pyx_t_19) != 0)) {
                                __pyx_t_20 = __pyx_t_21;
                              } else {
                                __pyx_t_20 = __pyx_t_19;
                              }
                              __pyx_v_c2 = __pyx_t_20;
+08908:                 c3 = min(<unsigned char> (<float> destination_[i, j, 2] * c4 +
                              __pyx_t_18 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = 2;
/* … */
                              __pyx_t_21 = ((unsigned char)((((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_.data + __pyx_t_18 * __pyx_v_destination_.strides[0]) ) + __pyx_t_17 * __pyx_v_destination_.strides[1]) ) + __pyx_t_16 * __pyx_v_destination_.strides[2]) )))) * __pyx_v_c4) + (__pyx_v_b * (((float)1.0) - __pyx_v_c4))));
+08909:                                 b * (<float> 1.0 - c4)), <unsigned char>255)
                              __pyx_t_20 = ((unsigned char)0xFF);
                              if (((__pyx_t_20 < __pyx_t_21) != 0)) {
                                __pyx_t_19 = __pyx_t_20;
                              } else {
                                __pyx_t_19 = __pyx_t_21;
                              }
                              __pyx_v_c3 = __pyx_t_19;
+08910:                 if c1 < 0:
                              __pyx_t_22 = ((__pyx_v_c1 < 0) != 0);
                              if (__pyx_t_22) {
/* … */
                              }
+08911:                     c1 = 0
                                __pyx_v_c1 = 0;
+08912:                 if c2 < 0:
                              __pyx_t_22 = ((__pyx_v_c2 < 0) != 0);
                              if (__pyx_t_22) {
/* … */
                              }
+08913:                     c2 = 0
                                __pyx_v_c2 = 0;
+08914:                 if c3 < 0:
                              __pyx_t_22 = ((__pyx_v_c3 < 0) != 0);
                              if (__pyx_t_22) {
/* … */
                              }
+08915:                     c3 = 0
                                __pyx_v_c3 = 0;
 08916: 
+08917:                 tmp_array_[ i, j, 0 ] = c1
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_tmp_array_.data + __pyx_t_16 * __pyx_v_tmp_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_tmp_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_tmp_array_.strides[2]) )) = __pyx_v_c1;
+08918:                 tmp_array_[ i, j, 1 ] = c2
                              __pyx_t_18 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_tmp_array_.data + __pyx_t_18 * __pyx_v_tmp_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_tmp_array_.strides[1]) ) + __pyx_t_16 * __pyx_v_tmp_array_.strides[2]) )) = __pyx_v_c2;
+08919:                 tmp_array_[ i, j, 2 ] = c3
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_tmp_array_.data + __pyx_t_16 * __pyx_v_tmp_array_.strides[0]) ) + __pyx_t_17 * __pyx_v_tmp_array_.strides[1]) ) + __pyx_t_18 * __pyx_v_tmp_array_.strides[2]) )) = __pyx_v_c3;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 08920: 
 08921: 
 08922: 
 08923: 
 08924: # new version 1.0.5
 08925: @cython.binding(False)
 08926: @cython.binding(False)
 08927: @cython.boundscheck(False)
 08928: @cython.wraparound(False)
 08929: @cython.nonecheck(False)
 08930: @cython.cdivision(True)
 08931: @cython.profile(False)
+08932: cpdef object alpha_blending(object source_, object destination_):
static PyObject *__pyx_pw_12PygameShader_6shader_181alpha_blending(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_alpha_blending(PyObject *__pyx_v_source_, PyObject *__pyx_v_destination_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_source_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_destination_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_w;
  int __pyx_v_h;
  PyObject *__pyx_v_e = NULL;
  float __pyx_v_rr;
  float __pyx_v_gg;
  float __pyx_v_bb;
  float __pyx_v_alpha;
  float __pyx_v_tmp;
  int __pyx_v_i;
  int __pyx_v_l;
  __Pyx_memviewslice __pyx_v_final_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  float *__pyx_v_r;
  float *__pyx_v_g;
  float *__pyx_v_b;
  float *__pyx_v_a;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("alpha_blending", 0);
/* … */
  /* 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_11);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_AddTraceback("PygameShader.shader.alpha_blending", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_source_array, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_destination_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_final_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_181alpha_blending(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_180alpha_blending[] = "\n    ALPHA BLENDING \n\n    * Video system must be initialised \n    * source_ & destination_ Textures must be same sizes\n    * Compatible with 32 bit surfaces only\n    * Output create a new surface\n    * Image returned is converted for fast blit (convert())\n\n    :param source_     : pygame.Surface (Source) 32-bit with alpha channel\n    :param destination_: pygame.Surface (Destination) 32-bit with alpha channel\n    :return: return    : Return a 24 bit pygame.Surface with alpha blending\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_181alpha_blending(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_source_ = 0;
  PyObject *__pyx_v_destination_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("alpha_blending (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_destination,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_source)) != 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_destination)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("alpha_blending", 1, 2, 2, 1); __PYX_ERR(1, 8932, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "alpha_blending") < 0)) __PYX_ERR(1, 8932, __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_source_ = values[0];
    __pyx_v_destination_ = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("alpha_blending", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 8932, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.alpha_blending", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_180alpha_blending(__pyx_self, __pyx_v_source_, __pyx_v_destination_);
  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_6shader_180alpha_blending(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_source_, PyObject *__pyx_v_destination_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("alpha_blending", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_alpha_blending(__pyx_v_source_, __pyx_v_destination_, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8932, __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.shader.alpha_blending", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08933:     """
 08934:     ALPHA BLENDING
 08935: 
 08936:     * Video system must be initialised
 08937:     * source_ & destination_ Textures must be same sizes
 08938:     * Compatible with 32 bit surfaces only
 08939:     * Output create a new surface
 08940:     * Image returned is converted for fast blit (convert())
 08941: 
 08942:     :param source_     : pygame.Surface (Source) 32-bit with alpha channel
 08943:     :param destination_: pygame.Surface (Destination) 32-bit with alpha channel
 08944:     :return: return    : Return a 24 bit pygame.Surface with alpha blending
 08945:     """
 08946: 
 08947:     cdef:
 08948:             float [:] source_array
 08949:             float [:] destination_array
 08950:             int w, h
 08951: 
+08952:     w, h = source_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 8952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 8952, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8952, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8952, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 8952, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 8952, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 8952, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8952, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8952, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 08953: 
 08954:     # source & destination array are normalized
+08955:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L1_error;
    __pyx_L10_try_end:;
  }
+08956:         source_array      = (numpy.frombuffer(source_.get_view('0').raw,
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8956, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8956, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_get_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8956, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_kp_s_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_0);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8956, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_raw); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8956, __pyx_L5_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(1, 8956, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8956, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+08957:                                               dtype=numpy.uint8) / <float>255.0).astype(dtype=numpy.float32)
      __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
      __pyx_t_2 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_11, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_numpy); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(1, 8957, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_source_array = __pyx_t_12;
      __pyx_t_12.memview = NULL;
      __pyx_t_12.data = NULL;
 08958: 
+08959:     except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader.alpha_blending", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(1, 8959, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+08960:         raise ValueError("\nCannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_11 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels, __pyx_v_e); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8960, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8960, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 8960, __pyx_L7_except_error)
    }
    goto __pyx_L7_except_error;
    __pyx_L7_except_error:;
 08961: 
+08962:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L18_try_end;
    __pyx_L13_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
    goto __pyx_L1_error;
    __pyx_L18_try_end:;
  }
+08963:         destination_array = (numpy.frombuffer(destination_.get_view('0').raw,
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8963, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8963, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_destination_, __pyx_n_s_get_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8963, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(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_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_0) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_0);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8963, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_raw); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8963, __pyx_L13_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(1, 8963, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
      __pyx_t_3 = 0;
/* … */
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8963, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08964:                                               dtype=numpy.uint8) / <float>255.0).astype(dtype=numpy.float32)
      __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
      __pyx_t_3 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_numpy); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(1, 8964, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_destination_array = __pyx_t_12;
      __pyx_t_12.memview = NULL;
      __pyx_t_12.data = NULL;
 08965: 
+08966:     except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader.alpha_blending", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(1, 8966, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __pyx_v_e = __pyx_t_2;
+08967:         raise ValueError("\nCannot reference destination pixels into a 3d array.\n %s " % e)
      __pyx_t_11 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_destination_pi, __pyx_v_e); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8967, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8967, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 8967, __pyx_L15_except_error)
    }
    goto __pyx_L15_except_error;
    __pyx_L15_except_error:;
 08968: 
 08969:     cdef:
 08970: 
 08971:         float rr, gg, bb, alpha, tmp
+08972:         int i=0
  __pyx_v_i = 0;
+08973:         int l = w * h * 4
  __pyx_v_l = ((__pyx_v_w * __pyx_v_h) * 4);
+08974:         unsigned char[:] final_array = empty(l, dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_l); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(1, 8974, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(1, 8974, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_final_array = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
 08975: 
 08976: 
 08977:         float *r
 08978:         float *g
 08979:         float *b
 08980:         float *a
 08981: 
+08982:     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_L23;
        }
        __pyx_L23:;
      }
  }
 08983:         # noinspection SpellCheckingInspection
+08984:         for i in prange(0, l, 4, schedule='static', num_threads=THREADS):
        __pyx_t_7 = __pyx_v_l;
        if ((4 == 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_15 = (__pyx_t_7 - 0 + 4 - 4/abs(4)) / 4;
            if (__pyx_t_15 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_a) lastprivate(__pyx_v_alpha) lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_tmp) schedule(static)
/* … */
        __pyx_t_7 = __pyx_v_l;
        if ((4 == 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_15 = (__pyx_t_7 - 0 + 4 - 4/abs(4)) / 4;
            if (__pyx_t_15 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_a) lastprivate(__pyx_v_alpha) lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_tmp) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_15; __pyx_t_14++){
                        {
                            __pyx_v_i = (int)(0 + 4 * __pyx_t_14);
                            /* Initialize private variables to invalid values */
                            __pyx_v_a = ((float *)1);
                            __pyx_v_alpha = ((float)__PYX_NAN());
                            __pyx_v_b = ((float *)1);
                            __pyx_v_bb = ((float)__PYX_NAN());
                            __pyx_v_g = ((float *)1);
                            __pyx_v_gg = ((float)__PYX_NAN());
                            __pyx_v_r = ((float *)1);
                            __pyx_v_rr = ((float)__PYX_NAN());
                            __pyx_v_tmp = ((float)__PYX_NAN());
 08985: 
+08986:                 r = &source_array[i+2]
                            __pyx_t_16 = (__pyx_v_i + 2);
                            __pyx_v_r = (&(*((float *) ( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_16 * __pyx_v_source_array.strides[0]) ))));
+08987:                 g = &source_array[i+1]
                            __pyx_t_16 = (__pyx_v_i + 1);
                            __pyx_v_g = (&(*((float *) ( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_16 * __pyx_v_source_array.strides[0]) ))));
+08988:                 b = &source_array[i]
                            __pyx_t_16 = __pyx_v_i;
                            __pyx_v_b = (&(*((float *) ( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_16 * __pyx_v_source_array.strides[0]) ))));
+08989:                 a = &source_array[i+3]
                            __pyx_t_16 = (__pyx_v_i + 3);
                            __pyx_v_a = (&(*((float *) ( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_16 * __pyx_v_source_array.strides[0]) ))));
 08990: 
 08991:                 # premult with alpha
+08992:                 r[0] = r[0] * a[0]
                            (__pyx_v_r[0]) = ((__pyx_v_r[0]) * (__pyx_v_a[0]));
+08993:                 g[0] = g[0] * a[0]
                            (__pyx_v_g[0]) = ((__pyx_v_g[0]) * (__pyx_v_a[0]));
+08994:                 b[0] = b[0] * a[0]
                            (__pyx_v_b[0]) = ((__pyx_v_b[0]) * (__pyx_v_a[0]));
 08995: 
+08996:                 tmp = (<float>1.0 - a[0]) * destination_array[i+3]
                            __pyx_t_16 = (__pyx_v_i + 3);
                            __pyx_v_tmp = ((((float)1.0) - (__pyx_v_a[0])) * (*((float *) ( /* dim=0 */ (__pyx_v_destination_array.data + __pyx_t_16 * __pyx_v_destination_array.strides[0]) ))));
+08997:                 alpha = a[0] + tmp
                            __pyx_v_alpha = ((__pyx_v_a[0]) + __pyx_v_tmp);
 08998: 
 08999:                 # premult with alpha
+09000:                 rr = r[0] + destination_array[i+2] *  tmp
                            __pyx_t_16 = (__pyx_v_i + 2);
                            __pyx_v_rr = ((__pyx_v_r[0]) + ((*((float *) ( /* dim=0 */ (__pyx_v_destination_array.data + __pyx_t_16 * __pyx_v_destination_array.strides[0]) ))) * __pyx_v_tmp));
+09001:                 gg = g[0] + destination_array[i+1] *  tmp
                            __pyx_t_16 = (__pyx_v_i + 1);
                            __pyx_v_gg = ((__pyx_v_g[0]) + ((*((float *) ( /* dim=0 */ (__pyx_v_destination_array.data + __pyx_t_16 * __pyx_v_destination_array.strides[0]) ))) * __pyx_v_tmp));
+09002:                 bb = b[0] + destination_array[i  ] *  tmp
                            __pyx_t_16 = __pyx_v_i;
                            __pyx_v_bb = ((__pyx_v_b[0]) + ((*((float *) ( /* dim=0 */ (__pyx_v_destination_array.data + __pyx_t_16 * __pyx_v_destination_array.strides[0]) ))) * __pyx_v_tmp));
 09003: 
 09004:                 # back to [0 ... 255]
+09005:                 final_array[i]   = <unsigned char>min(rr * <float>255.0, <unsigned char>255)
                            __pyx_t_17 = ((unsigned char)0xFF);
                            __pyx_t_18 = (__pyx_v_rr * ((float)255.0));
                            if (((__pyx_t_17 < __pyx_t_18) != 0)) {
                              __pyx_t_19 = __pyx_t_17;
                            } else {
                              __pyx_t_19 = __pyx_t_18;
                            }
                            __pyx_t_16 = __pyx_v_i;
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_final_array.data + __pyx_t_16 * __pyx_v_final_array.strides[0]) )) = ((unsigned char)__pyx_t_19);
+09006:                 final_array[i+1] = <unsigned char>min(gg * <float>255.0, <unsigned char>255)
                            __pyx_t_17 = ((unsigned char)0xFF);
                            __pyx_t_19 = (__pyx_v_gg * ((float)255.0));
                            if (((__pyx_t_17 < __pyx_t_19) != 0)) {
                              __pyx_t_18 = __pyx_t_17;
                            } else {
                              __pyx_t_18 = __pyx_t_19;
                            }
                            __pyx_t_16 = (__pyx_v_i + 1);
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_final_array.data + __pyx_t_16 * __pyx_v_final_array.strides[0]) )) = ((unsigned char)__pyx_t_18);
+09007:                 final_array[i+2] = <unsigned char>min(bb * <float>255.0, <unsigned char>255)
                            __pyx_t_17 = ((unsigned char)0xFF);
                            __pyx_t_18 = (__pyx_v_bb * ((float)255.0));
                            if (((__pyx_t_17 < __pyx_t_18) != 0)) {
                              __pyx_t_19 = __pyx_t_17;
                            } else {
                              __pyx_t_19 = __pyx_t_18;
                            }
                            __pyx_t_16 = (__pyx_v_i + 2);
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_final_array.data + __pyx_t_16 * __pyx_v_final_array.strides[0]) )) = ((unsigned char)__pyx_t_19);
+09008:                 final_array[i+3] = <unsigned char>min(alpha * <float>255.0, <unsigned char>255)
                            __pyx_t_17 = ((unsigned char)0xFF);
                            __pyx_t_19 = (__pyx_v_alpha * ((float)255.0));
                            if (((__pyx_t_17 < __pyx_t_19) != 0)) {
                              __pyx_t_18 = __pyx_t_17;
                            } else {
                              __pyx_t_18 = __pyx_t_19;
                            }
                            __pyx_t_16 = (__pyx_v_i + 3);
                            *((unsigned char *) ( /* dim=0 */ (__pyx_v_final_array.data + __pyx_t_16 * __pyx_v_final_array.strides[0]) )) = ((unsigned char)__pyx_t_18);
                        }
                    }
                }
            }
        }
        #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
      }
 09009: 
+09010:     return pygame.image.frombuffer(numpy.asarray(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_image); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_n_s_numpy); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 9010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
/* … */
  __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_n_s_asarray); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 9010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+09011:         final_array).reshape(w, h, 4), (w, h), 'RGBA').convert()
  __pyx_t_20 = __pyx_memoryview_fromslice(__pyx_v_final_array, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_22 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_21))) {
    __pyx_t_22 = PyMethod_GET_SELF(__pyx_t_21);
    if (likely(__pyx_t_22)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
      __Pyx_INCREF(__pyx_t_22);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_21, function);
    }
  }
  __pyx_t_11 = (__pyx_t_22) ? __Pyx_PyObject_Call2Args(__pyx_t_21, __pyx_t_22, __pyx_t_20) : __Pyx_PyObject_CallOneArg(__pyx_t_21, __pyx_t_20);
  __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 9010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_reshape); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_20 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_22 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_21))) {
    __pyx_t_22 = PyMethod_GET_SELF(__pyx_t_21);
    if (likely(__pyx_t_22)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
      __Pyx_INCREF(__pyx_t_22);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_21, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_21)) {
    PyObject *__pyx_temp[4] = {__pyx_t_22, __pyx_t_11, __pyx_t_20, __pyx_int_4};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_21, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9011, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_21)) {
    PyObject *__pyx_temp[4] = {__pyx_t_22, __pyx_t_11, __pyx_t_20, __pyx_int_4};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_21, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9011, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  } else
  #endif
  {
    __pyx_t_23 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 9011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_23);
    if (__pyx_t_22) {
      __Pyx_GIVEREF(__pyx_t_22); PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_22); __pyx_t_22 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_23, 0+__pyx_t_7, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_20);
    PyTuple_SET_ITEM(__pyx_t_23, 1+__pyx_t_7, __pyx_t_20);
    __Pyx_INCREF(__pyx_int_4);
    __Pyx_GIVEREF(__pyx_int_4);
    PyTuple_SET_ITEM(__pyx_t_23, 2+__pyx_t_7, __pyx_int_4);
    __pyx_t_11 = 0;
    __pyx_t_20 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_t_23, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
  }
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  __pyx_t_21 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_23 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __pyx_t_20 = PyTuple_New(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_21);
  PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_21);
  __Pyx_GIVEREF(__pyx_t_23);
  PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_t_23);
  __pyx_t_21 = 0;
  __pyx_t_23 = 0;
  __pyx_t_23 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_23)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_23);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_23, __pyx_t_3, __pyx_t_20, __pyx_n_s_RGBA};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9010, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_23, __pyx_t_3, __pyx_t_20, __pyx_n_s_RGBA};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9010, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  } else
  #endif
  {
    __pyx_t_21 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 9010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    if (__pyx_t_23) {
      __Pyx_GIVEREF(__pyx_t_23); PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_23); __pyx_t_23 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_21, 0+__pyx_t_7, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_20);
    PyTuple_SET_ITEM(__pyx_t_21, 1+__pyx_t_7, __pyx_t_20);
    __Pyx_INCREF(__pyx_n_s_RGBA);
    __Pyx_GIVEREF(__pyx_n_s_RGBA);
    PyTuple_SET_ITEM(__pyx_t_21, 2+__pyx_t_7, __pyx_n_s_RGBA);
    __pyx_t_3 = 0;
    __pyx_t_20 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_21, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_convert); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 09012: 
 09013: # new version 1.0.5
 09014: @cython.binding(False)
 09015: @cython.binding(False)
 09016: @cython.boundscheck(False)
 09017: @cython.wraparound(False)
 09018: @cython.nonecheck(False)
 09019: @cython.cdivision(True)
 09020: @cython.profile(False)
+09021: cpdef void alpha_blending_inplace(object source_, object destination_):
static PyObject *__pyx_pw_12PygameShader_6shader_183alpha_blending_inplace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static void __pyx_f_12PygameShader_6shader_alpha_blending_inplace(PyObject *__pyx_v_source_, PyObject *__pyx_v_destination_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_source_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_destination_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dest_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dest_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_w;
  CYTHON_UNUSED int __pyx_v_h;
  PyObject *__pyx_v_source_rgb = NULL;
  PyObject *__pyx_v_source_alpha = NULL;
  PyObject *__pyx_v_e = NULL;
  float __pyx_v_rr;
  float __pyx_v_gg;
  float __pyx_v_bb;
  float __pyx_v_alpha;
  float __pyx_v_tmp;
  int __pyx_v_i;
  int __pyx_v_j;
  float *__pyx_v_r;
  float *__pyx_v_g;
  float *__pyx_v_b;
  float *__pyx_v_a;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("alpha_blending_inplace", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_XDECREF(__pyx_t_12);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_WriteUnraisable("PygameShader.shader.alpha_blending_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_source_array, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_destination_array, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dest_rgb, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dest_alpha, 1);
  __Pyx_XDECREF(__pyx_v_source_rgb);
  __Pyx_XDECREF(__pyx_v_source_alpha);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_183alpha_blending_inplace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_182alpha_blending_inplace[] = "\n    ALPHA BLENDING INPLACE\n\n    * Video system must be initialised \n    * source_ & destination_ Textures must be same sizes\n    * Compatible with 32 bit surfaces only\n    * Output create a new surface\n    * Image returned is converted for fast blit (convert())\n\n    :param source_     : pygame.Surface (Source) 32-bit with alpha channel\n    :param destination_: pygame.Surface (Destination) 32-bit with alpha channel\n    :return: return    : Return a 24 bit pygame.Surface with alpha blending\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_183alpha_blending_inplace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_source_ = 0;
  PyObject *__pyx_v_destination_ = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("alpha_blending_inplace (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_destination,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_source)) != 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_destination)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("alpha_blending_inplace", 1, 2, 2, 1); __PYX_ERR(1, 9021, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "alpha_blending_inplace") < 0)) __PYX_ERR(1, 9021, __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_source_ = values[0];
    __pyx_v_destination_ = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("alpha_blending_inplace", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 9021, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.alpha_blending_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_182alpha_blending_inplace(__pyx_self, __pyx_v_source_, __pyx_v_destination_);
  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_6shader_182alpha_blending_inplace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_source_, PyObject *__pyx_v_destination_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("alpha_blending_inplace", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_alpha_blending_inplace(__pyx_v_source_, __pyx_v_destination_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9021, __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.shader.alpha_blending_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09022:     """
 09023:     ALPHA BLENDING INPLACE
 09024: 
 09025:     * Video system must be initialised
 09026:     * source_ & destination_ Textures must be same sizes
 09027:     * Compatible with 32 bit surfaces only
 09028:     * Output create a new surface
 09029:     * Image returned is converted for fast blit (convert())
 09030: 
 09031:     :param source_     : pygame.Surface (Source) 32-bit with alpha channel
 09032:     :param destination_: pygame.Surface (Destination) 32-bit with alpha channel
 09033:     :return: return    : Return a 24 bit pygame.Surface with alpha blending
 09034:     """
 09035: 
 09036:     cdef:
 09037:             float [:, :, :] source_array
 09038:             float [:, :, :] destination_array
 09039:             unsigned char [:, :, :] dest_rgb
 09040:             unsigned char [:, :] dest_alpha
 09041:             int w, h
 09042: 
+09043:     w, h = source_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 9043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 9043, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 9043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 9043, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 9043, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9043, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9043, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 09044: 
 09045:     # source & destination array are normalized
+09046:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L1_error;
    __pyx_L10_try_end:;
  }
+09047:         source_rgb = (pixels3d(source_)/<float>255.0)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9047, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_source_) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_source_);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9047, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9047, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9047, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_source_rgb = __pyx_t_2;
      __pyx_t_2 = 0;
+09048:         source_alpha = (pixels_alpha(source_)/<float>255.0)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pixels_alpha); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9048, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = NULL;
      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_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_v_source_) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_source_);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9048, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9048, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9048, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_source_alpha = __pyx_t_1;
      __pyx_t_1 = 0;
+09049:         source_array = numpy.dstack((source_rgb, source_alpha)).astype(dtype=numpy.float32)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dstack); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_source_rgb);
      __Pyx_GIVEREF(__pyx_v_source_rgb);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_source_rgb);
      __Pyx_INCREF(__pyx_v_source_alpha);
      __Pyx_GIVEREF(__pyx_v_source_alpha);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_source_alpha);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9049, __pyx_L5_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_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(1, 9049, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_source_array = __pyx_t_11;
      __pyx_t_11.memview = NULL;
      __pyx_t_11.data = NULL;
 09050: 
+09051:     except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader.alpha_blending_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(1, 9051, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+09052:         raise ValueError("\nCannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels, __pyx_v_e); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9052, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 9052, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_Raise(__pyx_t_12, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __PYX_ERR(1, 9052, __pyx_L7_except_error)
    }
    goto __pyx_L7_except_error;
    __pyx_L7_except_error:;
 09053: 
+09054:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L18_try_end;
    __pyx_L13_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
    __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
    goto __pyx_L1_error;
    __pyx_L18_try_end:;
  }
+09055:         dest_rgb = pixels3d(destination_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9055, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_destination_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_destination_);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9055, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(1, 9055, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_dest_rgb = __pyx_t_13;
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
+09056:         dest_alpha = pixels_alpha(destination_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels_alpha); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9056, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_destination_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_destination_);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9056, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(1, 9056, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_dest_alpha = __pyx_t_14;
      __pyx_t_14.memview = NULL;
      __pyx_t_14.data = NULL;
+09057:         destination_array = (numpy.dstack(
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9057, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dstack); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9057, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09058:             (numpy.asarray(dest_rgb), numpy.asarray(dest_alpha)))/<float>255.0).astype(dtype=numpy.float32)
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_numpy); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = __pyx_memoryview_fromslice(__pyx_v_dest_rgb, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_15 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_15)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_15, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_numpy); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_asarray); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = __pyx_memoryview_fromslice(__pyx_v_dest_alpha, 2, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_16 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
        __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_15);
        if (likely(__pyx_t_16)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
          __Pyx_INCREF(__pyx_t_16);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_15, function);
        }
      }
      __pyx_t_3 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_16, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_3);
      __pyx_t_1 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_15);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9057, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_15 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_astype); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_15 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(1, 9058, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_destination_array = __pyx_t_11;
      __pyx_t_11.memview = NULL;
      __pyx_t_11.data = NULL;
 09059: 
 09060: 
+09061:     except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader.alpha_blending_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_15, &__pyx_t_4) < 0) __PYX_ERR(1, 9061, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_15);
      __pyx_v_e = __pyx_t_15;
+09062:         raise ValueError("\nCannot reference destination pixels into a 3d array.\n %s " % e)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_destination_pi, __pyx_v_e); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9062, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9062, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 9062, __pyx_L15_except_error)
    }
    goto __pyx_L15_except_error;
    __pyx_L15_except_error:;
 09063: 
 09064:     cdef:
 09065: 
 09066:         float rr, gg, bb, alpha, tmp
+09067:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 09068: 
 09069:         float *r
 09070:         float *g
 09071:         float *b
 09072:         float *a
 09073: 
+09074:     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_L23;
        }
        __pyx_L23:;
      }
  }
 09075:         # noinspection SpellCheckingInspection
+09076:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_7 = __pyx_v_h;
        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_17 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_a) lastprivate(__pyx_v_alpha) lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_tmp) schedule(static)
/* … */
        __pyx_t_7 = __pyx_v_h;
        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_17 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_a) lastprivate(__pyx_v_alpha) lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_tmp) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_17; __pyx_t_6++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_6);
                            /* Initialize private variables to invalid values */
                            __pyx_v_a = ((float *)1);
                            __pyx_v_alpha = ((float)__PYX_NAN());
                            __pyx_v_b = ((float *)1);
                            __pyx_v_bb = ((float)__PYX_NAN());
                            __pyx_v_g = ((float *)1);
                            __pyx_v_gg = ((float)__PYX_NAN());
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_r = ((float *)1);
                            __pyx_v_rr = ((float)__PYX_NAN());
                            __pyx_v_tmp = ((float)__PYX_NAN());
+09077:             for i in range(w):
                            __pyx_t_18 = __pyx_v_w;
                            __pyx_t_19 = __pyx_t_18;
                            for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
                              __pyx_v_i = __pyx_t_20;
+09078:                 r = &source_array[i, j, 0]
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_23 = 0;
                              __pyx_v_r = (&(*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_21 * __pyx_v_source_array.strides[0]) ) + __pyx_t_22 * __pyx_v_source_array.strides[1]) ) + __pyx_t_23 * __pyx_v_source_array.strides[2]) ))));
+09079:                 g = &source_array[i, j, 1]
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_21 = 1;
                              __pyx_v_g = (&(*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_23 * __pyx_v_source_array.strides[0]) ) + __pyx_t_22 * __pyx_v_source_array.strides[1]) ) + __pyx_t_21 * __pyx_v_source_array.strides[2]) ))));
+09080:                 b = &source_array[i, j, 2]
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_23 = 2;
                              __pyx_v_b = (&(*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_21 * __pyx_v_source_array.strides[0]) ) + __pyx_t_22 * __pyx_v_source_array.strides[1]) ) + __pyx_t_23 * __pyx_v_source_array.strides[2]) ))));
+09081:                 a = &source_array[i, j, 3]
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_21 = 3;
                              __pyx_v_a = (&(*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_source_array.data + __pyx_t_23 * __pyx_v_source_array.strides[0]) ) + __pyx_t_22 * __pyx_v_source_array.strides[1]) ) + __pyx_t_21 * __pyx_v_source_array.strides[2]) ))));
 09082: 
 09083:                 # premult with alpha
+09084:                 r[0] = r[0] * a[0]
                              (__pyx_v_r[0]) = ((__pyx_v_r[0]) * (__pyx_v_a[0]));
+09085:                 g[0] = g[0] * a[0]
                              (__pyx_v_g[0]) = ((__pyx_v_g[0]) * (__pyx_v_a[0]));
+09086:                 b[0] = b[0] * a[0]
                              (__pyx_v_b[0]) = ((__pyx_v_b[0]) * (__pyx_v_a[0]));
 09087: 
+09088:                 tmp = (<float>1.0 - a[0]) * destination_array[i, j, 3]
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_23 = 3;
                              __pyx_v_tmp = ((((float)1.0) - (__pyx_v_a[0])) * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_array.data + __pyx_t_21 * __pyx_v_destination_array.strides[0]) ) + __pyx_t_22 * __pyx_v_destination_array.strides[1]) ) + __pyx_t_23 * __pyx_v_destination_array.strides[2]) ))));
+09089:                 alpha = a[0] + tmp
                              __pyx_v_alpha = ((__pyx_v_a[0]) + __pyx_v_tmp);
 09090: 
 09091:                 # premult with alpha
+09092:                 rr = r[0] + destination_array[i, j, 0] *  tmp
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_21 = 0;
                              __pyx_v_rr = ((__pyx_v_r[0]) + ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_array.data + __pyx_t_23 * __pyx_v_destination_array.strides[0]) ) + __pyx_t_22 * __pyx_v_destination_array.strides[1]) ) + __pyx_t_21 * __pyx_v_destination_array.strides[2]) ))) * __pyx_v_tmp));
+09093:                 gg = g[0] + destination_array[i, j, 1] *  tmp
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_23 = 1;
                              __pyx_v_gg = ((__pyx_v_g[0]) + ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_array.data + __pyx_t_21 * __pyx_v_destination_array.strides[0]) ) + __pyx_t_22 * __pyx_v_destination_array.strides[1]) ) + __pyx_t_23 * __pyx_v_destination_array.strides[2]) ))) * __pyx_v_tmp));
+09094:                 bb = b[0] + destination_array[i, j, 2] *  tmp
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_21 = 2;
                              __pyx_v_bb = ((__pyx_v_b[0]) + ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_destination_array.data + __pyx_t_23 * __pyx_v_destination_array.strides[0]) ) + __pyx_t_22 * __pyx_v_destination_array.strides[1]) ) + __pyx_t_21 * __pyx_v_destination_array.strides[2]) ))) * __pyx_v_tmp));
 09095: 
 09096:                 # back to [0 ... 255]
+09097:                 dest_rgb[i, j, 0] = <unsigned char>min(rr * <float>255.0, <unsigned char>255)
                              __pyx_t_24 = ((unsigned char)0xFF);
                              __pyx_t_25 = (__pyx_v_rr * ((float)255.0));
                              if (((__pyx_t_24 < __pyx_t_25) != 0)) {
                                __pyx_t_26 = __pyx_t_24;
                              } else {
                                __pyx_t_26 = __pyx_t_25;
                              }
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_23 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_dest_rgb.data + __pyx_t_21 * __pyx_v_dest_rgb.strides[0]) ) + __pyx_t_22 * __pyx_v_dest_rgb.strides[1]) ) + __pyx_t_23 * __pyx_v_dest_rgb.strides[2]) )) = ((unsigned char)__pyx_t_26);
+09098:                 dest_rgb[i, j, 1] = <unsigned char>min(gg * <float>255.0, <unsigned char>255)
                              __pyx_t_24 = ((unsigned char)0xFF);
                              __pyx_t_26 = (__pyx_v_gg * ((float)255.0));
                              if (((__pyx_t_24 < __pyx_t_26) != 0)) {
                                __pyx_t_25 = __pyx_t_24;
                              } else {
                                __pyx_t_25 = __pyx_t_26;
                              }
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_21 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_dest_rgb.data + __pyx_t_23 * __pyx_v_dest_rgb.strides[0]) ) + __pyx_t_22 * __pyx_v_dest_rgb.strides[1]) ) + __pyx_t_21 * __pyx_v_dest_rgb.strides[2]) )) = ((unsigned char)__pyx_t_25);
+09099:                 dest_rgb[i, j, 2] = <unsigned char>min(bb * <float>255.0, <unsigned char>255)
                              __pyx_t_24 = ((unsigned char)0xFF);
                              __pyx_t_25 = (__pyx_v_bb * ((float)255.0));
                              if (((__pyx_t_24 < __pyx_t_25) != 0)) {
                                __pyx_t_26 = __pyx_t_24;
                              } else {
                                __pyx_t_26 = __pyx_t_25;
                              }
                              __pyx_t_21 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              __pyx_t_23 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_dest_rgb.data + __pyx_t_21 * __pyx_v_dest_rgb.strides[0]) ) + __pyx_t_22 * __pyx_v_dest_rgb.strides[1]) ) + __pyx_t_23 * __pyx_v_dest_rgb.strides[2]) )) = ((unsigned char)__pyx_t_26);
+09100:                 dest_alpha[i, j] = <unsigned char>min(alpha * <float>255.0, <unsigned char>255)
                              __pyx_t_24 = ((unsigned char)0xFF);
                              __pyx_t_26 = (__pyx_v_alpha * ((float)255.0));
                              if (((__pyx_t_24 < __pyx_t_26) != 0)) {
                                __pyx_t_25 = __pyx_t_24;
                              } else {
                                __pyx_t_25 = __pyx_t_26;
                              }
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_22 = __pyx_v_j;
                              *((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_dest_alpha.data + __pyx_t_23 * __pyx_v_dest_alpha.strides[0]) ) + __pyx_t_22 * __pyx_v_dest_alpha.strides[1]) )) = ((unsigned char)__pyx_t_25);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 09101: 
 09102: 
 09103: 
 09104: 
 09105: @cython.binding(False)
 09106: @cython.binding(False)
 09107: @cython.boundscheck(False)
 09108: @cython.wraparound(False)
 09109: @cython.nonecheck(False)
 09110: @cython.cdivision(True)
 09111: @cython.profile(False)
+09112: cdef inline void dirt_lens_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_dirt_lens_c(PyObject *__pyx_v_source_, PyObject *__pyx_v_lens_model_, int __pyx_v_flag_, struct __pyx_opt_args_12PygameShader_6shader_dirt_lens_c *__pyx_optional_args) {
  float __pyx_v_light_ = ((float)0.0);
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dirt_lens_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_light_ = __pyx_optional_args->light_;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_WriteUnraisable("PygameShader.shader.dirt_lens_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_dirt_lens_c {
  int __pyx_n;
  float light_;
};
 09113:         object source_,
 09114:         object lens_model_,
 09115:         int flag_,
 09116:         float light_=0.0):
 09117: 
+09118:     if light_!=0.0:
  __pyx_t_1 = ((__pyx_v_light_ != 0.0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+09119:         brightness(lens_model_, light_)
    __pyx_f_12PygameShader_6shader_brightness(__pyx_v_lens_model_, __pyx_v_light_, 0);
+09120:     source_.blit(lens_model_, (0, 0), special_flags=flag_)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_source_, __pyx_n_s_blit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_lens_model_);
  __Pyx_GIVEREF(__pyx_v_lens_model_);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lens_model_);
  __Pyx_INCREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_tuple__12);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_flag_); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 9120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_special_flags, __pyx_t_5) < 0) __PYX_ERR(1, 9120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 9120, __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_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 09121: 
 09122: 
 09123: # TODO DITHERING WITH KERNEL INSTEAD
 09124: @cython.binding(False)
 09125: @cython.binding(False)
 09126: @cython.boundscheck(False)
 09127: @cython.wraparound(False)
 09128: @cython.nonecheck(False)
 09129: @cython.cdivision(True)
 09130: @cython.profile(False)
+09131: cdef object dithering_c(float [:, :, :] rgb_array_):
static PyObject *__pyx_f_12PygameShader_6shader_dithering_c(__Pyx_memviewslice __pyx_v_rgb_array_) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_x;
  int __pyx_v_y;
  float __pyx_v_new_red;
  float __pyx_v_new_green;
  float __pyx_v_new_blue;
  float __pyx_v_quantization_error_red;
  float __pyx_v_quantization_error_green;
  float __pyx_v_quantization_error_blue;
  float __pyx_v_oldr;
  float __pyx_v_oldg;
  float __pyx_v_oldb;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dithering_c", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("PygameShader.shader.dithering_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09132: 
 09133:     """
 09134:     Dithering is used in computer graphics to create the illusion of "color depth" in images with
 09135:     a limited color palette - a technique also known as color quantization. In a dithered image,
 09136:     colors that are not available in the palette are approximated by a diffusion of colored pixels
 09137:     from within the available palette. The human eye perceives the diffusion as a mixture of
 09138:     the colors within it (see color vision). Dithered images, particularly those with relatively
 09139:     few colors, can often be distinguished by a characteristic graininess or speckled appearance.
 09140: 
 09141:     :param rgb_array_: pygame.Surface compatible 24-32 bit
 09142: 
 09143:     A value of 2 means a total of 8 colors
 09144:     :return: pygame surface 24-32 bit
 09145:     """
 09146: 
 09147:     cdef Py_ssize_t w, h
+09148:     w = <object> rgb_array_.shape[ 0 ] - 1
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_rgb_array_.shape[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_w = __pyx_t_3;
+09149:     h = <object> rgb_array_.shape[ 1 ] - 1
  __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_rgb_array_.shape[1])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_t_2, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_h = __pyx_t_3;
 09150: 
 09151:     cdef:
+09152:         int x=0, y=0
  __pyx_v_x = 0;
  __pyx_v_y = 0;
 09153:         float new_red, new_green, new_blue
 09154:         float quantization_error_red, quantization_error_green, quantization_error_blue
 09155:         float oldr, oldg, oldb
 09156: 
+09157:     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:;
      }
  }
 09158: 
+09159:         for y in prange(1, h, schedule='static', num_threads=THREADS, chunksize=h*3):
        __pyx_t_3 = __pyx_v_h;
        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_5 = (__pyx_t_3 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_new_blue) lastprivate(__pyx_v_new_green) lastprivate(__pyx_v_new_red) lastprivate(__pyx_v_oldb) lastprivate(__pyx_v_oldg) lastprivate(__pyx_v_oldr) lastprivate(__pyx_v_quantization_error_blue) lastprivate(__pyx_v_quantization_error_green) lastprivate(__pyx_v_quantization_error_red) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y)            __pyx_t_6 = (__pyx_v_h * 3);
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_5 = (__pyx_t_3 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_new_blue) lastprivate(__pyx_v_new_green) lastprivate(__pyx_v_new_red) lastprivate(__pyx_v_oldb) lastprivate(__pyx_v_oldg) lastprivate(__pyx_v_oldr) lastprivate(__pyx_v_quantization_error_blue) lastprivate(__pyx_v_quantization_error_green) lastprivate(__pyx_v_quantization_error_red) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static, __pyx_t_6) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_5; __pyx_t_4++){
                        {
                            __pyx_v_y = (int)(1 + 1 * __pyx_t_4);
                            /* Initialize private variables to invalid values */
                            __pyx_v_new_blue = ((float)__PYX_NAN());
                            __pyx_v_new_green = ((float)__PYX_NAN());
                            __pyx_v_new_red = ((float)__PYX_NAN());
                            __pyx_v_oldb = ((float)__PYX_NAN());
                            __pyx_v_oldg = ((float)__PYX_NAN());
                            __pyx_v_oldr = ((float)__PYX_NAN());
                            __pyx_v_quantization_error_blue = ((float)__PYX_NAN());
                            __pyx_v_quantization_error_green = ((float)__PYX_NAN());
                            __pyx_v_quantization_error_red = ((float)__PYX_NAN());
                            __pyx_v_x = ((int)0xbad0bad0);
 09160: 
+09161:             for x in range(1, w):
                            __pyx_t_7 = __pyx_v_w;
                            __pyx_t_8 = __pyx_t_7;
                            for (__pyx_t_9 = 1; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
                              __pyx_v_x = __pyx_t_9;
 09162: 
+09163:                 oldr = rgb_array_[x, y, 0]
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = 0;
                              __pyx_v_oldr = (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )));
+09164:                 oldg = rgb_array_[x, y, 1]
                              __pyx_t_12 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_10 = 1;
                              __pyx_v_oldg = (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )));
+09165:                 oldb = rgb_array_[x, y, 2]
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = 2;
                              __pyx_v_oldb = (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )));
 09166: 
+09167:                 new_red   = <float>round_c(oldr)
                              __pyx_v_new_red = ((float)round(__pyx_v_oldr));
+09168:                 new_green = <float>round_c(oldg)
                              __pyx_v_new_green = ((float)round(__pyx_v_oldg));
+09169:                 new_blue  = <float>round_c(oldb)
                              __pyx_v_new_blue = ((float)round(__pyx_v_oldb));
 09170: 
+09171:                 rgb_array_[x, y, 0] = new_red
                              __pyx_t_12 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_10 = 0;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_v_new_red;
+09172:                 rgb_array_[x, y, 1] = new_green
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = 1;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_v_new_green;
+09173:                 rgb_array_[x, y, 2] = new_blue
                              __pyx_t_12 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_10 = 2;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_v_new_blue;
 09174: 
+09175:                 quantization_error_red   = <float>(oldr - new_red)
                              __pyx_v_quantization_error_red = ((float)(__pyx_v_oldr - __pyx_v_new_red));
+09176:                 quantization_error_green = <float>(oldg - new_green)
                              __pyx_v_quantization_error_green = ((float)(__pyx_v_oldg - __pyx_v_new_green));
+09177:                 quantization_error_blue  = <float>(oldb - new_blue)
                              __pyx_v_quantization_error_blue = ((float)(__pyx_v_oldb - __pyx_v_new_blue));
 09178: 
+09179:                 rgb_array_[x + 1, y, 0] = \
                              __pyx_t_13 = (__pyx_v_x + 1);
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = 0;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_red * __pyx_v_12PygameShader_6shader_C1));
+09180:                     rgb_array_[x + 1, y, 0] + quantization_error_red * C1
                              __pyx_t_10 = (__pyx_v_x + 1);
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = 0;
+09181:                 rgb_array_[x + 1, y, 1] = \
                              __pyx_t_15 = (__pyx_v_x + 1);
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_13 = 1;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_green * __pyx_v_12PygameShader_6shader_C1));
+09182:                     rgb_array_[x + 1, y, 1] + quantization_error_green * C1
                              __pyx_t_12 = (__pyx_v_x + 1);
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_10 = 1;
+09183:                 rgb_array_[x + 1, y, 2] = \
                              __pyx_t_13 = (__pyx_v_x + 1);
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = 2;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_blue * __pyx_v_12PygameShader_6shader_C1));
+09184:                     rgb_array_[x + 1, y, 2] + quantization_error_blue * C1
                              __pyx_t_10 = (__pyx_v_x + 1);
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = 2;
 09185: 
+09186:                 rgb_array_[x - 1, y + 1, 0] = \
                              __pyx_t_15 = (__pyx_v_x - 1);
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_13 = 0;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_red * __pyx_v_12PygameShader_6shader_C2));
+09187:                     rgb_array_[x - 1, y + 1, 0] + quantization_error_red * C2
                              __pyx_t_12 = (__pyx_v_x - 1);
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_10 = 0;
+09188:                 rgb_array_[x - 1, y + 1, 1] = \
                              __pyx_t_13 = (__pyx_v_x - 1);
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_15 = 1;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_green * __pyx_v_12PygameShader_6shader_C2));
+09189:                     rgb_array_[x - 1, y + 1, 1] + quantization_error_green * C2
                              __pyx_t_10 = (__pyx_v_x - 1);
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_12 = 1;
+09190:                 rgb_array_[x - 1, y + 1, 2] = \
                              __pyx_t_15 = (__pyx_v_x - 1);
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_13 = 2;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_blue * __pyx_v_12PygameShader_6shader_C2));
+09191:                     rgb_array_[x - 1, y + 1, 2] + quantization_error_blue * C2
                              __pyx_t_12 = (__pyx_v_x - 1);
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_10 = 2;
 09192: 
+09193:                 rgb_array_[x, y + 1, 0] = \
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_15 = 0;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_red * __pyx_v_12PygameShader_6shader_C3));
+09194:                     rgb_array_[x, y + 1, 0] + quantization_error_red * C3
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_12 = 0;
+09195:                 rgb_array_[x, y + 1, 1] = \
                              __pyx_t_15 = __pyx_v_x;
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_13 = 1;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_green * __pyx_v_12PygameShader_6shader_C3));
+09196:                     rgb_array_[x, y + 1, 1] + quantization_error_green * C3
                              __pyx_t_12 = __pyx_v_x;
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_10 = 1;
+09197:                 rgb_array_[x, y + 1, 2] = \
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_15 = 2;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_blue * __pyx_v_12PygameShader_6shader_C3));
+09198:                     rgb_array_[x, y + 1, 2] + quantization_error_blue * C3
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_12 = 2;
 09199: 
+09200:                 rgb_array_[x + 1, y + 1, 0] = \
                              __pyx_t_15 = (__pyx_v_x + 1);
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_13 = 0;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_red * __pyx_v_12PygameShader_6shader_C4));
+09201:                     rgb_array_[x + 1, y + 1, 0] + quantization_error_red * C4
                              __pyx_t_12 = (__pyx_v_x + 1);
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_10 = 0;
+09202:                 rgb_array_[x + 1, y + 1, 1] = \
                              __pyx_t_13 = (__pyx_v_x + 1);
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_15 = 1;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_green * __pyx_v_12PygameShader_6shader_C4));
+09203:                     rgb_array_[x + 1, y + 1, 1] + quantization_error_green * C4
                              __pyx_t_10 = (__pyx_v_x + 1);
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_12 = 1;
+09204:                 rgb_array_[x + 1, y + 1, 2] = \
                              __pyx_t_15 = (__pyx_v_x + 1);
                              __pyx_t_14 = (__pyx_v_y + 1);
                              __pyx_t_13 = 2;
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_15 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_12 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_blue * __pyx_v_12PygameShader_6shader_C4));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+09205:                     rgb_array_[x + 1, y + 1, 2] + quantization_error_blue * C4
                              __pyx_t_12 = (__pyx_v_x + 1);
                              __pyx_t_11 = (__pyx_v_y + 1);
                              __pyx_t_10 = 2;
 09206: 
+09207:     return make_surface((asarray(rgb_array_,dtype=float32)
  __Pyx_XDECREF(__pyx_r);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_asarray); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = __pyx_memoryview_fromslice(__pyx_v_rgb_array_, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_19 = PyTuple_New(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_18);
  PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_18);
  __pyx_t_18 = 0;
  __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_n_s_float32); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_18, __pyx_n_s_dtype, __pyx_t_20) < 0) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_19, __pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+09208:                          * <float>255.0).astype(dtype=numpy.uint8)).convert()
  __pyx_t_18 = PyFloat_FromDouble(((float)255.0)); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_19 = PyNumber_Multiply(__pyx_t_20, __pyx_t_18); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_astype); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_n_s_numpy); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_n_s_uint8); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (PyDict_SetItem(__pyx_t_19, __pyx_n_s_dtype, __pyx_t_17) < 0) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_18, __pyx_empty_tuple, __pyx_t_19); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_16);
    if (likely(__pyx_t_19)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
      __Pyx_INCREF(__pyx_t_19);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_16, function);
    }
  }
  __pyx_t_2 = (__pyx_t_19) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_19, __pyx_t_17) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_17);
  __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_convert); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_16);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_16, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 09209: 
 09210: 
 09211: 
 09212: @cython.binding(False)
 09213: @cython.binding(False)
 09214: @cython.boundscheck(False)
 09215: @cython.wraparound(False)
 09216: @cython.nonecheck(False)
 09217: @cython.cdivision(True)
 09218: @cython.profile(False)
+09219: cdef inline void dithering__c(float [:, :, :] rgb_array_, unsigned char[:, :, :] tmp):
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_dithering__c(__Pyx_memviewslice __pyx_v_rgb_array_, __Pyx_memviewslice __pyx_v_tmp) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_x;
  int __pyx_v_y;
  float __pyx_v_new_red;
  float __pyx_v_new_green;
  float __pyx_v_new_blue;
  float __pyx_v_quantization_error_red;
  float __pyx_v_quantization_error_green;
  float __pyx_v_quantization_error_blue;
  float __pyx_v_oldr;
  float __pyx_v_oldg;
  float __pyx_v_oldb;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dithering__c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("PygameShader.shader.dithering__c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 09220: 
 09221: 
 09222:     cdef Py_ssize_t w, h
+09223:     w = <object> rgb_array_.shape[ 0 ] - 1
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_rgb_array_.shape[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9223, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_w = __pyx_t_3;
+09224:     h = <object> rgb_array_.shape[ 1 ] - 1
  __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_rgb_array_.shape[1])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_t_2, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9224, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_h = __pyx_t_3;
 09225: 
 09226:     cdef:
+09227:         int x=0, y=0
  __pyx_v_x = 0;
  __pyx_v_y = 0;
 09228:         float new_red, new_green, new_blue
 09229:         float quantization_error_red, quantization_error_green, quantization_error_blue
 09230:         float oldr, oldg, oldb
 09231: 
 09232: 
+09233:     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:;
      }
  }
 09234: 
+09235:         for y in prange(1, h, schedule='static', num_threads=THREADS, chunksize=h * 3):
        __pyx_t_3 = __pyx_v_h;
        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_5 = (__pyx_t_3 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_new_blue) lastprivate(__pyx_v_new_green) lastprivate(__pyx_v_new_red) lastprivate(__pyx_v_oldb) lastprivate(__pyx_v_oldg) lastprivate(__pyx_v_oldr) lastprivate(__pyx_v_quantization_error_blue) lastprivate(__pyx_v_quantization_error_green) lastprivate(__pyx_v_quantization_error_red) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y)            __pyx_t_6 = (__pyx_v_h * 3);
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_5 = (__pyx_t_3 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_5 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_new_blue) lastprivate(__pyx_v_new_green) lastprivate(__pyx_v_new_red) lastprivate(__pyx_v_oldb) lastprivate(__pyx_v_oldg) lastprivate(__pyx_v_oldr) lastprivate(__pyx_v_quantization_error_blue) lastprivate(__pyx_v_quantization_error_green) lastprivate(__pyx_v_quantization_error_red) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static, __pyx_t_6) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_5; __pyx_t_4++){
                        {
                            __pyx_v_y = (int)(1 + 1 * __pyx_t_4);
                            /* Initialize private variables to invalid values */
                            __pyx_v_new_blue = ((float)__PYX_NAN());
                            __pyx_v_new_green = ((float)__PYX_NAN());
                            __pyx_v_new_red = ((float)__PYX_NAN());
                            __pyx_v_oldb = ((float)__PYX_NAN());
                            __pyx_v_oldg = ((float)__PYX_NAN());
                            __pyx_v_oldr = ((float)__PYX_NAN());
                            __pyx_v_quantization_error_blue = ((float)__PYX_NAN());
                            __pyx_v_quantization_error_green = ((float)__PYX_NAN());
                            __pyx_v_quantization_error_red = ((float)__PYX_NAN());
                            __pyx_v_x = ((int)0xbad0bad0);
 09236: 
+09237:             for x in range(1, w):
                            __pyx_t_7 = __pyx_v_w;
                            __pyx_t_8 = __pyx_t_7;
                            for (__pyx_t_9 = 1; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
                              __pyx_v_x = __pyx_t_9;
 09238: 
+09239:                 oldr = rgb_array_[x, y, <unsigned short int>0]
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)0);
                              __pyx_v_oldr = (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )));
+09240:                 oldg = rgb_array_[x, y, <unsigned short int>1]
                              __pyx_t_11 = __pyx_v_x;
                              __pyx_t_10 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)1);
                              __pyx_v_oldg = (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )));
+09241:                 oldb = rgb_array_[x, y, <unsigned short int>2]
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)2);
                              __pyx_v_oldb = (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )));
 09242: 
+09243:                 new_red   = round_c(oldr)
                              __pyx_v_new_red = round(__pyx_v_oldr);
+09244:                 new_green = round_c(oldg)
                              __pyx_v_new_green = round(__pyx_v_oldg);
+09245:                 new_blue  = round_c(oldb)
                              __pyx_v_new_blue = round(__pyx_v_oldb);
 09246: 
+09247:                 rgb_array_[x, y, <unsigned short int>0] = new_red
                              __pyx_t_11 = __pyx_v_x;
                              __pyx_t_10 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)0);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_v_new_red;
+09248:                 rgb_array_[x, y, <unsigned short int>1] = new_green
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)1);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_v_new_green;
+09249:                 rgb_array_[x, y, <unsigned short int>2] = new_blue
                              __pyx_t_11 = __pyx_v_x;
                              __pyx_t_10 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)2);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) )) = __pyx_v_new_blue;
 09250: 
+09251:                 quantization_error_red   = <float>(oldr - new_red)
                              __pyx_v_quantization_error_red = ((float)(__pyx_v_oldr - __pyx_v_new_red));
+09252:                 quantization_error_green = <float>(oldg - new_green)
                              __pyx_v_quantization_error_green = ((float)(__pyx_v_oldg - __pyx_v_new_green));
+09253:                 quantization_error_blue  = <float>(oldb - new_blue)
                              __pyx_v_quantization_error_blue = ((float)(__pyx_v_oldb - __pyx_v_new_blue));
 09254: 
+09255:                 rgb_array_[x + <unsigned short int>1, y, <unsigned short int>0] = \
                              __pyx_t_13 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_red * __pyx_v_12PygameShader_6shader_C1));
+09256:                     rgb_array_[x + <unsigned short int>1, y, <unsigned short int>0] + quantization_error_red * C1
                              __pyx_t_10 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)0);
+09257:                 rgb_array_[x + <unsigned short int>1, y, <unsigned short int>1] = \
                              __pyx_t_14 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)1);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_green * __pyx_v_12PygameShader_6shader_C1));
+09258:                     rgb_array_[x + <unsigned short int>1, y, <unsigned short int>1] + quantization_error_green * C1
                              __pyx_t_11 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_10 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)1);
+09259:                 rgb_array_[x + <unsigned short int>1, y, <unsigned short int>2] =\
                              __pyx_t_13 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)2);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_blue * __pyx_v_12PygameShader_6shader_C1));
+09260:                     rgb_array_[x + <unsigned short int>1, y, <unsigned short int>2] + quantization_error_blue * C1
                              __pyx_t_10 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)2);
 09261: 
+09262:                 rgb_array_[x - <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>0] = \
                              __pyx_t_14 = (__pyx_v_x - ((unsigned short)1));
                              __pyx_t_13 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)0);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_red * __pyx_v_12PygameShader_6shader_C2));
+09263:                     rgb_array_[x - <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>0] \
                              __pyx_t_11 = (__pyx_v_x - ((unsigned short)1));
                              __pyx_t_10 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)0);
 09264:                     + quantization_error_red * C2
+09265:                 rgb_array_[x - <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>1] = \
                              __pyx_t_13 = (__pyx_v_x - ((unsigned short)1));
                              __pyx_t_14 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)1);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_green * __pyx_v_12PygameShader_6shader_C2));
+09266:                     rgb_array_[x - <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>1] \
                              __pyx_t_10 = (__pyx_v_x - ((unsigned short)1));
                              __pyx_t_11 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)1);
 09267:                     + quantization_error_green * C2
+09268:                 rgb_array_[x - <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>2] = \
                              __pyx_t_14 = (__pyx_v_x - ((unsigned short)1));
                              __pyx_t_13 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)2);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_blue * __pyx_v_12PygameShader_6shader_C2));
+09269:                     rgb_array_[x - <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>2] \
                              __pyx_t_11 = (__pyx_v_x - ((unsigned short)1));
                              __pyx_t_10 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)2);
 09270:                     + quantization_error_blue * C2
 09271: 
+09272:                 rgb_array_[x, y + <unsigned short int>1, <unsigned short int>0] =\
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)0);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_red * __pyx_v_12PygameShader_6shader_C3));
+09273:                     rgb_array_[x, y + <unsigned short int>1, <unsigned short int>0] + quantization_error_red * C3
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)0);
+09274:                 rgb_array_[x, y + <unsigned short int>1, <unsigned short int>1] =\
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_13 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)1);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_green * __pyx_v_12PygameShader_6shader_C3));
+09275:                     rgb_array_[x, y + <unsigned short int>1, <unsigned short int>1] + quantization_error_green * C3
                              __pyx_t_11 = __pyx_v_x;
                              __pyx_t_10 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)1);
+09276:                 rgb_array_[x, y + <unsigned short int>1, <unsigned short int>2] =\
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)2);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_blue * __pyx_v_12PygameShader_6shader_C3));
+09277:                     rgb_array_[x, y + <unsigned short int>1, <unsigned short int>2] + quantization_error_blue * C3
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)2);
 09278: 
+09279:                 rgb_array_[x + <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>0] =\
                              __pyx_t_14 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_13 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)0);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_red * __pyx_v_12PygameShader_6shader_C4));
+09280:                     rgb_array_[x + <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>0] \
                              __pyx_t_11 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_10 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)0);
 09281:                     + quantization_error_red * C4
+09282:                 rgb_array_[x + <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>1] =\
                              __pyx_t_13 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_14 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)1);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_13 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_14 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_green * __pyx_v_12PygameShader_6shader_C4));
+09283:                     rgb_array_[x + <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>1] \
                              __pyx_t_10 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_11 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)1);
 09284:                     + quantization_error_green * C4
+09285:                 rgb_array_[x + <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>2] =\
                              __pyx_t_14 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_13 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_15 = ((unsigned short)2);
                              *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_14 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_13 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_15 * __pyx_v_rgb_array_.strides[2]) )) = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) + (__pyx_v_quantization_error_blue * __pyx_v_12PygameShader_6shader_C4));
                            }
                        }
                    }
                }
            }
        }
        #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
+09286:                     rgb_array_[x + <unsigned short int>1, y + <unsigned short int>1, <unsigned short int>2] \
                              __pyx_t_11 = (__pyx_v_x + ((unsigned short)1));
                              __pyx_t_10 = (__pyx_v_y + ((unsigned short)1));
                              __pyx_t_12 = ((unsigned short)2);
 09287:                     + quantization_error_blue * C4
 09288: 
+09289:         for y in prange(1, h, schedule='static', num_threads=THREADS, chunksize=h * 3):
        __pyx_t_5 = __pyx_v_h;
        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_6 = (__pyx_t_5 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_6 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y)            __pyx_t_3 = (__pyx_v_h * 3);
/* … */
        __pyx_t_5 = __pyx_v_h;
        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_6 = (__pyx_t_5 - 1 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_6 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static, __pyx_t_3) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_6; __pyx_t_4++){
                        {
                            __pyx_v_y = (int)(1 + 1 * __pyx_t_4);
                            /* Initialize private variables to invalid values */
                            __pyx_v_x = ((int)0xbad0bad0);
+09290:             for x in range(1, w):
                            __pyx_t_7 = __pyx_v_w;
                            __pyx_t_8 = __pyx_t_7;
                            for (__pyx_t_9 = 1; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
                              __pyx_v_x = __pyx_t_9;
+09291:                 tmp[x, y, <unsigned short int>0] = \
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_tmp.data + __pyx_t_13 * __pyx_v_tmp.strides[0]) ) + __pyx_t_14 * __pyx_v_tmp.strides[1]) ) + __pyx_t_15 * __pyx_v_tmp.strides[2]) )) = ((unsigned char)((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) * ((float)255.0)));
+09292:                     <unsigned char>(rgb_array_[x, y, <unsigned short int>0] * <float>255.0)
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)0);
+09293:                 tmp[x, y, <unsigned short int>1] =\
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_13 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_tmp.data + __pyx_t_14 * __pyx_v_tmp.strides[0]) ) + __pyx_t_13 * __pyx_v_tmp.strides[1]) ) + __pyx_t_15 * __pyx_v_tmp.strides[2]) )) = ((unsigned char)((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_11 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) * ((float)255.0)));
+09294:                     <unsigned char>(rgb_array_[x, y, <unsigned short int>1] * <float>255.0)
                              __pyx_t_11 = __pyx_v_x;
                              __pyx_t_10 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)1);
+09295:                 tmp[x, y, <unsigned short int>2] =\
                              __pyx_t_13 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_15 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_tmp.data + __pyx_t_13 * __pyx_v_tmp.strides[0]) ) + __pyx_t_14 * __pyx_v_tmp.strides[1]) ) + __pyx_t_15 * __pyx_v_tmp.strides[2]) )) = ((unsigned char)((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_10 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_11 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_12 * __pyx_v_rgb_array_.strides[2]) ))) * ((float)255.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
      }
+09296:                     <unsigned char>(rgb_array_[x, y, <unsigned short int>2] * <float>255.0)
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_11 = __pyx_v_y;
                              __pyx_t_12 = ((unsigned short)2);
 09297: 
 09298: 
 09299: 
 09300: @cython.binding(False)
 09301: @cython.binding(False)
 09302: @cython.boundscheck(False)
 09303: @cython.wraparound(False)
 09304: @cython.nonecheck(False)
 09305: @cython.cdivision(True)
 09306: @cython.profile(False)
+09307: cdef inline void convert_27colors_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_convert_27colors_c(__Pyx_memviewslice __pyx_v_rgb_array) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_x;
  int __pyx_v_y;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  float __pyx_v_f;
  float __pyx_v_c1;
  CYTHON_UNUSED int __pyx_v_index;
  float __pyx_v_rr;
  float __pyx_v_gg;
  float __pyx_v_bb;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert_27colors_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 09308:         unsigned char [:, :, :] rgb_array):
 09309: 
 09310:     """
 09311:     THIS ALGORITHM CONVERT AN IMAGE USING 27 COLORS ONLY
 09312: 
 09313:     :param rgb_array: numpy.ndarray; containing the pixels RGB. Array shape (w, h, 3)
 09314:     :return: void
 09315:     """
 09316:     cdef Py_ssize_t w, h
+09317:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 09318: 
 09319:     cdef:
+09320:         int x=0
  __pyx_v_x = 0;
+09321:         int y=0
  __pyx_v_y = 0;
 09322:         unsigned char *r
 09323:         unsigned char *g
 09324:         unsigned char *b
+09325:         float f = <float> 255.0 / <float> 2
  __pyx_v_f = (((float)255.0) / ((float)2));
+09326:         float c1 = <float>2 / <float>255.0
  __pyx_v_c1 = (((float)2) / ((float)255.0));
+09327:         int index = 0
  __pyx_v_index = 0;
 09328:         float rr, gg, bb
 09329: 
+09330:     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:;
      }
  }
+09331:         for y in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bb) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gg) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rr) lastprivate(__pyx_v_x) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_2);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_bb = ((float)__PYX_NAN());
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_gg = ((float)__PYX_NAN());
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_rr = ((float)__PYX_NAN());
                            __pyx_v_x = ((int)0xbad0bad0);
+09332:             for x in range(0, w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_x = __pyx_t_7;
 09333: 
+09334:                 r = &rgb_array[x, y, 0]
                              __pyx_t_8 = __pyx_v_x;
                              __pyx_t_9 = __pyx_v_y;
                              __pyx_t_10 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+09335:                 g = &rgb_array[x, y, 1]
                              __pyx_t_10 = __pyx_v_x;
                              __pyx_t_9 = __pyx_v_y;
                              __pyx_t_8 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_10 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[2]) ))));
+09336:                 b = &rgb_array[x, y, 2]
                              __pyx_t_8 = __pyx_v_x;
                              __pyx_t_9 = __pyx_v_y;
                              __pyx_t_10 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
 09337: 
+09338:                 rr = <float>round_c(c1 * <float> r[ 0 ] ) * f
                              __pyx_v_rr = (((float)round((__pyx_v_c1 * ((float)(__pyx_v_r[0]))))) * __pyx_v_f);
+09339:                 gg = <float>round_c(c1 * <float> g[ 0 ] ) * f
                              __pyx_v_gg = (((float)round((__pyx_v_c1 * ((float)(__pyx_v_g[0]))))) * __pyx_v_f);
+09340:                 bb = <float>round_c(c1 * <float> b[ 0 ] ) * f
                              __pyx_v_bb = (((float)round((__pyx_v_c1 * ((float)(__pyx_v_b[0]))))) * __pyx_v_f);
 09341: 
+09342:                 r[ 0 ] = <unsigned char>rr
                              (__pyx_v_r[0]) = ((unsigned char)__pyx_v_rr);
+09343:                 g[ 0 ] = <unsigned char>gg
                              (__pyx_v_g[0]) = ((unsigned char)__pyx_v_gg);
+09344:                 b[ 0 ] = <unsigned char>bb
                              (__pyx_v_b[0]) = ((unsigned char)__pyx_v_bb);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 09345: 
 09346: 
 09347: @cython.binding(False)
 09348: @cython.binding(False)
 09349: @cython.boundscheck(False)
 09350: @cython.wraparound(False)
 09351: @cython.nonecheck(False)
 09352: @cython.cdivision(True)
 09353: @cython.profile(False)
+09354: cdef object spectrum_c(int width, int height, float gamma=1.0):
static PyObject *__pyx_f_12PygameShader_6shader_spectrum_c(int __pyx_v_width, int __pyx_v_height, struct __pyx_opt_args_12PygameShader_6shader_spectrum_c *__pyx_optional_args) {
  float __pyx_v_gamma = ((float)1.0);
  int __pyx_v_i;
  int __pyx_v_k;
  struct rgb_color_int __pyx_v_rgb_c;
  __Pyx_memviewslice __pyx_v_spectrum_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_surface = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("spectrum_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_gamma = __pyx_optional_args->gamma;
    }
  }
/* … */
  /* 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_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("PygameShader.shader.spectrum_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_spectrum_array, 1);
  __Pyx_XDECREF(__pyx_v_surface);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_spectrum_c {
  int __pyx_n;
  float gamma;
};
 09355: 
 09356:     """
 09357:     CREATE A PYGAME SURFACE DISPLAYING THE LIGHT SPECTRUM 380-750 nm
 09358: 
 09359:     Color   Wavelength(nm) Frequency(THz)
 09360:     Red     620-750        484-400
 09361:     Orange  590-620        508-484
 09362:     Yellow  570-590        526-508
 09363:     Green   495-570        606-526
 09364:     Blue    450-495        668-606
 09365:     Violet  380-450        789-668
 09366: 
 09367:     :param width: integer; width of the image
 09368:     :param height: integer; height of the image
 09369:     :param gamma: float; gamma value
 09370:     :return: Return a pygame surface 24-bit (width, height) converted for fast
 09371:     blit
 09372: 
 09373:     """
 09374: 
 09375:     cdef:
 09376:         int i, j, k
 09377:         rgb_color_int rgb_c
 09378:         unsigned char [:, :, :] spectrum_array =\
+09379:             numpy.empty((370, 1, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_tuple__35, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9379, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_tuple__35, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9379, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_tuple__35);
    __Pyx_GIVEREF(__pyx_tuple__35);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_tuple__35);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 9379, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_spectrum_array = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
/* … */
  __pyx_tuple__35 = PyTuple_Pack(3, __pyx_int_370, __pyx_int_1, __pyx_int_3); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(1, 9379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);
 09380:         object surface
 09381: 
+09382:     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:;
      }
  }
+09383:         for i in prange(380, 750, schedule='static', num_threads=THREADS):
        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_9 = (0x2EE - 0x17C + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_k) lastprivate(__pyx_v_rgb_c) schedule(static)
/* … */
        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_9 = (0x2EE - 0x17C + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_k) lastprivate(__pyx_v_rgb_c) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_i = (int)(0x17C + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_k = ((int)0xbad0bad0);
+09384:             rgb_c = wavelength_to_rgb(i, gamma)
                            __pyx_v_rgb_c = wavelength_to_rgb(__pyx_v_i, __pyx_v_gamma);
+09385:             k = i - 380
                            __pyx_v_k = (__pyx_v_i - 0x17C);
+09386:             spectrum_array[ k, 0, 0 ] = rgb_c.r
                            __pyx_t_5 = __pyx_v_rgb_c.r;
                            __pyx_t_10 = __pyx_v_k;
                            __pyx_t_11 = 0;
                            __pyx_t_12 = 0;
                            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_spectrum_array.data + __pyx_t_10 * __pyx_v_spectrum_array.strides[0]) ) + __pyx_t_11 * __pyx_v_spectrum_array.strides[1]) ) + __pyx_t_12 * __pyx_v_spectrum_array.strides[2]) )) = __pyx_t_5;
+09387:             spectrum_array[ k, 0, 1 ] = rgb_c.g
                            __pyx_t_5 = __pyx_v_rgb_c.g;
                            __pyx_t_12 = __pyx_v_k;
                            __pyx_t_11 = 0;
                            __pyx_t_10 = 1;
                            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_spectrum_array.data + __pyx_t_12 * __pyx_v_spectrum_array.strides[0]) ) + __pyx_t_11 * __pyx_v_spectrum_array.strides[1]) ) + __pyx_t_10 * __pyx_v_spectrum_array.strides[2]) )) = __pyx_t_5;
+09388:             spectrum_array[ k, 0, 2 ] = rgb_c.b
                            __pyx_t_5 = __pyx_v_rgb_c.b;
                            __pyx_t_10 = __pyx_v_k;
                            __pyx_t_11 = 0;
                            __pyx_t_12 = 2;
                            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_spectrum_array.data + __pyx_t_10 * __pyx_v_spectrum_array.strides[0]) ) + __pyx_t_11 * __pyx_v_spectrum_array.strides[1]) ) + __pyx_t_12 * __pyx_v_spectrum_array.strides[2]) )) = __pyx_t_5;
+09389:             spectrum_array[ k, 1, 0 ] = rgb_c.r
                            __pyx_t_5 = __pyx_v_rgb_c.r;
                            __pyx_t_12 = __pyx_v_k;
                            __pyx_t_11 = 1;
                            __pyx_t_10 = 0;
                            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_spectrum_array.data + __pyx_t_12 * __pyx_v_spectrum_array.strides[0]) ) + __pyx_t_11 * __pyx_v_spectrum_array.strides[1]) ) + __pyx_t_10 * __pyx_v_spectrum_array.strides[2]) )) = __pyx_t_5;
+09390:             spectrum_array[ k, 1, 1 ] = rgb_c.g
                            __pyx_t_5 = __pyx_v_rgb_c.g;
                            __pyx_t_10 = __pyx_v_k;
                            __pyx_t_11 = 1;
                            __pyx_t_12 = 1;
                            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_spectrum_array.data + __pyx_t_10 * __pyx_v_spectrum_array.strides[0]) ) + __pyx_t_11 * __pyx_v_spectrum_array.strides[1]) ) + __pyx_t_12 * __pyx_v_spectrum_array.strides[2]) )) = __pyx_t_5;
+09391:             spectrum_array[ k, 1, 2 ] = rgb_c.b
                            __pyx_t_5 = __pyx_v_rgb_c.b;
                            __pyx_t_12 = __pyx_v_k;
                            __pyx_t_11 = 1;
                            __pyx_t_10 = 2;
                            *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_spectrum_array.data + __pyx_t_12 * __pyx_v_spectrum_array.strides[0]) ) + __pyx_t_11 * __pyx_v_spectrum_array.strides[1]) ) + __pyx_t_10 * __pyx_v_spectrum_array.strides[2]) )) = __pyx_t_5;
                        }
                    }
                }
            }
        }
        #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
      }
 09392: 
+09393:     surface = make_surface(asarray(spectrum_array))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_make_surface); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_spectrum_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(1, 9393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_6 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_13, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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_1 = (__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_1)) __PYX_ERR(1, 9393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_surface = __pyx_t_1;
  __pyx_t_1 = 0;
+09394:     surface = scale(surface, (width, height)).convert()
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_scale); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9394, __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(1, 9394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 9394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_2);
  __pyx_t_4 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface, __pyx_t_13};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9394, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_surface, __pyx_t_13};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9394, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9394, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surface);
    __Pyx_GIVEREF(__pyx_v_surface);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_v_surface);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, __pyx_t_13);
    __pyx_t_13 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9394, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_convert); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF_SET(__pyx_v_surface, __pyx_t_1);
  __pyx_t_1 = 0;
+09395:     return surface
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_surface);
  __pyx_r = __pyx_v_surface;
  goto __pyx_L0;
 09396: 
 09397: 
 09398: 
 09399: 
 09400: @cython.binding(False)
 09401: @cython.binding(False)
 09402: @cython.boundscheck(False)
 09403: @cython.wraparound(False)
 09404: @cython.nonecheck(False)
 09405: @cython.cdivision(True)
 09406: @cython.profile(False)
+09407: cdef inline void palette_change_c(
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_palette_change_c(__Pyx_memviewslice __pyx_v_rgb_array, __Pyx_memviewslice __pyx_v_palette_) {
  int __pyx_v_i;
  int __pyx_v_j;
  CYTHON_UNUSED Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  struct rgb __pyx_v_rgb_;
  struct rgb __pyx_v_rgb_c;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  Py_ssize_t __pyx_v_p_length;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("palette_change_c", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_WriteUnraisable("PygameShader.shader.palette_change_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 09408:         unsigned char [:, :, :] rgb_array,
 09409:         float [:, :] palette_):
 09410: 
 09411: 
 09412:     cdef:
 09413:         int i, j
+09414:         Py_ssize_t w = <object>rgb_array.shape[0]
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_rgb_array.shape[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9414, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_w = __pyx_t_2;
+09415:         Py_ssize_t h = <object>rgb_array.shape[1]
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_rgb_array.shape[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9415, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_h = __pyx_t_2;
 09416:         rgb rgb_
 09417:         rgb rgb_c
 09418:         unsigned char *r
 09419:         unsigned char *g
 09420:         unsigned char *b
+09421:         Py_ssize_t p_length = <object>palette_.shape[0]
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_palette_.shape[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_p_length = __pyx_t_2;
 09422: 
+09423:     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:;
      }
  }
+09424:         for i in prange(w, schedule='static', num_threads=THREADS, chunksize=w * h):
        __pyx_t_2 = __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_4 = (__pyx_t_2 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_)            __pyx_t_5 = (__pyx_v_w * __pyx_v_h);
/* … */
        __pyx_t_2 = __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_4 = (__pyx_t_2 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) schedule(static, __pyx_t_5) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_4; __pyx_t_3++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_3);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
+09425:             for j in range(h):
                            __pyx_t_6 = __pyx_v_h;
                            __pyx_t_7 = __pyx_t_6;
                            for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
                              __pyx_v_j = __pyx_t_8;
+09426:                 r = &rgb_array[i, j, 0]
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_10 = __pyx_v_j;
                              __pyx_t_11 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_9 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_11 * __pyx_v_rgb_array.strides[2]) ))));
+09427:                 g = &rgb_array[i, j, 1]
                              __pyx_t_11 = __pyx_v_i;
                              __pyx_t_10 = __pyx_v_j;
                              __pyx_t_9 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_11 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[2]) ))));
+09428:                 b = &rgb_array[i, j, 2]
                              __pyx_t_9 = __pyx_v_i;
                              __pyx_t_10 = __pyx_v_j;
                              __pyx_t_11 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_9 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_11 * __pyx_v_rgb_array.strides[2]) ))));
 09429: 
+09430:                 rgb_c.r = r[0]
                              __pyx_v_rgb_c.r = (__pyx_v_r[0]);
+09431:                 rgb_c.g = g[0]
                              __pyx_v_rgb_c.g = (__pyx_v_g[0]);
+09432:                 rgb_c.b = b[0]
                              __pyx_v_rgb_c.b = (__pyx_v_b[0]);
 09433: 
+09434:                 rgb_ = close_color(rgb_c, palette_, p_length)
                              __pyx_v_rgb_ = __pyx_f_12PygameShader_4misc_close_color(__pyx_v_rgb_c, __pyx_v_palette_, __pyx_v_p_length);
 09435: 
+09436:                 r[0] = <unsigned char>rgb_.r
                              (__pyx_v_r[0]) = ((unsigned char)__pyx_v_rgb_.r);
+09437:                 g[0] = <unsigned char>rgb_.g
                              (__pyx_v_g[0]) = ((unsigned char)__pyx_v_rgb_.g);
+09438:                 b[0] = <unsigned char>rgb_.b
                              (__pyx_v_b[0]) = ((unsigned char)__pyx_v_rgb_.b);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 09439: 
 09440: 
 09441: 
 09442: @cython.binding(False)
 09443: @cython.binding(False)
 09444: @cython.boundscheck(False)
 09445: @cython.wraparound(False)
 09446: @cython.nonecheck(False)
 09447: @cython.cdivision(True)
 09448: @cython.profile(False)
+09449: cdef float distance_ (float x, float y)nogil:
static float __pyx_f_12PygameShader_6shader_distance_(float __pyx_v_x, float __pyx_v_y) {
  float __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+09450:   return <float>sqrt(x*x + y*y)
  __pyx_r = ((float)sqrt(((__pyx_v_x * __pyx_v_x) + (__pyx_v_y * __pyx_v_y))));
  goto __pyx_L0;
 09451: 
 09452: @cython.binding(False)
 09453: @cython.binding(False)
 09454: @cython.boundscheck(False)
 09455: @cython.wraparound(False)
 09456: @cython.nonecheck(False)
 09457: @cython.cdivision(True)
 09458: @cython.profile(False)
+09459: cdef float gaussian_ (float v, float sigma2)nogil:
static float __pyx_f_12PygameShader_6shader_gaussian_(float __pyx_v_v, float __pyx_v_sigma2) {
  float __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+09460:   return (<float>1.0 / (<float>M_PI * sigma2)) * <float>exp(-(v * v ) / sigma2)
  __pyx_r = ((((float)1.0) / (((float)__pyx_v_12PygameShader_6shader_M_PI) * __pyx_v_sigma2)) * ((float)exp(((-(__pyx_v_v * __pyx_v_v)) / __pyx_v_sigma2))));
  goto __pyx_L0;
 09461: 
 09462: @cython.binding(False)
 09463: @cython.binding(False)
 09464: @cython.boundscheck(False)
 09465: @cython.wraparound(False)
 09466: @cython.nonecheck(False)
 09467: @cython.cdivision(True)
 09468: @cython.profile(False)
+09469: cdef bilateral_filter24_c(
static PyObject *__pyx_f_12PygameShader_6shader_bilateral_filter24_c(__Pyx_memviewslice __pyx_v_rgb_array_, float __pyx_v_sigma_s_, float __pyx_v_sigma_i_, struct __pyx_opt_args_12PygameShader_6shader_bilateral_filter24_c *__pyx_optional_args) {
  unsigned int __pyx_v_kernel_size = ((unsigned int)3);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  __Pyx_memviewslice __pyx_v_bilateral = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_xx;
  int __pyx_v_yy;
  int __pyx_v_k;
  int __pyx_v_kx;
  int __pyx_v_ky;
  float __pyx_v_gs;
  float __pyx_v_wr;
  float __pyx_v_wg;
  float __pyx_v_wb;
  float __pyx_v_ir;
  float __pyx_v_ig;
  float __pyx_v_ib;
  float __pyx_v_wpr;
  float __pyx_v_wpg;
  float __pyx_v_wpb;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  float __pyx_v_sigma_i2;
  float __pyx_v_sigma_s2;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilateral_filter24_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kernel_size = __pyx_optional_args->kernel_size;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_AddTraceback("PygameShader.shader.bilateral_filter24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_bilateral, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+09470:         unsigned char [:, :, :] rgb_array_,
struct __pyx_opt_args_12PygameShader_6shader_bilateral_filter24_c {
  int __pyx_n;
  unsigned int kernel_size;
};
 09471:         float sigma_s_,
 09472:         float sigma_i_,
 09473:         unsigned int kernel_size = 3
 09474: ):
 09475:     """
 09476:     A bilateral filter is a non-linear, edge-preserving, and noise-reducing
 09477:     smoothing filter for images. It replaces the intensity of each pixel with a
 09478:     weighted average of intensity values from nearby pixels. This weight can be
 09479:     based on a Gaussian distribution.
 09480: 
 09481:     Here, the normalization factor and the range weight are new terms added to
 09482:     the previous equation. sigma_s  denotes the spatial extent of the kernel, i.e.
 09483:     the size of the neighborhood, and sigma_r  denotes the minimum amplitude of an edge.
 09484:     It ensures that only those pixels with intensity values similar to that of the
 09485:     central pixel are considered for blurring, while sharp intensity changes are maintained.
 09486:     The smaller the value of sigma_r  , the sharper the edge. As sigma_r  tends to infinity,
 09487:     the equation tends to a Gaussian blur.
 09488: 
 09489:     :param kernel_size: integer; kernel size; default is 3
 09490:     :param rgb_array_: Surface, 24-32 bit format (alpha channel will be ignored)
 09491: 
 09492:     :param sigma_s_: float sigma_s : Spatial extent of the kernel, size of the
 09493:     considered neighborhood
 09494: 
 09495:     :param sigma_i_: float sigma_i (also call sigma_r) range kernel, minimum amplitude of an edge.
 09496: 
 09497:     :return: return a filtered Surface
 09498:     """
 09499: 
 09500:     cdef Py_ssize_t w, h
+09501:     w = <object>rgb_array_.shape[ 0 ]
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_rgb_array_.shape[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9501, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_w = __pyx_t_2;
+09502:     h = <object> rgb_array_.shape[ 1 ]
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_rgb_array_.shape[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 9502, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_h = __pyx_t_2;
 09503: 
 09504:     cdef:
+09505:         unsigned char [:, :, :] bilateral = empty((h, w, 3), dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 9505, __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(1, 9505, __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(1, 9505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(1, 9505, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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_dsdsds_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 9505, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bilateral = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
 09506:         int x, y, xx, yy
+09507:         int k = kernel_size
  __pyx_v_k = __pyx_v_kernel_size;
 09508:         int kx, ky
 09509:         float gs, wr, wg, wb, ir, ig, ib , wpr, wpg, wpb
 09510:         unsigned char *r
 09511:         unsigned char *g
 09512:         unsigned char *b
+09513:         float sigma_i2 = <float>2.0 * sigma_i_ * sigma_i_
  __pyx_v_sigma_i2 = ((((float)2.0) * __pyx_v_sigma_i_) * __pyx_v_sigma_i_);
+09514:         float sigma_s2 = <float>2.0 * sigma_s_ * sigma_s_
  __pyx_v_sigma_s2 = ((((float)2.0) * __pyx_v_sigma_s_) * __pyx_v_sigma_s_);
 09515: 
+09516:     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:;
      }
  }
 09517: 
+09518:         for x in prange(0, w, schedule='static', num_threads=THREADS):
        __pyx_t_2 = __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_8 = (__pyx_t_2 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_8 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gs) lastprivate(__pyx_v_ib) lastprivate(__pyx_v_ig) lastprivate(__pyx_v_ir) lastprivate(__pyx_v_kx) lastprivate(__pyx_v_ky) lastprivate(__pyx_v_r) lastprivate(__pyx_v_wb) lastprivate(__pyx_v_wg) lastprivate(__pyx_v_wpb) lastprivate(__pyx_v_wpg) lastprivate(__pyx_v_wpr) lastprivate(__pyx_v_wr) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_2 = __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_8 = (__pyx_t_2 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_8 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_gs) lastprivate(__pyx_v_ib) lastprivate(__pyx_v_ig) lastprivate(__pyx_v_ir) lastprivate(__pyx_v_kx) lastprivate(__pyx_v_ky) lastprivate(__pyx_v_r) lastprivate(__pyx_v_wb) lastprivate(__pyx_v_wg) lastprivate(__pyx_v_wpb) lastprivate(__pyx_v_wpg) lastprivate(__pyx_v_wpr) lastprivate(__pyx_v_wr) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_7);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_gs = ((float)__PYX_NAN());
                            __pyx_v_ib = ((float)__PYX_NAN());
                            __pyx_v_ig = ((float)__PYX_NAN());
                            __pyx_v_ir = ((float)__PYX_NAN());
                            __pyx_v_kx = ((int)0xbad0bad0);
                            __pyx_v_ky = ((int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_wb = ((float)__PYX_NAN());
                            __pyx_v_wg = ((float)__PYX_NAN());
                            __pyx_v_wpb = ((float)__PYX_NAN());
                            __pyx_v_wpg = ((float)__PYX_NAN());
                            __pyx_v_wpr = ((float)__PYX_NAN());
                            __pyx_v_wr = ((float)__PYX_NAN());
                            __pyx_v_xx = ((int)0xbad0bad0);
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_yy = ((int)0xbad0bad0);
+09519:             for y in range(0, h):
                            __pyx_t_9 = __pyx_v_h;
                            __pyx_t_10 = __pyx_t_9;
                            for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
                              __pyx_v_y = __pyx_t_11;
 09520: 
+09521:                 ir, ig, ib = <float>0.0, <float>0.0, <float>0.0
                              __pyx_t_12 = ((float)0.0);
                              __pyx_t_13 = ((float)0.0);
                              __pyx_t_14 = ((float)0.0);
                              __pyx_v_ir = __pyx_t_12;
                              __pyx_v_ig = __pyx_t_13;
                              __pyx_v_ib = __pyx_t_14;
+09522:                 wpr, wpg, wpb = <float>0.0, <float>0.0, <float>0.0
                              __pyx_t_14 = ((float)0.0);
                              __pyx_t_13 = ((float)0.0);
                              __pyx_t_12 = ((float)0.0);
                              __pyx_v_wpr = __pyx_t_14;
                              __pyx_v_wpg = __pyx_t_13;
                              __pyx_v_wpb = __pyx_t_12;
 09523: 
+09524:                 for ky in range(-k, k + 1):
                              __pyx_t_15 = (__pyx_v_k + 1);
                              __pyx_t_16 = __pyx_t_15;
                              for (__pyx_t_17 = (-__pyx_v_k); __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
                                __pyx_v_ky = __pyx_t_17;
 09525: 
+09526:                     for kx in range(-k, k + 1):
                                __pyx_t_18 = (__pyx_v_k + 1);
                                __pyx_t_19 = __pyx_t_18;
                                for (__pyx_t_20 = (-__pyx_v_k); __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
                                  __pyx_v_kx = __pyx_t_20;
 09527: 
+09528:                         xx = x + kx
                                  __pyx_v_xx = (__pyx_v_x + __pyx_v_kx);
+09529:                         yy = y + ky
                                  __pyx_v_yy = (__pyx_v_y + __pyx_v_ky);
 09530: 
+09531:                         if xx < 0:
                                  __pyx_t_21 = ((__pyx_v_xx < 0) != 0);
                                  if (__pyx_t_21) {
/* … */
                                    goto __pyx_L16;
                                  }
+09532:                             xx = 0
                                    __pyx_v_xx = 0;
+09533:                         elif xx > <int>w:
                                  __pyx_t_21 = ((__pyx_v_xx > ((int)__pyx_v_w)) != 0);
                                  if (__pyx_t_21) {
/* … */
                                  }
                                  __pyx_L16:;
+09534:                             xx = <int>w
                                    __pyx_v_xx = ((int)__pyx_v_w);
 09535: 
+09536:                         if yy < 0:
                                  __pyx_t_21 = ((__pyx_v_yy < 0) != 0);
                                  if (__pyx_t_21) {
/* … */
                                    goto __pyx_L17;
                                  }
+09537:                             yy = 0
                                    __pyx_v_yy = 0;
+09538:                         elif yy > <int>h:
                                  __pyx_t_21 = ((__pyx_v_yy > ((int)__pyx_v_h)) != 0);
                                  if (__pyx_t_21) {
/* … */
                                  }
                                  __pyx_L17:;
+09539:                             yy = <int>h
                                    __pyx_v_yy = ((int)__pyx_v_h);
 09540: 
+09541:                         gs = gaussian_(distance_(<float>kx, <float>ky), sigma_s2)
                                  __pyx_v_gs = __pyx_f_12PygameShader_6shader_gaussian_(__pyx_f_12PygameShader_6shader_distance_(((float)__pyx_v_kx), ((float)__pyx_v_ky)), __pyx_v_sigma_s2);
 09542: 
+09543:                         r = &rgb_array_[xx, yy, 0]
                                  __pyx_t_22 = __pyx_v_xx;
                                  __pyx_t_23 = __pyx_v_yy;
                                  __pyx_t_24 = 0;
                                  __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_22 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[2]) ))));
+09544:                         g = &rgb_array_[xx, yy, 1]
                                  __pyx_t_24 = __pyx_v_xx;
                                  __pyx_t_23 = __pyx_v_yy;
                                  __pyx_t_22 = 1;
                                  __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_24 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array_.strides[2]) ))));
+09545:                         b = &rgb_array_[xx, yy, 2]
                                  __pyx_t_22 = __pyx_v_xx;
                                  __pyx_t_23 = __pyx_v_yy;
                                  __pyx_t_24 = 2;
                                  __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_22 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[2]) ))));
 09546: 
+09547:                         wr = gaussian_(<float>r[0] - <float>rgb_array_[x, y, 0], sigma_i2) * gs
                                  __pyx_t_24 = __pyx_v_x;
                                  __pyx_t_23 = __pyx_v_y;
                                  __pyx_t_22 = 0;
                                  __pyx_v_wr = (__pyx_f_12PygameShader_6shader_gaussian_((((float)(__pyx_v_r[0])) - ((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_24 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array_.strides[2]) ))))), __pyx_v_sigma_i2) * __pyx_v_gs);
+09548:                         wg = gaussian_(<float>g[0] - <float>rgb_array_[x, y, 1], sigma_i2) * gs
                                  __pyx_t_22 = __pyx_v_x;
                                  __pyx_t_23 = __pyx_v_y;
                                  __pyx_t_24 = 1;
                                  __pyx_v_wg = (__pyx_f_12PygameShader_6shader_gaussian_((((float)(__pyx_v_g[0])) - ((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_22 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[2]) ))))), __pyx_v_sigma_i2) * __pyx_v_gs);
+09549:                         wb = gaussian_(<float>b[0] - <float>rgb_array_[x, y, 2], sigma_i2) * gs
                                  __pyx_t_24 = __pyx_v_x;
                                  __pyx_t_23 = __pyx_v_y;
                                  __pyx_t_22 = 2;
                                  __pyx_v_wb = (__pyx_f_12PygameShader_6shader_gaussian_((((float)(__pyx_v_b[0])) - ((float)(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_24 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array_.strides[2]) ))))), __pyx_v_sigma_i2) * __pyx_v_gs);
 09550: 
+09551:                         ir = ir + r[0] * wr
                                  __pyx_v_ir = (__pyx_v_ir + ((__pyx_v_r[0]) * __pyx_v_wr));
+09552:                         ig = ig + g[0] * wg
                                  __pyx_v_ig = (__pyx_v_ig + ((__pyx_v_g[0]) * __pyx_v_wg));
+09553:                         ib = ib + b[0] * wb
                                  __pyx_v_ib = (__pyx_v_ib + ((__pyx_v_b[0]) * __pyx_v_wb));
 09554: 
+09555:                         wpr = wpr + wr
                                  __pyx_v_wpr = (__pyx_v_wpr + __pyx_v_wr);
+09556:                         wpg = wpg + wg
                                  __pyx_v_wpg = (__pyx_v_wpg + __pyx_v_wg);
+09557:                         wpb = wpb + wb
                                  __pyx_v_wpb = (__pyx_v_wpb + __pyx_v_wb);
                                }
                              }
 09558: 
+09559:                 ir = ir / wpr
                              __pyx_v_ir = (__pyx_v_ir / __pyx_v_wpr);
+09560:                 ig = ig / wpg
                              __pyx_v_ig = (__pyx_v_ig / __pyx_v_wpg);
+09561:                 ib = ib / wpb
                              __pyx_v_ib = (__pyx_v_ib / __pyx_v_wpb);
 09562: 
+09563:                 bilateral[y, x, 0] = <int>ir
                              __pyx_t_22 = __pyx_v_y;
                              __pyx_t_23 = __pyx_v_x;
                              __pyx_t_24 = 0;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_bilateral.data + __pyx_t_22 * __pyx_v_bilateral.strides[0]) ) + __pyx_t_23 * __pyx_v_bilateral.strides[1]) ) + __pyx_t_24 * __pyx_v_bilateral.strides[2]) )) = ((int)__pyx_v_ir);
+09564:                 bilateral[y, x, 1] = <int>ig
                              __pyx_t_24 = __pyx_v_y;
                              __pyx_t_23 = __pyx_v_x;
                              __pyx_t_22 = 1;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_bilateral.data + __pyx_t_24 * __pyx_v_bilateral.strides[0]) ) + __pyx_t_23 * __pyx_v_bilateral.strides[1]) ) + __pyx_t_22 * __pyx_v_bilateral.strides[2]) )) = ((int)__pyx_v_ig);
+09565:                 bilateral[y, x, 2] = <int>ib
                              __pyx_t_22 = __pyx_v_y;
                              __pyx_t_23 = __pyx_v_x;
                              __pyx_t_24 = 2;
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_bilateral.data + __pyx_t_22 * __pyx_v_bilateral.strides[0]) ) + __pyx_t_23 * __pyx_v_bilateral.strides[1]) ) + __pyx_t_24 * __pyx_v_bilateral.strides[2]) )) = ((int)__pyx_v_ib);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 09566: 
 09567: 
+09568:     return frombuffer(bilateral, (w, h), 'RGB')
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 9568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_bilateral, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_25 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 9568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_26 = PyTuple_New(2); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 9568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_25);
  PyTuple_SET_ITEM(__pyx_t_26, 1, __pyx_t_25);
  __pyx_t_1 = 0;
  __pyx_t_25 = 0;
  __pyx_t_25 = NULL;
  __pyx_t_11 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_25)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_25);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_11 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_25, __pyx_t_4, __pyx_t_26, __pyx_n_s_RGB};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9568, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_25, __pyx_t_4, __pyx_t_26, __pyx_n_s_RGB};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9568, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_25) {
      __Pyx_GIVEREF(__pyx_t_25); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_25); __pyx_t_25 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_11, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_26);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_11, __pyx_t_26);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_11, __pyx_n_s_RGB);
    __pyx_t_4 = 0;
    __pyx_t_26 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 09569: 
 09570: 
 09571: 
 09572: 
 09573: EMBOSS_KERNEL = \
+09574:     numpy.array((
  __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_numpy); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 9574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_array_2); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 9574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
/* … */
  __pyx_t_29 = __Pyx_PyObject_CallOneArg(__pyx_t_31, __pyx_t_28); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 9574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
+09575:         [-1.0, -1.0, -1.0, -1.0, 0.0],
  __pyx_t_33 = PyList_New(5); if (unlikely(!__pyx_t_33)) __PYX_ERR(1, 9575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_33);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_33, 0, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_33, 1, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_33, 2, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_33, 3, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyList_SET_ITEM(__pyx_t_33, 4, __pyx_float_0_0);
/* … */
  __pyx_t_28 = PyTuple_New(5); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 9575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_GIVEREF(__pyx_t_33);
  PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_33);
  __Pyx_GIVEREF(__pyx_t_32);
  PyTuple_SET_ITEM(__pyx_t_28, 1, __pyx_t_32);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_28, 2, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_30);
  PyTuple_SET_ITEM(__pyx_t_28, 3, __pyx_t_30);
  __Pyx_GIVEREF(__pyx_t_29);
  PyTuple_SET_ITEM(__pyx_t_28, 4, __pyx_t_29);
  __pyx_t_33 = 0;
  __pyx_t_32 = 0;
  __pyx_t_2 = 0;
  __pyx_t_30 = 0;
  __pyx_t_29 = 0;
+09576:         [-1.0, -1.0, -1.0, 0.0,  1.0],
  __pyx_t_32 = PyList_New(5); if (unlikely(!__pyx_t_32)) __PYX_ERR(1, 9576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_32, 0, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_32, 1, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_32, 2, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyList_SET_ITEM(__pyx_t_32, 3, __pyx_float_0_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_32, 4, __pyx_float_1_0);
+09577:         [-1.0, -1.0,  0.0, 1.0,  1.0],
  __pyx_t_2 = PyList_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_float_0_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_2, 3, __pyx_float_1_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_2, 4, __pyx_float_1_0);
+09578:         [-1.0,  0.0,  1.0, 1.0,  1.0],
  __pyx_t_30 = PyList_New(5); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_INCREF(__pyx_float_neg_1_0);
  __Pyx_GIVEREF(__pyx_float_neg_1_0);
  PyList_SET_ITEM(__pyx_t_30, 0, __pyx_float_neg_1_0);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyList_SET_ITEM(__pyx_t_30, 1, __pyx_float_0_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_30, 2, __pyx_float_1_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_30, 3, __pyx_float_1_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_30, 4, __pyx_float_1_0);
+09579:         [ 0.0,  1.0,  1.0, 1.0,  1.0])).astype(dtype=numpy.float32, order='C')
  __pyx_t_29 = PyList_New(5); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 9579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyList_SET_ITEM(__pyx_t_29, 0, __pyx_float_0_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_29, 1, __pyx_float_1_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_29, 2, __pyx_float_1_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_29, 3, __pyx_float_1_0);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyList_SET_ITEM(__pyx_t_29, 4, __pyx_float_1_0);
/* … */
  __pyx_t_28 = __Pyx_PyObject_GetAttrStr(__pyx_t_29, __pyx_n_s_astype); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 9579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  __pyx_t_29 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 9579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_GetModuleGlobalName(__pyx_t_31, __pyx_n_s_numpy); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 9579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_31, __pyx_n_s_float32); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  if (PyDict_SetItem(__pyx_t_29, __pyx_n_s_dtype, __pyx_t_30) < 0) __PYX_ERR(1, 9579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  if (PyDict_SetItem(__pyx_t_29, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 9579, __pyx_L1_error)
  __pyx_t_30 = __Pyx_PyObject_Call(__pyx_t_28, __pyx_empty_tuple, __pyx_t_29); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EMBOSS_KERNEL, __pyx_t_30) < 0) __PYX_ERR(1, 9573, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
 09580: 
 09581: @cython.binding(False)
 09582: @cython.binding(False)
 09583: @cython.boundscheck(False)
 09584: @cython.wraparound(False)
 09585: @cython.nonecheck(False)
 09586: @cython.cdivision(True)
 09587: @cython.profile(False)
+09588: cdef object emboss5x5_c(unsigned char [:, :, :] rgb_array_):
static PyObject *__pyx_f_12PygameShader_6shader_emboss5x5_c(__Pyx_memviewslice __pyx_v_rgb_array_) {
  float __pyx_v_k_weight;
  int __pyx_v_k_length;
  int __pyx_v_half_kernel;
  int __pyx_v_w;
  int __pyx_v_h;
  __Pyx_memviewslice __pyx_v_kernel = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED float __pyx_v_kernel_weight;
  short __pyx_v_kernel_half;
  __Pyx_memviewslice __pyx_v_emboss = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED int __pyx_v_kernel_length;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_xx;
  int __pyx_v_yy;
  unsigned short __pyx_v_red;
  unsigned short __pyx_v_green;
  unsigned short __pyx_v_blue;
  short __pyx_v_kernel_offset_y;
  short __pyx_v_kernel_offset_x;
  float __pyx_v_r;
  float __pyx_v_g;
  float __pyx_v_b;
  float __pyx_v_k;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("emboss5x5_c", 0);
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_30);
  __Pyx_XDECREF(__pyx_t_31);
  __Pyx_AddTraceback("PygameShader.shader.emboss5x5_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_kernel, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_emboss, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09589: 
+09590:     cdef float k_weight = numpy.sum(EMBOSS_KERNEL)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_EMBOSS_KERNEL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 9590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_k_weight = __pyx_t_5;
+09591:     cdef int k_length = <int>len(EMBOSS_KERNEL)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_EMBOSS_KERNEL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(1, 9591, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_k_length = ((int)__pyx_t_6);
+09592:     cdef int half_kernel = <int>len(EMBOSS_KERNEL) >> 1
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_EMBOSS_KERNEL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(1, 9592, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_half_kernel = (((int)__pyx_t_6) >> 1);
 09593: 
 09594:     # texture sizes
 09595:     cdef int w, h
+09596:     w = <object>rgb_array_.shape[0]
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_rgb_array_.shape[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9596, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_w = __pyx_t_7;
+09597:     h = <object>rgb_array_.shape[1]
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_rgb_array_.shape[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9597, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_h = __pyx_t_7;
 09598: 
 09599:     cdef:
+09600:         float [:, :] kernel = EMBOSS_KERNEL
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_EMBOSS_KERNEL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 9600, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_kernel = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+09601:         float kernel_weight = k_weight
  __pyx_v_kernel_weight = __pyx_v_k_weight;
+09602:         short kernel_half = half_kernel
  __pyx_v_kernel_half = __pyx_v_half_kernel;
+09603:         unsigned char [:, :, ::1] emboss = empty((h, w, 3), order='C', dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_int_3);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9603, __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_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 9603, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_emboss = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+09604:         int kernel_length = k_length
  __pyx_v_kernel_length = __pyx_v_k_length;
 09605:         int x, y, xx, yy
 09606:         unsigned short red, green, blue,
 09607:         short kernel_offset_y, kernel_offset_x
 09608:         float r, g, b, k
 09609: 
+09610:     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:;
      }
  }
 09611: 
+09612:         for x in prange(0, w, schedule='static', num_threads=THREADS):
        __pyx_t_7 = __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_11 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset_x) lastprivate(__pyx_v_kernel_offset_y) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_7 = __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_11 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset_x) lastprivate(__pyx_v_kernel_offset_y) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_10);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((float)__PYX_NAN());
                            __pyx_v_blue = ((unsigned short)0xbad0bad0);
                            __pyx_v_g = ((float)__PYX_NAN());
                            __pyx_v_green = ((unsigned short)0xbad0bad0);
                            __pyx_v_k = ((float)__PYX_NAN());
                            __pyx_v_kernel_offset_x = ((short)0xbad0bad0);
                            __pyx_v_kernel_offset_y = ((short)0xbad0bad0);
                            __pyx_v_r = ((float)__PYX_NAN());
                            __pyx_v_red = ((unsigned short)0xbad0bad0);
                            __pyx_v_xx = ((int)0xbad0bad0);
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_yy = ((int)0xbad0bad0);
 09613: 
+09614:             for y in range(0, h):
                            __pyx_t_12 = __pyx_v_h;
                            __pyx_t_13 = __pyx_t_12;
                            for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
                              __pyx_v_y = __pyx_t_14;
 09615: 
+09616:                 r, g, b = 0, 0, 0
                              __pyx_t_5 = 0.0;
                              __pyx_t_15 = 0.0;
                              __pyx_t_16 = 0.0;
                              __pyx_v_r = __pyx_t_5;
                              __pyx_v_g = __pyx_t_15;
                              __pyx_v_b = __pyx_t_16;
 09617: 
+09618:                 for kernel_offset_y in range(-kernel_half, kernel_half + 1):
                              __pyx_t_17 = (__pyx_v_kernel_half + 1);
                              __pyx_t_18 = __pyx_t_17;
                              for (__pyx_t_19 = (-__pyx_v_kernel_half); __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
                                __pyx_v_kernel_offset_y = __pyx_t_19;
 09619: 
+09620:                     for kernel_offset_x in range(-kernel_half, kernel_half + 1):
                                __pyx_t_20 = (__pyx_v_kernel_half + 1);
                                __pyx_t_21 = __pyx_t_20;
                                for (__pyx_t_22 = (-__pyx_v_kernel_half); __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                                  __pyx_v_kernel_offset_x = __pyx_t_22;
 09621: 
+09622:                         xx = x + kernel_offset_x
                                  __pyx_v_xx = (__pyx_v_x + __pyx_v_kernel_offset_x);
+09623:                         yy = y + kernel_offset_y
                                  __pyx_v_yy = (__pyx_v_y + __pyx_v_kernel_offset_y);
 09624: 
+09625:                         if xx < 0:
                                  __pyx_t_23 = ((__pyx_v_xx < 0) != 0);
                                  if (__pyx_t_23) {
/* … */
                                    goto __pyx_L16;
                                  }
+09626:                             xx = 0
                                    __pyx_v_xx = 0;
+09627:                         elif xx > w:
                                  __pyx_t_23 = ((__pyx_v_xx > __pyx_v_w) != 0);
                                  if (__pyx_t_23) {
/* … */
                                  }
                                  __pyx_L16:;
+09628:                             xx = w
                                    __pyx_v_xx = __pyx_v_w;
 09629: 
+09630:                         if yy < 0:
                                  __pyx_t_23 = ((__pyx_v_yy < 0) != 0);
                                  if (__pyx_t_23) {
/* … */
                                    goto __pyx_L17;
                                  }
+09631:                             yy = 0
                                    __pyx_v_yy = 0;
+09632:                         elif yy > h:
                                  __pyx_t_23 = ((__pyx_v_yy > __pyx_v_h) != 0);
                                  if (__pyx_t_23) {
/* … */
                                  }
                                  __pyx_L17:;
+09633:                             yy = h
                                    __pyx_v_yy = __pyx_v_h;
 09634: 
 09635: 
 09636:                         red, green, blue = \
+09637:                             rgb_array_[xx, yy, 0], \
                                  __pyx_t_24 = __pyx_v_xx;
                                  __pyx_t_25 = __pyx_v_yy;
                                  __pyx_t_26 = 0;
                                  __pyx_t_27 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_24 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[2]) )));
+09638:                             rgb_array_[xx, yy, 1],\
                                  __pyx_t_26 = __pyx_v_xx;
                                  __pyx_t_25 = __pyx_v_yy;
                                  __pyx_t_24 = 1;
                                  __pyx_t_28 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_26 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_24 * __pyx_v_rgb_array_.strides[2]) )));
+09639:                             rgb_array_[xx, yy, 2]
                                  __pyx_t_24 = __pyx_v_xx;
                                  __pyx_t_25 = __pyx_v_yy;
                                  __pyx_t_26 = 2;
                                  __pyx_t_29 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_24 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[2]) )));
                                  __pyx_v_red = __pyx_t_27;
                                  __pyx_v_green = __pyx_t_28;
                                  __pyx_v_blue = __pyx_t_29;
 09640: 
+09641:                         k = kernel[kernel_offset_y + kernel_half, kernel_offset_x + kernel_half]
                                  __pyx_t_26 = (__pyx_v_kernel_offset_y + __pyx_v_kernel_half);
                                  __pyx_t_25 = (__pyx_v_kernel_offset_x + __pyx_v_kernel_half);
                                  __pyx_v_k = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_kernel.data + __pyx_t_26 * __pyx_v_kernel.strides[0]) ) + __pyx_t_25 * __pyx_v_kernel.strides[1]) )));
+09642:                         r = r + red * k
                                  __pyx_v_r = (__pyx_v_r + (__pyx_v_red * __pyx_v_k));
+09643:                         g = g + green * k
                                  __pyx_v_g = (__pyx_v_g + (__pyx_v_green * __pyx_v_k));
+09644:                         b = b + blue * k
                                  __pyx_v_b = (__pyx_v_b + (__pyx_v_blue * __pyx_v_k));
                                }
                              }
 09645: 
+09646:                 if r < 0:
                              __pyx_t_23 = ((__pyx_v_r < 0.0) != 0);
                              if (__pyx_t_23) {
/* … */
                              }
+09647:                     r = 0
                                __pyx_v_r = 0.0;
+09648:                 if g < 0:
                              __pyx_t_23 = ((__pyx_v_g < 0.0) != 0);
                              if (__pyx_t_23) {
/* … */
                              }
+09649:                     g = 0
                                __pyx_v_g = 0.0;
+09650:                 if b < 0:
                              __pyx_t_23 = ((__pyx_v_b < 0.0) != 0);
                              if (__pyx_t_23) {
/* … */
                              }
+09651:                     b = 0
                                __pyx_v_b = 0.0;
+09652:                 if r > 255:
                              __pyx_t_23 = ((__pyx_v_r > 255.0) != 0);
                              if (__pyx_t_23) {
/* … */
                              }
+09653:                     r= 255
                                __pyx_v_r = 255.0;
+09654:                 if g > 255:
                              __pyx_t_23 = ((__pyx_v_g > 255.0) != 0);
                              if (__pyx_t_23) {
/* … */
                              }
+09655:                     g = 255
                                __pyx_v_g = 255.0;
+09656:                 if b > 255:
                              __pyx_t_23 = ((__pyx_v_b > 255.0) != 0);
                              if (__pyx_t_23) {
/* … */
                              }
+09657:                     b = 255
                                __pyx_v_b = 255.0;
 09658: 
+09659:                 emboss[y, x, 0], emboss[y, x, 1], \
                              __pyx_t_25 = __pyx_v_y;
                              __pyx_t_26 = __pyx_v_x;
                              __pyx_t_24 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_emboss.data + __pyx_t_25 * __pyx_v_emboss.strides[0]) ) + __pyx_t_26 * __pyx_v_emboss.strides[1]) )) + __pyx_t_24)) )) = __pyx_t_29;
                              __pyx_t_24 = __pyx_v_y;
                              __pyx_t_26 = __pyx_v_x;
                              __pyx_t_25 = 1;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_emboss.data + __pyx_t_24 * __pyx_v_emboss.strides[0]) ) + __pyx_t_26 * __pyx_v_emboss.strides[1]) )) + __pyx_t_25)) )) = __pyx_t_28;
+09660:                 emboss[y, x, 2] = <unsigned char>r, <unsigned char>g, <unsigned char>b
                              __pyx_t_29 = ((unsigned char)__pyx_v_r);
                              __pyx_t_28 = ((unsigned char)__pyx_v_g);
                              __pyx_t_27 = ((unsigned char)__pyx_v_b);
/* … */
                              __pyx_t_25 = __pyx_v_y;
                              __pyx_t_26 = __pyx_v_x;
                              __pyx_t_24 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_emboss.data + __pyx_t_25 * __pyx_v_emboss.strides[0]) ) + __pyx_t_26 * __pyx_v_emboss.strides[1]) )) + __pyx_t_24)) )) = __pyx_t_27;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 09661: 
+09662:     return frombuffer(asarray(emboss), (w, h), 'RGB')
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_30 = __pyx_memoryview_fromslice(__pyx_v_emboss, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_31 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_31 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_31)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_31);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_31) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_31, __pyx_t_30) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_30);
  __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_30 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_31 = PyTuple_New(2); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 9662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_30);
  PyTuple_SET_ITEM(__pyx_t_31, 1, __pyx_t_30);
  __pyx_t_1 = 0;
  __pyx_t_30 = 0;
  __pyx_t_30 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_30 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_30)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_30);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[4] = {__pyx_t_30, __pyx_t_2, __pyx_t_31, __pyx_n_s_RGB};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9662, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[4] = {__pyx_t_30, __pyx_t_2, __pyx_t_31, __pyx_n_s_RGB};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9662, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9662, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_30) {
      __Pyx_GIVEREF(__pyx_t_30); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_30); __pyx_t_30 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_7, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_31);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_7, __pyx_t_31);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_7, __pyx_n_s_RGB);
    __pyx_t_2 = 0;
    __pyx_t_31 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9662, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 09663: 
 09664: 
 09665: 
 09666: 
 09667: 
 09668: @cython.binding(False)
 09669: @cython.binding(False)
 09670: @cython.boundscheck(False)
 09671: @cython.wraparound(False)
 09672: @cython.nonecheck(False)
 09673: @cython.cdivision(True)
 09674: @cython.profile(False)
+09675: cdef object bilinear_c(
static PyObject *__pyx_f_12PygameShader_6shader_bilinear_c(__Pyx_memviewslice __pyx_v_rgb_array_, int __pyx_v_new_width, int __pyx_v_new_height, struct __pyx_opt_args_12PygameShader_6shader_bilinear_c *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_AddTraceback("PygameShader.shader.bilinear_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_rgb, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_bilinear_c {
  int __pyx_n;
  PyObject *fx;
  PyObject *fy;
};
 09676:         unsigned char [:, :, :] rgb_array_,
 09677:         int new_width, int new_height,
+09678:         fx=None, fy=None):
  PyObject *__pyx_v_fx = ((PyObject *)Py_None);
  PyObject *__pyx_v_fy = ((PyObject *)Py_None);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  float __pyx_v_rowscale;
  float __pyx_v_colscale;
  float __pyx_v_original_x;
  float __pyx_v_original_y;
  unsigned int __pyx_v_bl;
  unsigned int __pyx_v_br;
  unsigned int __pyx_v_tl;
  unsigned int __pyx_v_tr;
  unsigned int __pyx_v_modxiplusonelim;
  unsigned int __pyx_v_modyiplusonelim;
  int __pyx_v_modxi;
  int __pyx_v_modyi;
  int __pyx_v_x;
  int __pyx_v_y;
  float __pyx_v_modxf;
  float __pyx_v_modyf;
  float __pyx_v_b;
  float __pyx_v_t;
  float __pyx_v_xf;
  __Pyx_memviewslice __pyx_v_new_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilinear_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fx = __pyx_optional_args->fx;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_fy = __pyx_optional_args->fy;
      }
    }
  }
 09679: 
 09680:     cdef Py_ssize_t w, h
+09681:     w, h = rgb_array_.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array_.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 09682: 
 09683:     cdef:
 09684:         float rowscale, colscale
 09685:         float original_x, original_y
 09686:         unsigned int bl, br, tl, tr,\
 09687:             modxiplusonelim, modyiplusonelim
 09688:         int modxi, modyi, x, y, chan
 09689:         float modxf, modyf, b, t, xf
 09690: 
+09691:     rowscale = <float>w / <float>new_width
  __pyx_v_rowscale = (((float)__pyx_v_w) / ((float)__pyx_v_new_width));
+09692:     colscale = <float>h / <float>new_height
  __pyx_v_colscale = (((float)__pyx_v_h) / ((float)__pyx_v_new_height));
 09693: 
+09694:     if fx is not None:
  __pyx_t_4 = (__pyx_v_fx != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {
/* … */
  }
+09695:         new_width = <int> (w * fx)
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9695, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyNumber_Multiply(__pyx_t_6, __pyx_v_fx); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9695, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9695, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_new_width = ((int)__pyx_t_8);
+09696:     if fy is not None:
  __pyx_t_5 = (__pyx_v_fy != Py_None);
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {
/* … */
  }
+09697:        new_height = <int>(h * fy)
    __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyNumber_Multiply(__pyx_t_7, __pyx_v_fy); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9697, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_new_height = ((int)__pyx_t_8);
 09698: 
 09699:     cdef unsigned char [: , :, :] new_rgb = \
+09700:         numpy.empty((new_width, new_height, 3), dtype=numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_new_width); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_new_height); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_int_3);
  __pyx_t_6 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_uint8); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_11, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(1, 9700, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_new_rgb = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
 09701: 
+09702:     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:;
      }
  }
+09703:         for x in prange(0, new_width, schedule='static', num_threads=THREADS):
        __pyx_t_8 = __pyx_v_new_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_14 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bl) lastprivate(__pyx_v_br) lastprivate(__pyx_v_modxf) lastprivate(__pyx_v_modxi) lastprivate(__pyx_v_modxiplusonelim) lastprivate(__pyx_v_modyf) lastprivate(__pyx_v_modyi) lastprivate(__pyx_v_modyiplusonelim) lastprivate(__pyx_v_original_x) lastprivate(__pyx_v_original_y) lastprivate(__pyx_v_t) lastprivate(__pyx_v_tl) lastprivate(__pyx_v_tr) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xf) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_8 = __pyx_v_new_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_14 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bl) lastprivate(__pyx_v_br) lastprivate(__pyx_v_modxf) lastprivate(__pyx_v_modxi) lastprivate(__pyx_v_modxiplusonelim) lastprivate(__pyx_v_modyf) lastprivate(__pyx_v_modyi) lastprivate(__pyx_v_modyiplusonelim) lastprivate(__pyx_v_original_x) lastprivate(__pyx_v_original_y) lastprivate(__pyx_v_t) lastprivate(__pyx_v_tl) lastprivate(__pyx_v_tr) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xf) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_14; __pyx_t_13++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_13);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((float)__PYX_NAN());
                            __pyx_v_bl = ((unsigned int)0xbad0bad0);
                            __pyx_v_br = ((unsigned int)0xbad0bad0);
                            __pyx_v_modxf = ((float)__PYX_NAN());
                            __pyx_v_modxi = ((int)0xbad0bad0);
                            __pyx_v_modxiplusonelim = ((unsigned int)0xbad0bad0);
                            __pyx_v_modyf = ((float)__PYX_NAN());
                            __pyx_v_modyi = ((int)0xbad0bad0);
                            __pyx_v_modyiplusonelim = ((unsigned int)0xbad0bad0);
                            __pyx_v_original_x = ((float)__PYX_NAN());
                            __pyx_v_original_y = ((float)__PYX_NAN());
                            __pyx_v_t = ((float)__PYX_NAN());
                            __pyx_v_tl = ((unsigned int)0xbad0bad0);
                            __pyx_v_tr = ((unsigned int)0xbad0bad0);
                            __pyx_v_xf = ((float)__PYX_NAN());
                            __pyx_v_y = ((int)0xbad0bad0);
+09704:             for y in prange(new_height):
                            __pyx_t_15 = __pyx_v_new_height;
                            if ((1 == 0)) abort();
                            {
                                __pyx_t_17 = (__pyx_t_15 - 0 + 1 - 1/abs(1)) / 1;
                                if (__pyx_t_17 > 0)
                                {
                                    #if 0
                                    #pragma omp parallel
                                    #endif /* _OPENMP */
                                    {
                                        #if 0
                                        #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_bl) lastprivate(__pyx_v_br) lastprivate(__pyx_v_modxf) lastprivate(__pyx_v_modxi) lastprivate(__pyx_v_modxiplusonelim) lastprivate(__pyx_v_modyf) lastprivate(__pyx_v_modyi) lastprivate(__pyx_v_modyiplusonelim) lastprivate(__pyx_v_original_x) lastprivate(__pyx_v_original_y) lastprivate(__pyx_v_t) lastprivate(__pyx_v_tl) lastprivate(__pyx_v_tr) lastprivate(__pyx_v_xf) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y)
                                        #endif /* _OPENMP */
                                        for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_17; __pyx_t_16++){
                                            {
                                                __pyx_v_y = (int)(0 + 1 * __pyx_t_16);
                                                /* Initialize private variables to invalid values */
                                                __pyx_v_b = ((float)__PYX_NAN());
                                                __pyx_v_bl = ((unsigned int)0xbad0bad0);
                                                __pyx_v_br = ((unsigned int)0xbad0bad0);
                                                __pyx_v_modxf = ((float)__PYX_NAN());
                                                __pyx_v_modxi = ((int)0xbad0bad0);
                                                __pyx_v_modxiplusonelim = ((unsigned int)0xbad0bad0);
                                                __pyx_v_modyf = ((float)__PYX_NAN());
                                                __pyx_v_modyi = ((int)0xbad0bad0);
                                                __pyx_v_modyiplusonelim = ((unsigned int)0xbad0bad0);
                                                __pyx_v_original_x = ((float)__PYX_NAN());
                                                __pyx_v_original_y = ((float)__PYX_NAN());
                                                __pyx_v_t = ((float)__PYX_NAN());
                                                __pyx_v_tl = ((unsigned int)0xbad0bad0);
                                                __pyx_v_tr = ((unsigned int)0xbad0bad0);
                                                __pyx_v_xf = ((float)__PYX_NAN());
+09705:                 original_x = <float>x * rowscale
                                                __pyx_v_original_x = (((float)__pyx_v_x) * __pyx_v_rowscale);
+09706:                 original_y = <float>y * colscale
                                                __pyx_v_original_y = (((float)__pyx_v_y) * __pyx_v_colscale);
 09707: 
+09708:                 modxi = <int>original_x
                                                __pyx_v_modxi = ((int)__pyx_v_original_x);
+09709:                 modyi = <int>original_y
                                                __pyx_v_modyi = ((int)__pyx_v_original_y);
+09710:                 modxf = original_x - modxi
                                                __pyx_v_modxf = (__pyx_v_original_x - __pyx_v_modxi);
+09711:                 modyf = original_y - modyi
                                                __pyx_v_modyf = (__pyx_v_original_y - __pyx_v_modyi);
+09712:                 modxiplusonelim = min(modxi + 1, h - 1)
                                                __pyx_t_3 = (__pyx_v_h - 1);
                                                __pyx_t_18 = (__pyx_v_modxi + 1);
                                                if (((__pyx_t_3 < __pyx_t_18) != 0)) {
                                                  __pyx_t_2 = __pyx_t_3;
                                                } else {
                                                  __pyx_t_2 = __pyx_t_18;
                                                }
                                                __pyx_v_modxiplusonelim = __pyx_t_2;
+09713:                 modyiplusonelim = min(modyi + 1, w - 1)
                                                __pyx_t_2 = (__pyx_v_w - 1);
                                                __pyx_t_18 = (__pyx_v_modyi + 1);
                                                if (((__pyx_t_2 < __pyx_t_18) != 0)) {
                                                  __pyx_t_3 = __pyx_t_2;
                                                } else {
                                                  __pyx_t_3 = __pyx_t_18;
                                                }
                                                __pyx_v_modyiplusonelim = __pyx_t_3;
+09714:                 xf = <float>1.0 - modxf
                                                __pyx_v_xf = (((float)1.0) - __pyx_v_modxf);
 09715: 
+09716:                 bl = rgb_array_[modyi, modxi, 0]
                                                __pyx_t_19 = __pyx_v_modyi;
                                                __pyx_t_20 = __pyx_v_modxi;
                                                __pyx_t_21 = 0;
                                                __pyx_v_bl = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_19 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
+09717:                 br = rgb_array_[modyi, modxiplusonelim, 0]
                                                __pyx_t_21 = __pyx_v_modyi;
                                                __pyx_t_22 = __pyx_v_modxiplusonelim;
                                                __pyx_t_20 = 0;
                                                __pyx_v_br = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_21 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[2]) )));
+09718:                 tl = rgb_array_[modyiplusonelim, modxi, 0]
                                                __pyx_t_22 = __pyx_v_modyiplusonelim;
                                                __pyx_t_20 = __pyx_v_modxi;
                                                __pyx_t_21 = 0;
                                                __pyx_v_tl = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_22 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
+09719:                 tr = rgb_array_[modyiplusonelim, modxiplusonelim, 0]
                                                __pyx_t_22 = __pyx_v_modyiplusonelim;
                                                __pyx_t_23 = __pyx_v_modxiplusonelim;
                                                __pyx_t_21 = 0;
                                                __pyx_v_tr = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_22 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
 09720: 
 09721:                 # Calculate interpolation
+09722:                 b = modxf * br + xf * bl
                                                __pyx_v_b = ((__pyx_v_modxf * __pyx_v_br) + (__pyx_v_xf * __pyx_v_bl));
+09723:                 t = modxf * tr + xf * tl
                                                __pyx_v_t = ((__pyx_v_modxf * __pyx_v_tr) + (__pyx_v_xf * __pyx_v_tl));
 09724: 
+09725:                 new_rgb[x, y, 0] = <int> (modyf * t + (<float> 1.0 - modyf) * b + <float> 0.5)
                                                __pyx_t_21 = __pyx_v_x;
                                                __pyx_t_20 = __pyx_v_y;
                                                __pyx_t_19 = 0;
                                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_rgb.data + __pyx_t_21 * __pyx_v_new_rgb.strides[0]) ) + __pyx_t_20 * __pyx_v_new_rgb.strides[1]) ) + __pyx_t_19 * __pyx_v_new_rgb.strides[2]) )) = ((int)(((__pyx_v_modyf * __pyx_v_t) + ((((float)1.0) - __pyx_v_modyf) * __pyx_v_b)) + ((float)0.5)));
 09726: 
+09727:                 bl = rgb_array_[modyi, modxi, 1]
                                                __pyx_t_19 = __pyx_v_modyi;
                                                __pyx_t_20 = __pyx_v_modxi;
                                                __pyx_t_21 = 1;
                                                __pyx_v_bl = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_19 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
+09728:                 br = rgb_array_[modyi, modxiplusonelim, 1]
                                                __pyx_t_21 = __pyx_v_modyi;
                                                __pyx_t_23 = __pyx_v_modxiplusonelim;
                                                __pyx_t_20 = 1;
                                                __pyx_v_br = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_21 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[2]) )));
+09729:                 tl = rgb_array_[modyiplusonelim, modxi, 1]
                                                __pyx_t_23 = __pyx_v_modyiplusonelim;
                                                __pyx_t_20 = __pyx_v_modxi;
                                                __pyx_t_21 = 1;
                                                __pyx_v_tl = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_23 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
+09730:                 tr = rgb_array_[modyiplusonelim, modxiplusonelim, 1]
                                                __pyx_t_23 = __pyx_v_modyiplusonelim;
                                                __pyx_t_22 = __pyx_v_modxiplusonelim;
                                                __pyx_t_21 = 1;
                                                __pyx_v_tr = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_23 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
 09731: 
 09732:                 # Calculate interpolation
+09733:                 b = modxf * br + xf * bl
                                                __pyx_v_b = ((__pyx_v_modxf * __pyx_v_br) + (__pyx_v_xf * __pyx_v_bl));
+09734:                 t = modxf * tr + xf * tl
                                                __pyx_v_t = ((__pyx_v_modxf * __pyx_v_tr) + (__pyx_v_xf * __pyx_v_tl));
 09735: 
+09736:                 new_rgb[x, y, 1] = <int> (modyf * t + (<float> 1.0 - modyf) * b + <float> 0.5)
                                                __pyx_t_21 = __pyx_v_x;
                                                __pyx_t_20 = __pyx_v_y;
                                                __pyx_t_19 = 1;
                                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_rgb.data + __pyx_t_21 * __pyx_v_new_rgb.strides[0]) ) + __pyx_t_20 * __pyx_v_new_rgb.strides[1]) ) + __pyx_t_19 * __pyx_v_new_rgb.strides[2]) )) = ((int)(((__pyx_v_modyf * __pyx_v_t) + ((((float)1.0) - __pyx_v_modyf) * __pyx_v_b)) + ((float)0.5)));
 09737: 
+09738:                 bl = rgb_array_[modyi, modxi, 2]
                                                __pyx_t_19 = __pyx_v_modyi;
                                                __pyx_t_20 = __pyx_v_modxi;
                                                __pyx_t_21 = 2;
                                                __pyx_v_bl = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_19 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
+09739:                 br = rgb_array_[modyi, modxiplusonelim, 2]
                                                __pyx_t_21 = __pyx_v_modyi;
                                                __pyx_t_22 = __pyx_v_modxiplusonelim;
                                                __pyx_t_20 = 2;
                                                __pyx_v_br = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_21 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[2]) )));
+09740:                 tl = rgb_array_[modyiplusonelim, modxi, 2]
                                                __pyx_t_22 = __pyx_v_modyiplusonelim;
                                                __pyx_t_20 = __pyx_v_modxi;
                                                __pyx_t_21 = 2;
                                                __pyx_v_tl = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_22 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_20 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
+09741:                 tr = rgb_array_[modyiplusonelim, modxiplusonelim, 2]
                                                __pyx_t_22 = __pyx_v_modyiplusonelim;
                                                __pyx_t_23 = __pyx_v_modxiplusonelim;
                                                __pyx_t_21 = 2;
                                                __pyx_v_tr = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_22 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array_.strides[2]) )));
 09742: 
 09743:                 # Calculate interpolation
+09744:                 b = modxf * br + xf * bl
                                                __pyx_v_b = ((__pyx_v_modxf * __pyx_v_br) + (__pyx_v_xf * __pyx_v_bl));
+09745:                 t = modxf * tr + xf * tl
                                                __pyx_v_t = ((__pyx_v_modxf * __pyx_v_tr) + (__pyx_v_xf * __pyx_v_tl));
 09746: 
+09747:                 new_rgb[x, y, 2] = <int> (modyf * t + (<float> 1.0 - modyf) * b + <float> 0.5)
                                                __pyx_t_21 = __pyx_v_x;
                                                __pyx_t_20 = __pyx_v_y;
                                                __pyx_t_19 = 2;
                                                *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_rgb.data + __pyx_t_21 * __pyx_v_new_rgb.strides[0]) ) + __pyx_t_20 * __pyx_v_new_rgb.strides[1]) ) + __pyx_t_19 * __pyx_v_new_rgb.strides[2]) )) = ((int)(((__pyx_v_modyf * __pyx_v_t) + ((((float)1.0) - __pyx_v_modyf) * __pyx_v_b)) + ((float)0.5)));
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 09748: 
 09749: 
 09750: 
+09751:     return frombuffer(new_rgb, (new_height, new_width), 'RGB')
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_new_rgb, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_new_height); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_new_width); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_24 = PyTuple_New(2); if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 9751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_24, 1, __pyx_t_6);
  __pyx_t_7 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_9, __pyx_t_24, __pyx_n_s_RGB};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 9751, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_9, __pyx_t_24, __pyx_n_s_RGB};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 9751, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_8, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_24);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_8, __pyx_t_24);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_8, __pyx_n_s_RGB);
    __pyx_t_9 = 0;
    __pyx_t_24 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_7, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 9751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_r = __pyx_t_11;
  __pyx_t_11 = 0;
  goto __pyx_L0;
 09752: 
 09753: 
 09754: # -------------------------------------------------------------------------------------------------------------------
 09755: 
 09756: 
 09757: 
 09758: 
 09759: @cython.binding(False)
 09760: @cython.boundscheck(False)
 09761: @cython.wraparound(False)
 09762: @cython.nonecheck(False)
 09763: @cython.cdivision(True)
 09764: @cython.profile(False)
+09765: cdef heatwave_array24_horiz_c(unsigned char [:, :, :] rgb_array,
static PyObject *__pyx_f_12PygameShader_6shader_heatwave_array24_horiz_c(__Pyx_memviewslice __pyx_v_rgb_array, __Pyx_memviewslice __pyx_v_mask_array, float __pyx_v_frequency, float __pyx_v_amplitude, struct __pyx_opt_args_12PygameShader_6shader_heatwave_array24_horiz_c *__pyx_optional_args) {
  float __pyx_v_attenuation = ((float)0.10);
  unsigned char __pyx_v_threshold = ((unsigned char)64);
  int __pyx_v_w;
  int __pyx_v_h;
  __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_xx;
  float __pyx_v_distortion;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("heatwave_array24_horiz_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_attenuation = __pyx_optional_args->attenuation;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_threshold = __pyx_optional_args->threshold;
      }
    }
  }
/* … */
  /* 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_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_AddTraceback("PygameShader.shader.heatwave_array24_horiz_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_heatwave_array24_horiz_c {
  int __pyx_n;
  float attenuation;
  unsigned char threshold;
};
 09766:                             unsigned char [:, :] mask_array,
 09767:                             float frequency, float amplitude, float attenuation=0.10,
 09768:                             unsigned char threshold=64):
 09769:     """
 09770:     HORIZONTAL HEATWAVE
 09771: 
 09772:     DISTORTION EQUATION:
 09773:     distortion = sin(x * attenuation + frequency) * amplitude * mask_array[x, y]
 09774:     Amplitude is equivalent to ((frequency % 2) / 1000.0) and will define the maximum pixel displacement.
 09775:     The highest the frequency the lowest the heat wave
 09776: 
 09777: 
 09778:     :param rgb_array: numpy.ndarray or MemoryViewSlice, array shape (w, h, 3) containing RGB values
 09779:     :param mask_array: numpy.ndarray or  MemoryViewSlice shape (w, h) containing alpha values
 09780:     :param frequency: float; increment value. The highest the frequency the lowest the heat wave
 09781:     :param amplitude: float; variable amplitude. Max amplitude is 10e-3 * 255 = 2.55
 09782:     when alpha is 255 otherwise 10e-3 * alpha.
 09783:     :param attenuation: float; default 0.10
 09784:     :param threshold: unsigned char; Compare the alpha value with the threshold.
 09785:      if alpha value > threshold, apply the displacement to the texture otherwise no change
 09786:     :return: Return a pygame.Surface 24 bit format
 09787:     """
 09788: 
 09789: 
 09790:     cdef int w, h
+09791:     w, h = (<object>rgb_array).shape[:2]
  __pyx_t_1 = __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_1)) __PYX_ERR(1, 9791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_2, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 9791, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 9791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 9791, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 9791, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9791, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9791, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 09792: 
 09793:     cdef:
+09794:         unsigned char [:, :, ::1] new_array = empty((h, w, 3), dtype=numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_int_3);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 9794, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_new_array = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+09795:         int x = 0, y = 0, xx, yy
  __pyx_v_x = 0;
  __pyx_v_y = 0;
 09796:         float distortion
 09797: 
 09798: 
+09799:     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:;
      }
  }
+09800:         for x in prange(0, w, schedule='static', num_threads=THREADS):
        __pyx_t_7 = __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_11 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_distortion) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_7 = __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_11 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_distortion) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_10);
                            /* Initialize private variables to invalid values */
                            __pyx_v_distortion = ((float)__PYX_NAN());
                            __pyx_v_xx = ((int)0xbad0bad0);
                            __pyx_v_y = ((int)0xbad0bad0);
+09801:             for y in range(h):
                            __pyx_t_6 = __pyx_v_h;
                            __pyx_t_12 = __pyx_t_6;
                            for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
                              __pyx_v_y = __pyx_t_13;
+09802:                 distortion = sin(x * attenuation + frequency) * amplitude * mask_array[x, y]
                              __pyx_t_14 = __pyx_v_x;
                              __pyx_t_15 = __pyx_v_y;
                              __pyx_v_distortion = ((sin(((__pyx_v_x * __pyx_v_attenuation) + __pyx_v_frequency)) * __pyx_v_amplitude) * (*((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mask_array.data + __pyx_t_14 * __pyx_v_mask_array.strides[0]) ) + __pyx_t_15 * __pyx_v_mask_array.strides[1]) ))));
 09803: 
+09804:                 xx = <int>(x  + distortion + rand() * <float>0.0002)
                              __pyx_v_xx = ((int)((__pyx_v_x + __pyx_v_distortion) + (rand() * ((float)0.0002))));
+09805:                 if xx > w - 1:
                              __pyx_t_16 = ((__pyx_v_xx > (__pyx_v_w - 1)) != 0);
                              if (__pyx_t_16) {
/* … */
                              }
+09806:                     xx = w - 1
                                __pyx_v_xx = (__pyx_v_w - 1);
+09807:                 if xx < 0:
                              __pyx_t_16 = ((__pyx_v_xx < 0) != 0);
                              if (__pyx_t_16) {
/* … */
                              }
+09808:                     xx = 0
                                __pyx_v_xx = 0;
 09809: 
+09810:                 if mask_array[x, y] > threshold:
                              __pyx_t_15 = __pyx_v_x;
                              __pyx_t_14 = __pyx_v_y;
                              __pyx_t_16 = (((*((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mask_array.data + __pyx_t_15 * __pyx_v_mask_array.strides[0]) ) + __pyx_t_14 * __pyx_v_mask_array.strides[1]) ))) > __pyx_v_threshold) != 0);
                              if (__pyx_t_16) {
/* … */
                                goto __pyx_L16;
                              }
+09811:                     new_array[y, x, 0] = rgb_array[xx, y, 0]
                                __pyx_t_14 = __pyx_v_xx;
                                __pyx_t_15 = __pyx_v_y;
                                __pyx_t_17 = 0;
                                __pyx_t_18 = __pyx_v_y;
                                __pyx_t_19 = __pyx_v_x;
                                __pyx_t_20 = 0;
                                *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_18 * __pyx_v_new_array.strides[0]) ) + __pyx_t_19 * __pyx_v_new_array.strides[1]) )) + __pyx_t_20)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_14 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[2]) )));
+09812:                     new_array[y, x, 1] = rgb_array[xx, y, 1]
                                __pyx_t_17 = __pyx_v_xx;
                                __pyx_t_15 = __pyx_v_y;
                                __pyx_t_14 = 1;
                                __pyx_t_20 = __pyx_v_y;
                                __pyx_t_19 = __pyx_v_x;
                                __pyx_t_18 = 1;
                                *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_20 * __pyx_v_new_array.strides[0]) ) + __pyx_t_19 * __pyx_v_new_array.strides[1]) )) + __pyx_t_18)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array.strides[2]) )));
+09813:                     new_array[y, x, 2] = rgb_array[xx, y, 2]
                                __pyx_t_14 = __pyx_v_xx;
                                __pyx_t_15 = __pyx_v_y;
                                __pyx_t_17 = 2;
                                __pyx_t_18 = __pyx_v_y;
                                __pyx_t_19 = __pyx_v_x;
                                __pyx_t_20 = 2;
                                *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_18 * __pyx_v_new_array.strides[0]) ) + __pyx_t_19 * __pyx_v_new_array.strides[1]) )) + __pyx_t_20)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_14 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[2]) )));
 09814:                 else:
+09815:                     new_array[y, x, 0] = rgb_array[x, y, 0]
                              /*else*/ {
                                __pyx_t_17 = __pyx_v_x;
                                __pyx_t_15 = __pyx_v_y;
                                __pyx_t_14 = 0;
                                __pyx_t_20 = __pyx_v_y;
                                __pyx_t_19 = __pyx_v_x;
                                __pyx_t_18 = 0;
                                *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_20 * __pyx_v_new_array.strides[0]) ) + __pyx_t_19 * __pyx_v_new_array.strides[1]) )) + __pyx_t_18)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array.strides[2]) )));
+09816:                     new_array[y, x, 1] = rgb_array[x, y, 1]
                                __pyx_t_14 = __pyx_v_x;
                                __pyx_t_15 = __pyx_v_y;
                                __pyx_t_17 = 1;
                                __pyx_t_18 = __pyx_v_y;
                                __pyx_t_19 = __pyx_v_x;
                                __pyx_t_20 = 1;
                                *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_18 * __pyx_v_new_array.strides[0]) ) + __pyx_t_19 * __pyx_v_new_array.strides[1]) )) + __pyx_t_20)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_14 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_17 * __pyx_v_rgb_array.strides[2]) )));
+09817:                     new_array[y, x, 2] = rgb_array[x, y, 2]
                                __pyx_t_17 = __pyx_v_x;
                                __pyx_t_15 = __pyx_v_y;
                                __pyx_t_14 = 2;
                                __pyx_t_20 = __pyx_v_y;
                                __pyx_t_19 = __pyx_v_x;
                                __pyx_t_18 = 2;
                                *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_20 * __pyx_v_new_array.strides[0]) ) + __pyx_t_19 * __pyx_v_new_array.strides[1]) )) + __pyx_t_18)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_17 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_15 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_14 * __pyx_v_rgb_array.strides[2]) )));
                              }
                              __pyx_L16:;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 09818: 
+09819:     return numpy.asarray(new_array)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __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_4)) __PYX_ERR(1, 9819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;
 09820: 
 09821: 
 09822: @cython.binding(False)
 09823: @cython.binding(False)
 09824: @cython.boundscheck(False)
 09825: @cython.wraparound(False)
 09826: @cython.nonecheck(False)
 09827: @cython.cdivision(True)
 09828: @cython.profile(False)
 09829: 
+09830: cpdef unsigned char[::1] stack_buffer_c(rgb_array_, alpha_, int w, int h, bint transpose=False):
static PyObject *__pyx_pw_12PygameShader_6shader_185stack_buffer_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static __Pyx_memviewslice __pyx_f_12PygameShader_6shader_stack_buffer_c(PyObject *__pyx_v_rgb_array_, PyObject *__pyx_v_alpha_, int __pyx_v_w, int __pyx_v_h, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_stack_buffer_c *__pyx_optional_args) {
  int __pyx_v_transpose = ((int)0);
  CYTHON_UNUSED int __pyx_v_b_length;
  int __pyx_v_new_length;
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_new_buffer = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_flipped_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_index;
  int __pyx_v_k;
  int __pyx_v_w4;
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stack_buffer_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_transpose = __pyx_optional_args->transpose;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __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_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("PygameShader.shader.stack_buffer_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_buffer, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_flipped_array, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_185stack_buffer_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_184stack_buffer_c[] = "\n    Stack RGB & ALPHA MemoryViewSlice C-buffers structures together.\n    If transpose is True, the output MemoryViewSlice is flipped.\n\n    :param h: integer; Texture height\n    :param w: integer; Texture width\n    :param transpose: boolean; Transpose rows and columns (default False)\n    :param rgb_array_: MemoryViewSlice or pygame.BufferProxy (C-buffer type) representing the texture\n    RGB values filled with uint8\n    :param alpha_:  MemoryViewSlice or pygame.BufferProxy (C-buffer type) representing the texture\n    alpha values filled with uint8 \n    :return: Return a contiguous MemoryViewSlice representing RGBA pixel values\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_185stack_buffer_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_rgb_array_ = 0;
  PyObject *__pyx_v_alpha_ = 0;
  int __pyx_v_w;
  int __pyx_v_h;
  int __pyx_v_transpose;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stack_buffer_c (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rgb_array,&__pyx_n_s_alpha,&__pyx_n_s_w,&__pyx_n_s_h,&__pyx_n_s_transpose_2,0};
    PyObject* values[5] = {0,0,0,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  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_rgb_array)) != 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_alpha)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("stack_buffer_c", 0, 4, 5, 1); __PYX_ERR(1, 9830, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("stack_buffer_c", 0, 4, 5, 2); __PYX_ERR(1, 9830, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_h)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("stack_buffer_c", 0, 4, 5, 3); __PYX_ERR(1, 9830, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_transpose_2);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "stack_buffer_c") < 0)) __PYX_ERR(1, 9830, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 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_rgb_array_ = values[0];
    __pyx_v_alpha_ = values[1];
    __pyx_v_w = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_w == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9830, __pyx_L3_error)
    __pyx_v_h = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_h == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9830, __pyx_L3_error)
    if (values[4]) {
      __pyx_v_transpose = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_transpose == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9830, __pyx_L3_error)
    } else {
      __pyx_v_transpose = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("stack_buffer_c", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 9830, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.stack_buffer_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_184stack_buffer_c(__pyx_self, __pyx_v_rgb_array_, __pyx_v_alpha_, __pyx_v_w, __pyx_v_h, __pyx_v_transpose);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_184stack_buffer_c(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rgb_array_, PyObject *__pyx_v_alpha_, int __pyx_v_w, int __pyx_v_h, int __pyx_v_transpose) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stack_buffer_c", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.transpose = __pyx_v_transpose;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_stack_buffer_c(__pyx_v_rgb_array_, __pyx_v_alpha_, __pyx_v_w, __pyx_v_h, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 9830, __pyx_L1_error)
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_t_1, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("PygameShader.shader.stack_buffer_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_stack_buffer_c {
  int __pyx_n;
  int transpose;
};
 09831:     """
 09832:     Stack RGB & ALPHA MemoryViewSlice C-buffers structures together.
 09833:     If transpose is True, the output MemoryViewSlice is flipped.
 09834: 
 09835:     :param h: integer; Texture height
 09836:     :param w: integer; Texture width
 09837:     :param transpose: boolean; Transpose rows and columns (default False)
 09838:     :param rgb_array_: MemoryViewSlice or pygame.BufferProxy (C-buffer type) representing the texture
 09839:     RGB values filled with uint8
 09840:     :param alpha_:  MemoryViewSlice or pygame.BufferProxy (C-buffer type) representing the texture
 09841:     alpha values filled with uint8
 09842:     :return: Return a contiguous MemoryViewSlice representing RGBA pixel values
 09843:     """
 09844: 
 09845:     cdef:
+09846:         int b_length = w * h * 3
  __pyx_v_b_length = ((__pyx_v_w * __pyx_v_h) * 3);
+09847:         int new_length = w * h * 4
  __pyx_v_new_length = ((__pyx_v_w * __pyx_v_h) * 4);
+09848:         unsigned char [:] rgb_array = rgb_array_
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_v_rgb_array_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 9848, __pyx_L1_error)
  __pyx_v_rgb_array = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+09849:         unsigned char [:] alpha = alpha_
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_v_alpha_, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 9849, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+09850:         unsigned char [::1] new_buffer =  numpy.empty(new_length, dtype=numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_new_length); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9850, __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(1, 9850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 9850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_uint8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(1, 9850, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 9850, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_new_buffer = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
+09851:         unsigned char [::1] flipped_array = numpy.empty(new_length, dtype=numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_new_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_uint8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 9851, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_flipped_array = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
+09852:         int i=0, j=0, ii, jj, index, k
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+09853:         int w4 = w * 4
  __pyx_v_w4 = (__pyx_v_w * 4);
 09854: 
+09855:     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_L3_return: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L0;
        }
        __pyx_L5:;
      }
  }
 09856: 
+09857:         for i in prange(0, b_length, 3, schedule='static', num_threads=THREADS):
        __pyx_t_8 = __pyx_v_b_length;
        if ((3 == 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_10 = (__pyx_t_8 - 0 + 3 - 3/abs(3)) / 3;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_jj) schedule(static)
/* … */
        __pyx_t_8 = __pyx_v_b_length;
        if ((3 == 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_10 = (__pyx_t_8 - 0 + 3 - 3/abs(3)) / 3;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_ii) lastprivate(__pyx_v_jj) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_10; __pyx_t_9++){
                        {
                            __pyx_v_i = (int)(0 + 3 * __pyx_t_9);
                            /* Initialize private variables to invalid values */
                            __pyx_v_ii = ((int)0xbad0bad0);
                            __pyx_v_jj = ((int)0xbad0bad0);
+09858:                 ii = i // 3
                            __pyx_v_ii = (__pyx_v_i / 3);
+09859:                 jj = ii * 4
                            __pyx_v_jj = (__pyx_v_ii * 4);
+09860:                 new_buffer[jj]   = rgb_array[i]
                            __pyx_t_11 = __pyx_v_i;
                            __pyx_t_12 = __pyx_v_jj;
                            *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_new_buffer.data) + __pyx_t_12)) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_11 * __pyx_v_rgb_array.strides[0]) )));
+09861:                 new_buffer[jj+1] = rgb_array[i+1]
                            __pyx_t_11 = (__pyx_v_i + 1);
                            __pyx_t_12 = (__pyx_v_jj + 1);
                            *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_new_buffer.data) + __pyx_t_12)) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_11 * __pyx_v_rgb_array.strides[0]) )));
+09862:                 new_buffer[jj+2] = rgb_array[i+2]
                            __pyx_t_11 = (__pyx_v_i + 2);
                            __pyx_t_12 = (__pyx_v_jj + 2);
                            *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_new_buffer.data) + __pyx_t_12)) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_11 * __pyx_v_rgb_array.strides[0]) )));
+09863:                 new_buffer[jj+3] = alpha[ii]
                            __pyx_t_11 = __pyx_v_ii;
                            __pyx_t_12 = (__pyx_v_jj + 3);
                            *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_new_buffer.data) + __pyx_t_12)) )) = (*((unsigned char *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_11 * __pyx_v_alpha.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
 09864: 
+09865:         if transpose:
        __pyx_t_13 = (__pyx_v_transpose != 0);
        if (__pyx_t_13) {
/* … */
        }
      }
+09866:             for i in prange(0, w4, 4, schedule='static', num_threads=THREADS):
          __pyx_t_8 = __pyx_v_w4;
          if ((4 == 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_9 = (__pyx_t_8 - 0 + 4 - 4/abs(4)) / 4;
              if (__pyx_t_9 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(static)
/* … */
          __pyx_t_8 = __pyx_v_w4;
          if ((4 == 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_9 = (__pyx_t_8 - 0 + 4 - 4/abs(4)) / 4;
              if (__pyx_t_9 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_index) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                      #endif /* _OPENMP */
                      for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10++){
                          {
                              __pyx_v_i = (int)(0 + 4 * __pyx_t_10);
                              /* Initialize private variables to invalid values */
                              __pyx_v_index = ((int)0xbad0bad0);
                              __pyx_v_j = ((int)0xbad0bad0);
                              __pyx_v_k = ((int)0xbad0bad0);
+09867:                 for j in range(0, h):
                              __pyx_t_14 = __pyx_v_h;
                              __pyx_t_15 = __pyx_t_14;
                              for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
                                __pyx_v_j = __pyx_t_16;
+09868:                     index = i + (w4 * j)
                                __pyx_v_index = (__pyx_v_i + (__pyx_v_w4 * __pyx_v_j));
+09869:                     k = (j * 4) + (i * h)
                                __pyx_v_k = ((__pyx_v_j * 4) + (__pyx_v_i * __pyx_v_h));
+09870:                     flipped_array[k    ] = new_buffer[index    ]
                                __pyx_t_11 = __pyx_v_index;
                                __pyx_t_12 = __pyx_v_k;
                                *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_flipped_array.data) + __pyx_t_12)) )) = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_new_buffer.data) + __pyx_t_11)) )));
+09871:                     flipped_array[k + 1] = new_buffer[index + 1]
                                __pyx_t_11 = (__pyx_v_index + 1);
                                __pyx_t_12 = (__pyx_v_k + 1);
                                *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_flipped_array.data) + __pyx_t_12)) )) = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_new_buffer.data) + __pyx_t_11)) )));
+09872:                     flipped_array[k + 2] = new_buffer[index + 2]
                                __pyx_t_11 = (__pyx_v_index + 2);
                                __pyx_t_12 = (__pyx_v_k + 2);
                                *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_flipped_array.data) + __pyx_t_12)) )) = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_new_buffer.data) + __pyx_t_11)) )));
+09873:                     flipped_array[k + 3] = new_buffer[index + 3]
                                __pyx_t_11 = (__pyx_v_index + 3);
                                __pyx_t_12 = (__pyx_v_k + 3);
                                *((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_flipped_array.data) + __pyx_t_12)) )) = (*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_new_buffer.data) + __pyx_t_11)) )));
                              }
                          }
                      }
                  }
              }
          }
          #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
+09874:             return flipped_array
          __PYX_INC_MEMVIEW(&__pyx_v_flipped_array, 1);
          __pyx_r = __pyx_v_flipped_array;
          goto __pyx_L3_return;
 09875: 
+09876:     return new_buffer
  __PYX_INC_MEMVIEW(&__pyx_v_new_buffer, 0);
  __pyx_r = __pyx_v_new_buffer;
  goto __pyx_L0;
 09877: 
 09878: @cython.binding(False)
 09879: @cython.binding(False)
 09880: @cython.boundscheck(False)
 09881: @cython.wraparound(False)
 09882: @cython.nonecheck(False)
 09883: @cython.cdivision(True)
 09884: @cython.profile(False)
+09885: cpdef inline float [:, :] array2d_normalized_c(unsigned char [:, :] array):
static PyObject *__pyx_pw_12PygameShader_6shader_187array2d_normalized_c(PyObject *__pyx_self, PyObject *__pyx_arg_array); /*proto*/
static CYTHON_INLINE __Pyx_memviewslice __pyx_f_12PygameShader_6shader_array2d_normalized_c(__Pyx_memviewslice __pyx_v_array, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_v_w;
  int __pyx_v_h;
  CYTHON_UNUSED PyObject *__pyx_v_e = NULL;
  int __pyx_v_i;
  int __pyx_v_j;
  __Pyx_memviewslice __pyx_v_array_f = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array2d_normalized_c", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __pyx_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("PygameShader.shader.array2d_normalized_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_array_f, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_187array2d_normalized_c(PyObject *__pyx_self, PyObject *__pyx_arg_array); /*proto*/
static char __pyx_doc_12PygameShader_6shader_186array2d_normalized_c[] = "\n    NORMALIZED AN ARRAY\n\n    Transform/convert an array shapes (w, h) containing unsigned char values\n    into a MemoryViewSlice (2d array) with float values rescale in range [0 ... 1.0]\n\n    :param array: numpy.array shape (w, h) containing unsigned int values (uint8)\n    :return     : a MemoryViewSlice 2d array shape (w, h) with float values in range [0 ... 1.0]\n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_187array2d_normalized_c(PyObject *__pyx_self, PyObject *__pyx_arg_array) {
  __Pyx_memviewslice __pyx_v_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array2d_normalized_c (wrapper)", 0);
  assert(__pyx_arg_array); {
    __pyx_v_array = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_char(__pyx_arg_array, PyBUF_WRITABLE); if (unlikely(!__pyx_v_array.memview)) __PYX_ERR(1, 9885, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.array2d_normalized_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_186array2d_normalized_c(__pyx_self, __pyx_v_array);
  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_6shader_186array2d_normalized_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_array) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array2d_normalized_c", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_array.memview)) { __Pyx_RaiseUnboundLocalError("array"); __PYX_ERR(1, 9885, __pyx_L1_error) }
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_array2d_normalized_c(__pyx_v_array, 0); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 9885, __pyx_L1_error)
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_1, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("PygameShader.shader.array2d_normalized_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09886: 
 09887:     """
 09888:     NORMALIZED AN ARRAY
 09889: 
 09890:     Transform/convert an array shapes (w, h) containing unsigned char values
 09891:     into a MemoryViewSlice (2d array) with float values rescale in range [0 ... 1.0]
 09892: 
 09893:     :param array: numpy.array shape (w, h) containing unsigned int values (uint8)
 09894:     :return     : a MemoryViewSlice 2d array shape (w, h) with float values in range [0 ... 1.0]
 09895: 
 09896:     """
 09897:     cdef:
 09898:         int w, h
+09899:     try:
  {
    /*try:*/ {
/* … */
    }
  }
+09900:         w, h = array.shape[:2]
      __pyx_t_4 = __pyx_v_array.shape;
      __pyx_t_5 = (__pyx_t_4[0]);
      __pyx_t_6 = (__pyx_t_4[1]);
      __pyx_v_w = __pyx_t_5;
      __pyx_v_h = __pyx_t_6;
 09901:     except (ValueError, pygame.error) as e:
 09902:         raise ValueError('\nArray shape not understood. Only 2d array shape (w, h) are compatible.')
 09903: 
 09904:     cdef:
+09905:         int i = 0, j = 0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+09906:         float [:, :] array_f = numpy.empty((w, h), numpy.float32)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 9906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_10);
  __pyx_t_8 = 0;
  __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_numpy); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_9)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_11, __pyx_t_8};
    __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9906, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_11, __pyx_t_8};
    __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9906, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  {
    __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 9906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_12, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_12, __pyx_t_8);
    __pyx_t_11 = 0;
    __pyx_t_8 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(1, 9906, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_array_f = __pyx_t_14;
  __pyx_t_14.memview = NULL;
  __pyx_t_14.data = NULL;
 09907: 
+09908:     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_L11;
        }
        __pyx_L11:;
      }
  }
+09909:         for i in prange(w, schedule='static', num_threads=THREADS):
        __pyx_t_12 = __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_16 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 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)
/* … */
        __pyx_t_12 = __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_16 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 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(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_16; __pyx_t_15++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_15);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
+09910:             for j in range(h):
                            __pyx_t_17 = __pyx_v_h;
                            __pyx_t_18 = __pyx_t_17;
                            for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
                              __pyx_v_j = __pyx_t_19;
+09911:                 array_f[i, j] = <float>(array[i, j] * <float>ONE_255)
                              __pyx_t_20 = __pyx_v_i;
                              __pyx_t_21 = __pyx_v_j;
                              __pyx_t_22 = __pyx_v_i;
                              __pyx_t_23 = __pyx_v_j;
                              *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array_f.data + __pyx_t_22 * __pyx_v_array_f.strides[0]) ) + __pyx_t_23 * __pyx_v_array_f.strides[1]) )) = ((float)((*((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array.data + __pyx_t_20 * __pyx_v_array.strides[0]) ) + __pyx_t_21 * __pyx_v_array.strides[1]) ))) * ((float)0.00392156862745098)));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+09912:     return array_f
  __PYX_INC_MEMVIEW(&__pyx_v_array_f, 0);
  __pyx_r = __pyx_v_array_f;
  goto __pyx_L0;
 09913: 
 09914: 
 09915: @cython.binding(False)
 09916: @cython.binding(False)
 09917: @cython.boundscheck(False)
 09918: @cython.wraparound(False)
 09919: @cython.nonecheck(False)
 09920: @cython.cdivision(True)
 09921: @cython.profile(False)
 09922: 
 09923: # Todo: no threshold
 09924: # todo slow version
+09925: cpdef area24_c(int x, int y, np.ndarray[np.uint8_t, ndim=3] background_rgb,
static PyObject *__pyx_pw_12PygameShader_6shader_189area24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_area24_c(int __pyx_v_x, int __pyx_v_y, PyArrayObject *__pyx_v_background_rgb, PyArrayObject *__pyx_v_mask_alpha, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_area24_c *__pyx_optional_args) {
  float __pyx_v_intensity = ((float)1.0);
  __Pyx_memviewslice __pyx_v_color = __pyx_k__36;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_17);
  __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
  __Pyx_XDECREF(__pyx_t_36);
  __PYX_XDEC_MEMVIEW(&__pyx_t_37, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_38, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_40, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_rgb.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("PygameShader.shader.area24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_rgb.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF((PyObject *)__pyx_v_rgb);
  __Pyx_XDECREF((PyObject *)__pyx_v_alpha);
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
  __Pyx_XDECREF(__pyx_v_surface);
  __Pyx_XDECREF(__pyx_v_mask);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_189area24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_188area24_c[] = "\n    \n    Create a realistic light effect on a pygame.Surface or texture.\n\n    You can blit the output surface with additive mode using pygame flag BLEND_RGBA_ADD.\n\n\n    :param x: integer, light x coordinates (must be in range [0..max screen.size x]\n    :param y: integer, light y coordinates (must be in range [0..max screen size y]\n    :param background_rgb: numpy.ndarray (w, h, 3) uint8. 3d array shape containing all RGB values\n    of the background surface (display background).\n    :param mask_alpha: numpy.ndarray (w, h) uint8, 2d array with light texture alpha values.\n    For better appearances, choose a texture with a radial mask shape (maximum light intensity in the center)\n    :param color: numpy.array; Light color (RGB float), default\n    array([128.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0], float32, copy=False)\n    :param intensity: float; Light intensity range [0.0 ... 20.0]\n    :param bloom: boolean; Bloom effect, default False\n    :param sat_value: float; Set the saturation value\n    :param saturation: boolean; Saturation effect\n    :param smooth: boolean; Blur effect\n    :param frequency: float; frequency must be incremental\n    :param heat: boolean; Allow heat wave effect\n    :return: Return a pygame surface 24 bit without per-pixel information,\n    surface with same size as the light texture. Represent the lit surface.\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_189area24_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_x;
  int __pyx_v_y;
  PyArrayObject *__pyx_v_background_rgb = 0;
  PyArrayObject *__pyx_v_mask_alpha = 0;
  float __pyx_v_intensity;
  __Pyx_memviewslice __pyx_v_color = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_smooth;
  int __pyx_v_saturation;
  float __pyx_v_sat_value;
  int __pyx_v_bloom;
  int __pyx_v_heat;
  float __pyx_v_frequency;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("area24_c (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_background_rgb,&__pyx_n_s_mask_alpha,&__pyx_n_s_intensity,&__pyx_n_s_color_2,&__pyx_n_s_smooth_2,&__pyx_n_s_saturation_2,&__pyx_n_s_sat_value,&__pyx_n_s_bloom_2,&__pyx_n_s_heat,&__pyx_n_s_frequency_2,0};
    PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,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 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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_x)) != 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_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("area24_c", 0, 4, 12, 1); __PYX_ERR(1, 9925, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_background_rgb)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("area24_c", 0, 4, 12, 2); __PYX_ERR(1, 9925, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mask_alpha)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("area24_c", 0, 4, 12, 3); __PYX_ERR(1, 9925, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intensity);
          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_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_smooth_2);
          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_saturation_2);
          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_sat_value);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bloom_2);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_heat);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frequency_2);
          if (value) { values[11] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "area24_c") < 0)) __PYX_ERR(1, 9925, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 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_x = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_x == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9925, __pyx_L3_error)
    __pyx_v_y = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_y == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9925, __pyx_L3_error)
    __pyx_v_background_rgb = ((PyArrayObject *)values[2]);
    __pyx_v_mask_alpha = ((PyArrayObject *)values[3]);
    if (values[4]) {
      __pyx_v_intensity = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_intensity == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 9926, __pyx_L3_error)
    } else {
      __pyx_v_intensity = ((float)1.0);
    }
    if (values[5]) {
      __pyx_v_color = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_color.memview)) __PYX_ERR(1, 9927, __pyx_L3_error)
    } else {
      __pyx_v_color = __pyx_k__36;
      __PYX_INC_MEMVIEW(&__pyx_v_color, 1);
    }
    if (values[6]) {
      __pyx_v_smooth = __Pyx_PyObject_IsTrue(values[6]); if (unlikely((__pyx_v_smooth == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9928, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_188area24_c(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_x, int __pyx_v_y, PyArrayObject *__pyx_v_background_rgb, PyArrayObject *__pyx_v_mask_alpha, float __pyx_v_intensity, __Pyx_memviewslice __pyx_v_color, int __pyx_v_smooth, int __pyx_v_saturation, float __pyx_v_sat_value, int __pyx_v_bloom, int __pyx_v_heat, float __pyx_v_frequency) {
  __Pyx_LocalBuf_ND __pyx_pybuffernd_background_rgb;
  __Pyx_Buffer __pyx_pybuffer_background_rgb;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_mask_alpha;
  __Pyx_Buffer __pyx_pybuffer_mask_alpha;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("area24_c", 0);
  __pyx_pybuffer_background_rgb.pybuffer.buf = NULL;
  __pyx_pybuffer_background_rgb.refcount = 0;
  __pyx_pybuffernd_background_rgb.data = NULL;
  __pyx_pybuffernd_background_rgb.rcbuffer = &__pyx_pybuffer_background_rgb;
  __pyx_pybuffer_mask_alpha.pybuffer.buf = NULL;
  __pyx_pybuffer_mask_alpha.refcount = 0;
  __pyx_pybuffernd_mask_alpha.data = NULL;
  __pyx_pybuffernd_mask_alpha.rcbuffer = &__pyx_pybuffer_mask_alpha;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer, (PyObject*)__pyx_v_background_rgb, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(1, 9925, __pyx_L1_error)
  }
  __pyx_pybuffernd_background_rgb.diminfo[0].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_background_rgb.diminfo[0].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_background_rgb.diminfo[1].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_background_rgb.diminfo[1].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_background_rgb.diminfo[2].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_background_rgb.diminfo[2].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask_alpha, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(1, 9925, __pyx_L1_error)
  }
  __pyx_pybuffernd_mask_alpha.diminfo[0].strides = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask_alpha.diminfo[0].shape = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask_alpha.diminfo[1].strides = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask_alpha.diminfo[1].shape = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.shape[1];
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_color.memview)) { __Pyx_RaiseUnboundLocalError("color"); __PYX_ERR(1, 9925, __pyx_L1_error) }
  __pyx_t_2.__pyx_n = 8;
  __pyx_t_2.intensity = __pyx_v_intensity;
  __pyx_t_2.color = __pyx_v_color;
  __pyx_t_2.smooth = __pyx_v_smooth;
  __pyx_t_2.saturation = __pyx_v_saturation;
  __pyx_t_2.sat_value = __pyx_v_sat_value;
  __pyx_t_2.bloom = __pyx_v_bloom;
  __pyx_t_2.heat = __pyx_v_heat;
  __pyx_t_2.frequency = __pyx_v_frequency;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_area24_c(__pyx_v_x, __pyx_v_y, ((PyArrayObject *)__pyx_v_background_rgb), ((PyArrayObject *)__pyx_v_mask_alpha), 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9925, __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);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("PygameShader.shader.area24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_color, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09926:               np.ndarray[np.uint8_t, ndim=2] mask_alpha, float intensity=1.0,
+09927:               float [:] color=numpy.array([128.0, 128.0, 128.0], dtype=numpy.float32, copy=False),
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_29 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_array_2); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_30 = PyList_New(3); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_30, 0, __pyx_float_128_0);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_30, 1, __pyx_float_128_0);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_30, 2, __pyx_float_128_0);
  __pyx_t_28 = PyTuple_New(1); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_GIVEREF(__pyx_t_30);
  PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_30);
  __pyx_t_30 = 0;
  __pyx_t_30 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_GetModuleGlobalName(__pyx_t_31, __pyx_n_s_numpy); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_31, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  if (PyDict_SetItem(__pyx_t_30, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_30, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 9927, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_29, __pyx_t_28, __pyx_t_30); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_t_48 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_48.memview)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k__36 = __pyx_t_48;
  __pyx_t_48.memview = NULL;
  __pyx_t_48.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array_2); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_float_128_0);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_float_128_0);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_float_128_0);
  __pyx_t_28 = PyTuple_New(1); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_29, __pyx_n_s_numpy); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_29, __pyx_n_s_float32); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_31) < 0) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 9927, __pyx_L1_error)
  __pyx_t_31 = __Pyx_PyObject_Call(__pyx_t_30, __pyx_t_28, __pyx_t_2); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_48 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_31, PyBUF_WRITABLE); if (unlikely(!__pyx_t_48.memview)) __PYX_ERR(1, 9927, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  __pyx_k__36 = __pyx_t_48;
  __pyx_t_48.memview = NULL;
  __pyx_t_48.data = NULL;
+09928:               bint smooth=False, bint saturation=False, float sat_value=0.2, bint bloom=False,
  int __pyx_v_smooth = ((int)0);
  int __pyx_v_saturation = ((int)0);
  float __pyx_v_sat_value = ((float)0.2);
  int __pyx_v_bloom = ((int)0);
/* … */
      __pyx_v_smooth = ((int)0);
    }
    if (values[7]) {
      __pyx_v_saturation = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_saturation == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9928, __pyx_L3_error)
    } else {
      __pyx_v_saturation = ((int)0);
    }
    if (values[8]) {
      __pyx_v_sat_value = __pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_sat_value == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 9928, __pyx_L3_error)
    } else {
      __pyx_v_sat_value = ((float)0.2);
    }
    if (values[9]) {
      __pyx_v_bloom = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_bloom == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9928, __pyx_L3_error)
    } else {
      __pyx_v_bloom = ((int)0);
    }
    if (values[10]) {
      __pyx_v_heat = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_heat == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9929, __pyx_L3_error)
    } else {
+09929:               bint heat=False, float frequency=1):
  int __pyx_v_heat = ((int)0);
  float __pyx_v_frequency = ((float)1.0);
  int __pyx_v_w;
  int __pyx_v_h;
  int __pyx_v_lx;
  int __pyx_v_ly;
  int __pyx_v_ax;
  int __pyx_v_ay;
  CYTHON_UNUSED PyObject *__pyx_v_e = NULL;
  PyArrayObject *__pyx_v_rgb = 0;
  PyArrayObject *__pyx_v_alpha = 0;
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_f;
  int __pyx_v_w_low;
  int __pyx_v_w_high;
  int __pyx_v_h_low;
  int __pyx_v_h_high;
  __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_surface = NULL;
  PyObject *__pyx_v_mask = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_alpha;
  __Pyx_Buffer __pyx_pybuffer_alpha;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_background_rgb;
  __Pyx_Buffer __pyx_pybuffer_background_rgb;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_mask_alpha;
  __Pyx_Buffer __pyx_pybuffer_mask_alpha;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_rgb;
  __Pyx_Buffer __pyx_pybuffer_rgb;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("area24_c", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_intensity = __pyx_optional_args->intensity;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_color = __pyx_optional_args->color;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_smooth = __pyx_optional_args->smooth;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_saturation = __pyx_optional_args->saturation;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_sat_value = __pyx_optional_args->sat_value;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_bloom = __pyx_optional_args->bloom;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_heat = __pyx_optional_args->heat;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_frequency = __pyx_optional_args->frequency;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  __pyx_pybuffer_rgb.pybuffer.buf = NULL;
  __pyx_pybuffer_rgb.refcount = 0;
  __pyx_pybuffernd_rgb.data = NULL;
  __pyx_pybuffernd_rgb.rcbuffer = &__pyx_pybuffer_rgb;
  __pyx_pybuffer_alpha.pybuffer.buf = NULL;
  __pyx_pybuffer_alpha.refcount = 0;
  __pyx_pybuffernd_alpha.data = NULL;
  __pyx_pybuffernd_alpha.rcbuffer = &__pyx_pybuffer_alpha;
  __pyx_pybuffer_background_rgb.pybuffer.buf = NULL;
  __pyx_pybuffer_background_rgb.refcount = 0;
  __pyx_pybuffernd_background_rgb.data = NULL;
  __pyx_pybuffernd_background_rgb.rcbuffer = &__pyx_pybuffer_background_rgb;
  __pyx_pybuffer_mask_alpha.pybuffer.buf = NULL;
  __pyx_pybuffer_mask_alpha.refcount = 0;
  __pyx_pybuffernd_mask_alpha.data = NULL;
  __pyx_pybuffernd_mask_alpha.rcbuffer = &__pyx_pybuffer_mask_alpha;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer, (PyObject*)__pyx_v_background_rgb, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(1, 9925, __pyx_L1_error)
  }
  __pyx_pybuffernd_background_rgb.diminfo[0].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_background_rgb.diminfo[0].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_background_rgb.diminfo[1].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_background_rgb.diminfo[1].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_background_rgb.diminfo[2].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_background_rgb.diminfo[2].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask_alpha, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(1, 9925, __pyx_L1_error)
  }
  __pyx_pybuffernd_mask_alpha.diminfo[0].strides = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask_alpha.diminfo[0].shape = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask_alpha.diminfo[1].strides = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask_alpha.diminfo[1].shape = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.shape[1];
/* … */
      __pyx_v_heat = ((int)0);
    }
    if (values[11]) {
      __pyx_v_frequency = __pyx_PyFloat_AsFloat(values[11]); if (unlikely((__pyx_v_frequency == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 9929, __pyx_L3_error)
    } else {
      __pyx_v_frequency = ((float)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("area24_c", 0, 4, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 9925, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.area24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_background_rgb), __pyx_ptype_5numpy_ndarray, 1, "background_rgb", 0))) __PYX_ERR(1, 9925, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mask_alpha), __pyx_ptype_5numpy_ndarray, 1, "mask_alpha", 0))) __PYX_ERR(1, 9926, __pyx_L1_error)
  __pyx_r = __pyx_pf_12PygameShader_6shader_188area24_c(__pyx_self, __pyx_v_x, __pyx_v_y, __pyx_v_background_rgb, __pyx_v_mask_alpha, __pyx_v_intensity, __pyx_v_color, __pyx_v_smooth, __pyx_v_saturation, __pyx_v_sat_value, __pyx_v_bloom, __pyx_v_heat, __pyx_v_frequency);
 09930:     """
 09931: 
 09932:     Create a realistic light effect on a pygame.Surface or texture.
 09933: 
 09934:     You can blit the output surface with additive mode using pygame flag BLEND_RGBA_ADD.
 09935: 
 09936: 
 09937:     :param x: integer, light x coordinates (must be in range [0..max screen.size x]
 09938:     :param y: integer, light y coordinates (must be in range [0..max screen size y]
 09939:     :param background_rgb: numpy.ndarray (w, h, 3) uint8. 3d array shape containing all RGB values
 09940:     of the background surface (display background).
 09941:     :param mask_alpha: numpy.ndarray (w, h) uint8, 2d array with light texture alpha values.
 09942:     For better appearances, choose a texture with a radial mask shape (maximum light intensity in the center)
 09943:     :param color: numpy.array; Light color (RGB float), default
 09944:     array([128.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0], float32, copy=False)
 09945:     :param intensity: float; Light intensity range [0.0 ... 20.0]
 09946:     :param bloom: boolean; Bloom effect, default False
 09947:     :param sat_value: float; Set the saturation value
 09948:     :param saturation: boolean; Saturation effect
 09949:     :param smooth: boolean; Blur effect
 09950:     :param frequency: float; frequency must be incremental
 09951:     :param heat: boolean; Allow heat wave effect
 09952:     :return: Return a pygame surface 24 bit without per-pixel information,
 09953:     surface with same size as the light texture. Represent the lit surface.
 09954:     """
 09955: 
+09956:     assert intensity >= <float>0.0, '\nIntensity value cannot be > 0.0'
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_intensity >= ((float)0.0)) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Intensity_value_cannot_be_0_0);
      __PYX_ERR(1, 9956, __pyx_L1_error)
    }
  }
  #endif
 09957: 
 09958: 
 09959:     cdef int w, h, lx, ly, ax, ay
+09960:     try:
  {
    /*try:*/ {
/* … */
    }
  }
+09961:         w, h = background_rgb.shape[:2]
      __pyx_t_4 = __pyx_v_background_rgb->dimensions;
      __pyx_t_5 = (__pyx_t_4[0]);
      __pyx_t_6 = (__pyx_t_4[1]);
      __pyx_v_w = __pyx_t_5;
      __pyx_v_h = __pyx_t_6;
 09962:     except (ValueError, pygame.error) as e:
 09963:         raise ValueError('\nArray shape not understood.')
 09964: 
+09965:     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_L14_try_end;
    __pyx_L9_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 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_L14_try_end:;
  }
+09966:         ax, ay = (<object>mask_alpha).shape[:2]
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask_alpha), __pyx_n_s_shape); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9966, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetSlice(__pyx_t_7, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9966, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
        PyObject* sequence = __pyx_t_8;
        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(1, 9966, __pyx_L9_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        #else
        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9966, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9966, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_9);
        #endif
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_10 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9966, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
        index = 0; __pyx_t_7 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_7);
        index = 1; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) __PYX_ERR(1, 9966, __pyx_L9_error)
        __pyx_t_11 = NULL;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L16_unpacking_done;
        __pyx_L15_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_11 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(1, 9966, __pyx_L9_error)
        __pyx_L16_unpacking_done:;
      }
      __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9966, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_t_9); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 9966, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_ax = __pyx_t_12;
      __pyx_v_ay = __pyx_t_13;
+09967:     except (ValueError, pygame.error) as e:
    __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pygame); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9967, __pyx_L11_except_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_error); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9967, __pyx_L11_except_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_13 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_8, __pyx_builtin_ValueError) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_8, __pyx_t_14);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_7);
    __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_7 = 0;
    if (__pyx_t_13) {
      __Pyx_AddTraceback("PygameShader.shader.area24_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_9, &__pyx_t_8) < 0) __PYX_ERR(1, 9967, __pyx_L11_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_9);
      __pyx_v_e = __pyx_t_9;
+09968:         raise ValueError('\nArray shape not understood.')
      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9968, __pyx_L11_except_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_Raise(__pyx_t_14, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __PYX_ERR(1, 9968, __pyx_L11_except_error)
    }
    goto __pyx_L11_except_error;
    __pyx_L11_except_error:;
/* … */
  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_Array_shape_not_understood); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(1, 9968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);
 09969: 
 09970:     # Return an empty surface if the x or y are not within the normal range.
+09971:     if (x < <unsigned short int>0) or (x > w - <unsigned short int>1) or \
  __pyx_t_16 = ((__pyx_v_x < ((unsigned short)0)) != 0);
  if (!__pyx_t_16) {
  } else {
    __pyx_t_15 = __pyx_t_16;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_16 = ((__pyx_v_x > (__pyx_v_w - ((unsigned short)1))) != 0);
  if (!__pyx_t_16) {
  } else {
    __pyx_t_15 = __pyx_t_16;
    goto __pyx_L20_bool_binop_done;
  }
/* … */
  if (__pyx_t_15) {
/* … */
  }
+09972:             (y < <unsigned short int>0) or (y > h - <unsigned short int>1):
  __pyx_t_16 = ((__pyx_v_y < ((unsigned short)0)) != 0);
  if (!__pyx_t_16) {
  } else {
    __pyx_t_15 = __pyx_t_16;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_16 = ((__pyx_v_y > (__pyx_v_h - ((unsigned short)1))) != 0);
  __pyx_t_15 = __pyx_t_16;
  __pyx_L20_bool_binop_done:;
+09973:         return Surface((ax, ay), SRCALPHA), ax, ay
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Surface); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_14);
    __pyx_t_7 = 0;
    __pyx_t_14 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_7 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_13 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_10, __pyx_t_14};
      __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9973, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_10, __pyx_t_14};
      __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9973, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else
    #endif
    {
      __pyx_t_17 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9973, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_13, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_13, __pyx_t_14);
      __pyx_t_10 = 0;
      __pyx_t_14 = 0;
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_17, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9973, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_17 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_17);
    PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_17);
    __pyx_t_8 = 0;
    __pyx_t_9 = 0;
    __pyx_t_17 = 0;
    __pyx_r = __pyx_t_14;
    __pyx_t_14 = 0;
    goto __pyx_L0;
 09974: 
 09975:     # return an empty Surface when intensity = 0.0
+09976:     if intensity == <float>0.0:
  __pyx_t_15 = ((__pyx_v_intensity == ((float)0.0)) != 0);
  if (__pyx_t_15) {
/* … */
  }
+09977:         return Surface((ax, ay), SRCALPHA), ax, ay
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_Surface); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_8);
    __pyx_t_9 = 0;
    __pyx_t_8 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_17);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_17, function);
        __pyx_t_13 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_17)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_10, __pyx_t_8};
      __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9977, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_17)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_10, __pyx_t_8};
      __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9977, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9977, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_13, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_13, __pyx_t_8);
      __pyx_t_10 = 0;
      __pyx_t_8 = 0;
      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_7, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9977, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __pyx_t_17 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_17);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_17);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7);
    __pyx_t_14 = 0;
    __pyx_t_17 = 0;
    __pyx_t_7 = 0;
    __pyx_r = __pyx_t_8;
    __pyx_t_8 = 0;
    goto __pyx_L0;
 09978: 
+09979:     lx = ax >> 1
  __pyx_v_lx = (__pyx_v_ax >> 1);
+09980:     ly = ay >> 1
  __pyx_v_ly = (__pyx_v_ay >> 1);
 09981: 
 09982:     cdef:
+09983:         np.ndarray[np.uint8_t, ndim=3] rgb = empty((ax, ay, <unsigned short int>3), uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_17 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_10 = __Pyx_PyInt_From_unsigned_short(((unsigned short)3)); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_10);
  __pyx_t_17 = 0;
  __pyx_t_14 = 0;
  __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_uint8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_14 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_9, __pyx_t_10};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9983, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_9, __pyx_t_10};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9983, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_17 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_13, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_13, __pyx_t_10);
    __pyx_t_9 = 0;
    __pyx_t_10 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_17, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 9983, __pyx_L1_error)
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_8);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_rgb.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
      __pyx_v_rgb = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_rgb.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(1, 9983, __pyx_L1_error)
    } else {__pyx_pybuffernd_rgb.diminfo[0].strides = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_rgb.diminfo[0].shape = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_rgb.diminfo[1].strides = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_rgb.diminfo[1].shape = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_rgb.diminfo[2].strides = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_rgb.diminfo[2].shape = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.shape[2];
    }
  }
  __pyx_t_18 = 0;
  __pyx_v_rgb = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
+09984:         np.ndarray[np.uint8_t, ndim=2] alpha = empty((ax, ay), uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 9984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_17 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 9984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 9984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_10);
  __pyx_t_17 = 0;
  __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_uint8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 9984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_17 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_17)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_17);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_t_9, __pyx_t_10};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9984, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_t_9, __pyx_t_10};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9984, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_14 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 9984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (__pyx_t_17) {
      __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_17); __pyx_t_17 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_13, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_13, __pyx_t_10);
    __pyx_t_9 = 0;
    __pyx_t_10 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 9984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 9984, __pyx_L1_error)
  __pyx_t_19 = ((PyArrayObject *)__pyx_t_8);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_alpha = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_alpha.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(1, 9984, __pyx_L1_error)
    } else {__pyx_pybuffernd_alpha.diminfo[0].strides = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alpha.diminfo[0].shape = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_alpha.diminfo[1].strides = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_alpha.diminfo[1].shape = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_19 = 0;
  __pyx_v_alpha = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
+09985:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 09986:         float f
+09987:         int w_low = lx
  __pyx_v_w_low = __pyx_v_lx;
+09988:         int w_high = lx
  __pyx_v_w_high = __pyx_v_lx;
+09989:         int h_low = ly
  __pyx_v_h_low = __pyx_v_ly;
+09990:         int h_high = ly
  __pyx_v_h_high = __pyx_v_ly;
 09991: 
+09992:     if x < lx:
  __pyx_t_15 = ((__pyx_v_x < __pyx_v_lx) != 0);
  if (__pyx_t_15) {
/* … */
    goto __pyx_L25;
  }
+09993:         w_low = x
    __pyx_v_w_low = __pyx_v_x;
+09994:     elif x > w - lx:
  __pyx_t_15 = ((__pyx_v_x > (__pyx_v_w - __pyx_v_lx)) != 0);
  if (__pyx_t_15) {
/* … */
  }
  __pyx_L25:;
+09995:         w_high = w - x
    __pyx_v_w_high = (__pyx_v_w - __pyx_v_x);
 09996: 
+09997:     if y < ly:
  __pyx_t_15 = ((__pyx_v_y < __pyx_v_ly) != 0);
  if (__pyx_t_15) {
/* … */
    goto __pyx_L26;
  }
+09998:         h_low = y
    __pyx_v_h_low = __pyx_v_y;
+09999:     elif y >  h - ly:
  __pyx_t_15 = ((__pyx_v_y > (__pyx_v_h - __pyx_v_ly)) != 0);
  if (__pyx_t_15) {
/* … */
  }
  __pyx_L26:;
+10000:         h_high = h - y
    __pyx_v_h_high = (__pyx_v_h - __pyx_v_y);
 10001: 
+10002:     rgb = background_rgb[x - w_low:x + w_high, y - h_low:y + h_high, :]
  __pyx_t_8 = __Pyx_PyInt_From_int((__pyx_v_x - __pyx_v_w_low)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_7 = __Pyx_PyInt_From_int((__pyx_v_x + __pyx_v_w_high)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_14 = PySlice_New(__pyx_t_8, __pyx_t_7, Py_None); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyInt_From_int((__pyx_v_y - __pyx_v_h_low)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyInt_From_int((__pyx_v_y + __pyx_v_h_high)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = PySlice_New(__pyx_t_7, __pyx_t_8, Py_None); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_10);
  __Pyx_INCREF(__pyx_slice__38);
  __Pyx_GIVEREF(__pyx_slice__38);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_slice__38);
  __pyx_t_14 = 0;
  __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_background_rgb), __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 10002, __pyx_L1_error)
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_10);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_rgb.rcbuffer->pybuffer);
    __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_rgb.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
    if (unlikely(__pyx_t_13 < 0)) {
      PyErr_Fetch(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_rgb.rcbuffer->pybuffer, (PyObject*)__pyx_v_rgb, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_1); Py_XDECREF(__pyx_t_2); Py_XDECREF(__pyx_t_3);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_1, __pyx_t_2, __pyx_t_3);
      }
      __pyx_t_1 = __pyx_t_2 = __pyx_t_3 = 0;
    }
    __pyx_pybuffernd_rgb.diminfo[0].strides = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_rgb.diminfo[0].shape = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_rgb.diminfo[1].strides = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_rgb.diminfo[1].shape = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_rgb.diminfo[2].strides = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_rgb.diminfo[2].shape = __pyx_pybuffernd_rgb.rcbuffer->pybuffer.shape[2];
    if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(1, 10002, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __Pyx_DECREF_SET(__pyx_v_rgb, ((PyArrayObject *)__pyx_t_10));
  __pyx_t_10 = 0;
/* … */
  __pyx_slice__38 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__38)) __PYX_ERR(1, 10002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__38);
  __Pyx_GIVEREF(__pyx_slice__38);
+10003:     alpha = mask_alpha[lx - w_low:lx + w_high, ly - h_low:ly + h_high]
  __pyx_t_10 = __Pyx_PyInt_From_int((__pyx_v_lx - __pyx_v_w_low)); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = __Pyx_PyInt_From_int((__pyx_v_lx + __pyx_v_w_high)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = PySlice_New(__pyx_t_10, __pyx_t_8, Py_None); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int((__pyx_v_ly - __pyx_v_h_low)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = __Pyx_PyInt_From_int((__pyx_v_ly + __pyx_v_h_high)); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_7 = PySlice_New(__pyx_t_8, __pyx_t_10, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_7);
  __pyx_t_14 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_mask_alpha), __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 10003, __pyx_L1_error)
  __pyx_t_19 = ((PyArrayObject *)__pyx_t_7);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer);
    __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_13 < 0)) {
      PyErr_Fetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer, (PyObject*)__pyx_v_alpha, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_2); Py_XDECREF(__pyx_t_1);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_3, __pyx_t_2, __pyx_t_1);
      }
      __pyx_t_3 = __pyx_t_2 = __pyx_t_1 = 0;
    }
    __pyx_pybuffernd_alpha.diminfo[0].strides = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alpha.diminfo[0].shape = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_alpha.diminfo[1].strides = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_alpha.diminfo[1].shape = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(1, 10003, __pyx_L1_error)
  }
  __pyx_t_19 = 0;
  __Pyx_DECREF_SET(__pyx_v_alpha, ((PyArrayObject *)__pyx_t_7));
  __pyx_t_7 = 0;
 10004: 
+10005:     ax, ay = rgb.shape[:2]
  __pyx_t_4 = __pyx_v_rgb->dimensions;
  __pyx_t_6 = (__pyx_t_4[0]);
  __pyx_t_5 = (__pyx_t_4[1]);
  __pyx_v_ax = __pyx_t_6;
  __pyx_v_ay = __pyx_t_5;
 10006:     cdef:
+10007:         unsigned char [:, :, ::1] new_array = empty((ay, ax, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_empty); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_int_3);
  __pyx_t_14 = 0;
  __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_uint8); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_9, __pyx_t_14};
    __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10007, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_9, __pyx_t_14};
    __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10007, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  } else
  #endif
  {
    __pyx_t_17 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 10007, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_13, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_13, __pyx_t_14);
    __pyx_t_9 = 0;
    __pyx_t_14 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_17, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10007, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(1, 10007, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_new_array = __pyx_t_20;
  __pyx_t_20.memview = NULL;
  __pyx_t_20.data = NULL;
 10008: 
 10009:     # NOTE the array is transpose
+10010:     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_L29;
        }
        __pyx_L29:;
      }
  }
+10011:         for i in prange(ax, schedule='static', num_threads=THREADS):
        __pyx_t_13 = __pyx_v_ax;
        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_21 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_21 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_f) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(static)
/* … */
        __pyx_t_13 = __pyx_v_ax;
        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_21 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_21 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_f) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_21; __pyx_t_12++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_12);
                            /* Initialize private variables to invalid values */
                            __pyx_v_f = ((float)__PYX_NAN());
                            __pyx_v_j = ((int)0xbad0bad0);
+10012:             for j in range(ay):
                            __pyx_t_22 = __pyx_v_ay;
                            __pyx_t_23 = __pyx_t_22;
                            for (__pyx_t_24 = 0; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
                              __pyx_v_j = __pyx_t_24;
+10013:                 f = alpha[i, j] * <float>ONE_255 * intensity
                              /* "PygameShader/shader.pyx":10013
 *         for i in prange(ax, schedule='static', num_threads=THREADS):
 *             for j in range(ay):
 *                 f = alpha[i, j] * <float>ONE_255 * intensity             # <<<<<<<<<<<<<<
 *                 new_array[j, i, <unsigned short int>0] =\
 *                     <unsigned char>fmin(rgb[i, j, <unsigned short int>0] * f *
 */
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_26 = __pyx_v_j;
                              __pyx_v_f = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_alpha.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_alpha.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_alpha.diminfo[1].strides)) * ((float)0.00392156862745098)) * __pyx_v_intensity);
+10014:                 new_array[j, i, <unsigned short int>0] =\
                              __pyx_t_29 = __pyx_v_j;
                              __pyx_t_30 = __pyx_v_i;
                              __pyx_t_31 = ((unsigned short)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)fmin((((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_rgb.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_rgb.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_rgb.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_rgb.diminfo[2].strides)) * __pyx_v_f) * (*((float *) ( /* dim=0 */ (__pyx_v_color.data + __pyx_t_28 * __pyx_v_color.strides[0]) )))), ((float)255.0)));
+10015:                     <unsigned char>fmin(rgb[i, j, <unsigned short int>0] * f *
                              __pyx_t_26 = __pyx_v_i;
                              __pyx_t_25 = __pyx_v_j;
                              __pyx_t_27 = ((unsigned short)0);
+10016:                                         color[<unsigned short int>0], <float>255.0)
                              /* "PygameShader/shader.pyx":10016
 *                 new_array[j, i, <unsigned short int>0] =\
 *                     <unsigned char>fmin(rgb[i, j, <unsigned short int>0] * f *
 *                                         color[<unsigned short int>0], <float>255.0)             # <<<<<<<<<<<<<<
 *                 new_array[j, i, <unsigned short int>1] =\
 *                     <unsigned char>fmin(rgb[i, j, <unsigned short int>1] * f *
 */
                              __pyx_t_28 = ((unsigned short)0);
+10017:                 new_array[j, i, <unsigned short int>1] =\
                              __pyx_t_30 = __pyx_v_j;
                              __pyx_t_29 = __pyx_v_i;
                              __pyx_t_31 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_30 * __pyx_v_new_array.strides[0]) ) + __pyx_t_29 * __pyx_v_new_array.strides[1]) )) + __pyx_t_31)) )) = ((unsigned char)fmin((((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_rgb.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_rgb.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_rgb.diminfo[1].strides, __pyx_t_28, __pyx_pybuffernd_rgb.diminfo[2].strides)) * __pyx_v_f) * (*((float *) ( /* dim=0 */ (__pyx_v_color.data + __pyx_t_27 * __pyx_v_color.strides[0]) )))), ((float)255.0)));
+10018:                     <unsigned char>fmin(rgb[i, j, <unsigned short int>1] * f *
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_26 = __pyx_v_j;
                              __pyx_t_28 = ((unsigned short)1);
+10019:                                         color[<unsigned short int>1], <float>255.0)
                              /* "PygameShader/shader.pyx":10019
 *                 new_array[j, i, <unsigned short int>1] =\
 *                     <unsigned char>fmin(rgb[i, j, <unsigned short int>1] * f *
 *                                         color[<unsigned short int>1], <float>255.0)             # <<<<<<<<<<<<<<
 *                 new_array[j, i, <unsigned short int>2] =\
 *                     <unsigned char>fmin(rgb[i, j, <unsigned short int>2] * f *
 */
                              __pyx_t_27 = ((unsigned short)1);
+10020:                 new_array[j, i, <unsigned short int>2] =\
                              __pyx_t_29 = __pyx_v_j;
                              __pyx_t_30 = __pyx_v_i;
                              __pyx_t_31 = ((unsigned short)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)fmin((((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_rgb.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_rgb.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_rgb.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_rgb.diminfo[2].strides)) * __pyx_v_f) * (*((float *) ( /* dim=0 */ (__pyx_v_color.data + __pyx_t_28 * __pyx_v_color.strides[0]) )))), ((float)255.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
      }
+10021:                     <unsigned char>fmin(rgb[i, j, <unsigned short int>2] * f *
                              __pyx_t_26 = __pyx_v_i;
                              __pyx_t_25 = __pyx_v_j;
                              __pyx_t_27 = ((unsigned short)2);
+10022:                                         color[<unsigned short int>2], <float>255.0)
                              __pyx_t_28 = ((unsigned short)2);
 10023: 
+10024:     ay, ax = new_array.shape[:2]
  __pyx_t_32 = __pyx_v_new_array.shape;
  __pyx_t_33 = (__pyx_t_32[0]);
  __pyx_t_34 = (__pyx_t_32[1]);
  __pyx_v_ay = __pyx_t_33;
  __pyx_v_ax = __pyx_t_34;
 10025: 
+10026:     if smooth:
  __pyx_t_15 = (__pyx_v_smooth != 0);
  if (__pyx_t_15) {
/* … */
  }
+10027:         shader_blur5x5_array24_inplace_c(new_array, mask=None, t=<unsigned short int>1)
    __pyx_t_7 = __Pyx_PyInt_From_unsigned_short(((unsigned short)1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10027, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_35.__pyx_n = 2;
    __pyx_t_35.mask = Py_None;
    __pyx_t_35.t = __pyx_t_7;
    __pyx_f_12PygameShader_6shader_shader_blur5x5_array24_inplace_c(__pyx_v_new_array, &__pyx_t_35); 
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 10028: 
+10029:     if saturation:
  __pyx_t_15 = (__pyx_v_saturation != 0);
  if (__pyx_t_15) {
/* … */
  }
+10030:         shader_saturation_array24_inplace_c(new_array, sat_value)
    __pyx_f_12PygameShader_6shader_shader_saturation_array24_inplace_c(__pyx_v_new_array, __pyx_v_sat_value);
 10031: 
+10032:     if heat:
  __pyx_t_15 = (__pyx_v_heat != 0);
  if (__pyx_t_15) {
/* … */
  }
+10033:         new_array = heatwave_array24_horiz_c(numpy.asarray(new_array).transpose(
    __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_numpy); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 10033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_asarray); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __pyx_t_17 = __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_17)) __PYX_ERR(1, 10033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
      }
    }
    __pyx_t_10 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_9, __pyx_t_17) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_17);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
    __pyx_t_37 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_37.memview)) __PYX_ERR(1, 10033, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_t_39.__pyx_n = 2;
    __pyx_t_39.attenuation = ((unsigned int)0x64);
    __pyx_t_39.threshold = ((unsigned short)10);
    __pyx_t_7 = __pyx_f_12PygameShader_6shader_heatwave_array24_horiz_c(__pyx_t_37, __pyx_t_38, __pyx_v_frequency, (fmodf(__pyx_v_frequency, ((unsigned short)8)) / ((float)1000.0)), &__pyx_t_39); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __PYX_XDEC_MEMVIEW(&__pyx_t_37, 1);
    __pyx_t_37.memview = NULL;
    __pyx_t_37.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_38, 1);
    __pyx_t_38.memview = NULL;
    __pyx_t_38.data = NULL;
    __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(1, 10033, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
    __pyx_v_new_array = __pyx_t_20;
    __pyx_t_20.memview = NULL;
    __pyx_t_20.data = NULL;
+10034:             <unsigned short int>1, <unsigned short int>0, <unsigned short int>2),
    __pyx_t_10 = __Pyx_PyInt_From_unsigned_short(((unsigned short)1)); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_17 = __Pyx_PyInt_From_unsigned_short(((unsigned short)0)); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 10034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_9 = __Pyx_PyInt_From_unsigned_short(((unsigned short)2)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = NULL;
    __pyx_t_21 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
        __pyx_t_21 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_14)) {
      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_10, __pyx_t_17, __pyx_t_9};
      __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_21, 3+__pyx_t_21); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10033, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_10, __pyx_t_17, __pyx_t_9};
      __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_21, 3+__pyx_t_21); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10033, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    {
      __pyx_t_36 = PyTuple_New(3+__pyx_t_21); if (unlikely(!__pyx_t_36)) __PYX_ERR(1, 10033, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_36);
      if (__pyx_t_8) {
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_36, 0, __pyx_t_8); __pyx_t_8 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_36, 0+__pyx_t_21, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_17);
      PyTuple_SET_ITEM(__pyx_t_36, 1+__pyx_t_21, __pyx_t_17);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_36, 2+__pyx_t_21, __pyx_t_9);
      __pyx_t_10 = 0;
      __pyx_t_17 = 0;
      __pyx_t_9 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_36, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10033, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_36); __pyx_t_36 = 0;
    }
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+10035:             alpha, frequency, (frequency % <unsigned short int>8) / <float>1000.0, attenuation=<unsigned int>100,
    __pyx_t_38 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_char(((PyObject *)__pyx_v_alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_38.memview)) __PYX_ERR(1, 10035, __pyx_L1_error)
 10036:                                              threshold=<unsigned short int>10)
 10037: 
+10038:     surface = pygame.image.frombuffer(new_array, (ax, ay), "RGB")
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_pygame); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_36 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_image); if (unlikely(!__pyx_t_36)) __PYX_ERR(1, 10038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_36);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_36, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_36); __pyx_t_36 = 0;
  __pyx_t_36 = __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_36)) __PYX_ERR(1, 10038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_36);
  __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_17 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 10038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_17);
  __pyx_t_9 = 0;
  __pyx_t_17 = 0;
  __pyx_t_17 = NULL;
  __pyx_t_21 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_17)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_17);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
      __pyx_t_21 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_14)) {
    PyObject *__pyx_temp[4] = {__pyx_t_17, __pyx_t_36, __pyx_t_10, __pyx_n_s_RGB};
    __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_21, 3+__pyx_t_21); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10038, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_36); __pyx_t_36 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
    PyObject *__pyx_temp[4] = {__pyx_t_17, __pyx_t_36, __pyx_t_10, __pyx_n_s_RGB};
    __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_21, 3+__pyx_t_21); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10038, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_36); __pyx_t_36 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(3+__pyx_t_21); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10038, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_17) {
      __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_17); __pyx_t_17 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_36);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_21, __pyx_t_36);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_21, __pyx_t_10);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_21, __pyx_n_s_RGB);
    __pyx_t_36 = 0;
    __pyx_t_10 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10038, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_surface = __pyx_t_7;
  __pyx_t_7 = 0;
 10039: 
+10040:     if bloom:
  __pyx_t_15 = (__pyx_v_bloom != 0);
  if (__pyx_t_15) {
/* … */
  }
+10041:         mask = array2d_normalized_c(alpha)
    __pyx_t_38 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_char(((PyObject *)__pyx_v_alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_38.memview)) __PYX_ERR(1, 10041, __pyx_L1_error)
    __pyx_t_40 = __pyx_f_12PygameShader_6shader_array2d_normalized_c(__pyx_t_38, 0); if (unlikely(!__pyx_t_40.memview)) __PYX_ERR(1, 10041, __pyx_L1_error)
    __PYX_XDEC_MEMVIEW(&__pyx_t_38, 1);
    __pyx_t_38.memview = NULL;
    __pyx_t_38.data = NULL;
    __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_t_40, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10041, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __PYX_XDEC_MEMVIEW(&__pyx_t_40, 1);
    __pyx_t_40.memview = NULL;
    __pyx_t_40.data = NULL;
    __pyx_v_mask = __pyx_t_7;
    __pyx_t_7 = 0;
+10042:         shader_bloom_effect_array24_c(surface, threshold_=<unsigned char>190, fast_=True, mask_=mask)
    __pyx_t_41.__pyx_n = 2;
    __pyx_t_41.fast_ = 1;
    __pyx_t_41.mask_ = __pyx_v_mask;
    __pyx_f_12PygameShader_6shader_shader_bloom_effect_array24_c(__pyx_v_surface, ((unsigned char)0xBE), &__pyx_t_41); 
 10043: 
 10044: 
+10045:     return surface, ax, ay
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_v_surface);
  __Pyx_GIVEREF(__pyx_v_surface);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_surface);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_14);
  __pyx_t_7 = 0;
  __pyx_t_14 = 0;
  __pyx_r = __pyx_t_9;
  __pyx_t_9 = 0;
  goto __pyx_L0;
 10046: 
 10047: # TODAY
 10048: # ---------------------------------------------------------------------------------------------------------
 10049: 
 10050: @cython.binding(False)
 10051: @cython.binding(False)
 10052: @cython.boundscheck(False)
 10053: @cython.wraparound(False)
 10054: @cython.nonecheck(False)
 10055: @cython.cdivision(True)
 10056: @cython.profile(False)
+10057: cdef inline saturation_array24_mask_c2(unsigned char [:, :, :] array_,
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_saturation_array24_mask_c2(__Pyx_memviewslice __pyx_v_array_, float __pyx_v_shift_, __Pyx_memviewslice __pyx_v_mask_array, int __pyx_v_swap_row_column) {
  int __pyx_v_width;
  int __pyx_v_height;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  float __pyx_v_s;
  struct hsl __pyx_v_hsl_;
  struct rgb __pyx_v_rgb_;
  int __pyx_v_i;
  int __pyx_v_j;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("saturation_array24_mask_c2", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("PygameShader.shader.saturation_array24_mask_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10058:                                float shift_, unsigned char [:, :] mask_array, bint swap_row_column):
 10059:     """
 10060:     Change the saturation level of a pygame.Surface (compatible with 24bit only).
 10061:     Transform RGB model into HSL model and <shift_> saturation value.
 10062:     Optional mask_array to determine area to be modified.
 10063:     The mask should be a 2d array filled with float values
 10064: 
 10065:     :param array_: 3d numpy.ndarray shapes (w, h, 3) representing a 24bit format pygame.Surface.
 10066:     :param shift_: Value must be in range [-1.0 ... 1.0],
 10067:                    between [-1.0 ... 0.0] decrease saturation.
 10068:                    between [0.0  ... 1.0] increase saturation.
 10069:     :param mask_array: unsigned char numpy.ndarray shape (width, height)
 10070:     :param swap_row_column: swap row and column values (only apply to array_)
 10071:     :return: a pygame.Surface 24-bit without per-pixel information
 10072: 
 10073:     """
 10074: 
+10075:     assert -1.0 <= shift_ <= 1.0, 'Argument shift_ must be in range [-1.0 .. 1.0].'
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = (-1.0 <= __pyx_v_shift_);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_shift_ <= 1.0);
    }
    if (unlikely(!(__pyx_t_1 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Argument_shift__must_be_in_range_2);
      __PYX_ERR(1, 10075, __pyx_L1_error)
    }
  }
  #endif
 10076: 
 10077:     cdef int width, height
+10078:     try:
  {
    /*try:*/ {
/* … */
    }
  }
+10079:         if swap_row_column:
      __pyx_t_1 = (__pyx_v_swap_row_column != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L9;
      }
+10080:             height, width = array_.shape[:2]
        __pyx_t_5 = __pyx_v_array_.shape;
        __pyx_t_6 = (__pyx_t_5[0]);
        __pyx_t_7 = (__pyx_t_5[1]);
        __pyx_v_height = __pyx_t_6;
        __pyx_v_width = __pyx_t_7;
 10081:         else:
+10082:             width, height = array_.shape[:2]
      /*else*/ {
        __pyx_t_5 = __pyx_v_array_.shape;
        __pyx_t_7 = (__pyx_t_5[0]);
        __pyx_t_6 = (__pyx_t_5[1]);
        __pyx_v_width = __pyx_t_7;
        __pyx_v_height = __pyx_t_6;
      }
      __pyx_L9:;
 10083:     except (ValueError, pygame.error):
 10084:         raise ValueError(
 10085:             '\nArray type not compatible, expecting MemoryViewSlice got %s ' % type(array_))
 10086: 
 10087:     cdef:
 10088:         unsigned char *r
 10089:         unsigned char *g
 10090:         unsigned char *b
 10091:         float s
 10092:         hsl hsl_
 10093:         rgb rgb_
 10094:         int i, j
 10095: 
+10096:     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_L12;
        }
        __pyx_L12:;
      }
  }
+10097:         for i in prange(width, schedule='static', num_threads=THREADS):
        __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_10 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) schedule(static)
/* … */
        __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_10 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_g) lastprivate(__pyx_v_hsl_) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_s) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_10; __pyx_t_9++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_9);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((unsigned char *)1);
                            __pyx_v_g = ((unsigned char *)1);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_r = ((unsigned char *)1);
                            __pyx_v_s = ((float)__PYX_NAN());
+10098:             for j in range(height):
                            __pyx_t_11 = __pyx_v_height;
                            __pyx_t_12 = __pyx_t_11;
                            for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
                              __pyx_v_j = __pyx_t_13;
 10099: 
 10100:                 # load pixel RGB values
+10101:                 r = &array_[j, i, 0]
                              __pyx_t_14 = __pyx_v_j;
                              __pyx_t_15 = __pyx_v_i;
                              __pyx_t_16 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array_.data + __pyx_t_14 * __pyx_v_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_array_.strides[1]) ) + __pyx_t_16 * __pyx_v_array_.strides[2]) ))));
+10102:                 g = &array_[j, i, 1]
                              __pyx_t_16 = __pyx_v_j;
                              __pyx_t_15 = __pyx_v_i;
                              __pyx_t_14 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array_.data + __pyx_t_16 * __pyx_v_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_array_.strides[1]) ) + __pyx_t_14 * __pyx_v_array_.strides[2]) ))));
+10103:                 b = &array_[j, i, 2]
                              __pyx_t_14 = __pyx_v_j;
                              __pyx_t_15 = __pyx_v_i;
                              __pyx_t_16 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_array_.data + __pyx_t_14 * __pyx_v_array_.strides[0]) ) + __pyx_t_15 * __pyx_v_array_.strides[1]) ) + __pyx_t_16 * __pyx_v_array_.strides[2]) ))));
 10104: 
+10105:                 if mask_array[i, j] > 0:
                              __pyx_t_16 = __pyx_v_i;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_1 = (((*((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mask_array.data + __pyx_t_16 * __pyx_v_mask_array.strides[0]) ) + __pyx_t_15 * __pyx_v_mask_array.strides[1]) ))) > 0) != 0);
                              if (__pyx_t_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
      }
 10106:                     # # change saturation
+10107:                     hsl_ = struct_rgb_to_hsl(r[0] * <float>ONE_255, g[0] * <float>ONE_255,
                                __pyx_v_hsl_ = struct_rgb_to_hsl(((__pyx_v_r[0]) * ((float)0.00392156862745098)), ((__pyx_v_g[0]) * ((float)0.00392156862745098)), ((__pyx_v_b[0]) * ((float)0.00392156862745098)));
 10108:                     b[0] * <float>ONE_255)
+10109:                     s = min((hsl_.s + shift_), <float>1.0)
                                __pyx_t_17 = ((float)1.0);
                                __pyx_t_18 = (__pyx_v_hsl_.s + __pyx_v_shift_);
                                if (((__pyx_t_17 < __pyx_t_18) != 0)) {
                                  __pyx_t_19 = __pyx_t_17;
                                } else {
                                  __pyx_t_19 = __pyx_t_18;
                                }
                                __pyx_v_s = __pyx_t_19;
+10110:                     s = max(s, <float>0.0)
                                __pyx_t_19 = ((float)0.0);
                                __pyx_t_17 = __pyx_v_s;
                                if (((__pyx_t_19 > __pyx_t_17) != 0)) {
                                  __pyx_t_18 = __pyx_t_19;
                                } else {
                                  __pyx_t_18 = __pyx_t_17;
                                }
                                __pyx_v_s = __pyx_t_18;
+10111:                     rgb_ = struct_hsl_to_rgb(hsl_.h, s, hsl_.l)
                                __pyx_v_rgb_ = struct_hsl_to_rgb(__pyx_v_hsl_.h, __pyx_v_s, __pyx_v_hsl_.l);
 10112: 
+10113:                     r[0] = <unsigned char> (rgb_.r * <float>255.0)
                                (__pyx_v_r[0]) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+10114:                     g[0] = <unsigned char> (rgb_.g * <float>255.0)
                                (__pyx_v_g[0]) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+10115:                     b[0] = <unsigned char> (rgb_.b * <float>255.0)
                                (__pyx_v_b[0]) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.0)));
 10116: 
+10117:     return pygame.image.frombuffer(array_, (width, height), 'RGB')
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_pygame); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 10117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_n_s_image); if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 10117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 10117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  __pyx_t_22 = __pyx_memoryview_fromslice(__pyx_v_array_, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 10117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_23 = __Pyx_PyInt_From_int(__pyx_v_width); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 10117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __pyx_t_24 = __Pyx_PyInt_From_int(__pyx_v_height); if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 10117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __pyx_t_25 = PyTuple_New(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 10117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_GIVEREF(__pyx_t_23);
  PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_23);
  __Pyx_GIVEREF(__pyx_t_24);
  PyTuple_SET_ITEM(__pyx_t_25, 1, __pyx_t_24);
  __pyx_t_23 = 0;
  __pyx_t_24 = 0;
  __pyx_t_24 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_21))) {
    __pyx_t_24 = PyMethod_GET_SELF(__pyx_t_21);
    if (likely(__pyx_t_24)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
      __Pyx_INCREF(__pyx_t_24);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_21, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_21)) {
    PyObject *__pyx_temp[4] = {__pyx_t_24, __pyx_t_22, __pyx_t_25, __pyx_n_s_RGB};
    __pyx_t_20 = __Pyx_PyFunction_FastCall(__pyx_t_21, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 10117, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_21)) {
    PyObject *__pyx_temp[4] = {__pyx_t_24, __pyx_t_22, __pyx_t_25, __pyx_n_s_RGB};
    __pyx_t_20 = __Pyx_PyCFunction_FastCall(__pyx_t_21, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 10117, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  } else
  #endif
  {
    __pyx_t_23 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 10117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_23);
    if (__pyx_t_24) {
      __Pyx_GIVEREF(__pyx_t_24); PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_24); __pyx_t_24 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_22);
    PyTuple_SET_ITEM(__pyx_t_23, 0+__pyx_t_10, __pyx_t_22);
    __Pyx_GIVEREF(__pyx_t_25);
    PyTuple_SET_ITEM(__pyx_t_23, 1+__pyx_t_10, __pyx_t_25);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_23, 2+__pyx_t_10, __pyx_n_s_RGB);
    __pyx_t_22 = 0;
    __pyx_t_25 = 0;
    __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_t_23, NULL); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 10117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
  }
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  __pyx_r = __pyx_t_20;
  __pyx_t_20 = 0;
  goto __pyx_L0;
 10118: 
 10119: 
 10120: 
 10121: @cython.boundscheck(False)
 10122: @cython.wraparound(False)
 10123: @cython.nonecheck(False)
 10124: @cython.cdivision(True)
+10125: cpdef inline bpf24_c2(image, int threshold = 128, bint transpose=False):
static PyObject *__pyx_pw_12PygameShader_6shader_191bpf24_c2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_bpf24_c2(PyObject *__pyx_v_image, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_bpf24_c2 *__pyx_optional_args) {
  int __pyx_v_threshold = ((int)0x80);
  int __pyx_v_transpose = ((int)0);
  PyObject *__pyx_v_rgb_array = NULL;
  int __pyx_v_w;
  int __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_out_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_out_rgb_transposed = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_lum;
  float __pyx_v_c;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bpf24_c2", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_threshold = __pyx_optional_args->threshold;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_transpose = __pyx_optional_args->transpose;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __Pyx_XDECREF(__pyx_t_15);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_AddTraceback("PygameShader.shader.bpf24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rgb_array);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_out_rgb, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_out_rgb_transposed, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_191bpf24_c2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_190bpf24_c2[] = "\n    Bright pass filter compatible 24-bit \n\n    Bright pass filter for 24bit image (method using 3d array data structure)\n    Calculate the luminance of every pixels and applied an attenuation c = lum2 / lum\n    with lum2 = max(lum - threshold, 0) and\n    lum = rgb[i, j, 0] * 0.299 + rgb[i, j, 1] * 0.587 + rgb[i, j, 2] * 0.114\n    The output image will keep only bright area. You can adjust the threshold value\n    default 128 in order to get the desire changes.\n\n    :param transpose: Transpose the final array (width and height are transpose if True)\n    :param image: pygame.Surface 24 bit format (RGB)  without per-pixel information\n    :param threshold: integer; Threshold to consider for filtering pixels luminance values,\n    default is 128 range [0..255] unsigned char (python integer)\n    :return: Return a Pygame Surface and a 3d numpy.ndarray format (w, h, 3) \n    (only bright area of the image remains).\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_191bpf24_c2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_image = 0;
  int __pyx_v_threshold;
  int __pyx_v_transpose;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bpf24_c2 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_image,&__pyx_n_s_threshold_2,&__pyx_n_s_transpose_2,0};
    PyObject* values[3] = {0,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  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_image)) != 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_threshold_2);
          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_transpose_2);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bpf24_c2") < 0)) __PYX_ERR(1, 10125, __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_image = values[0];
    if (values[1]) {
      __pyx_v_threshold = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_threshold == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10125, __pyx_L3_error)
    } else {
      __pyx_v_threshold = ((int)0x80);
    }
    if (values[2]) {
      __pyx_v_transpose = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_transpose == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10125, __pyx_L3_error)
    } else {
      __pyx_v_transpose = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bpf24_c2", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 10125, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.bpf24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_190bpf24_c2(__pyx_self, __pyx_v_image, __pyx_v_threshold, __pyx_v_transpose);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_190bpf24_c2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_image, int __pyx_v_threshold, int __pyx_v_transpose) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bpf24_c2", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.threshold = __pyx_v_threshold;
  __pyx_t_2.transpose = __pyx_v_transpose;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_bpf24_c2(__pyx_v_image, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10125, __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.shader.bpf24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_bpf24_c2 {
  int __pyx_n;
  int threshold;
  int transpose;
};
 10126:     """
 10127:     Bright pass filter compatible 24-bit
 10128: 
 10129:     Bright pass filter for 24bit image (method using 3d array data structure)
 10130:     Calculate the luminance of every pixels and applied an attenuation c = lum2 / lum
 10131:     with lum2 = max(lum - threshold, 0) and
 10132:     lum = rgb[i, j, 0] * 0.299 + rgb[i, j, 1] * 0.587 + rgb[i, j, 2] * 0.114
 10133:     The output image will keep only bright area. You can adjust the threshold value
 10134:     default 128 in order to get the desire changes.
 10135: 
 10136:     :param transpose: Transpose the final array (width and height are transpose if True)
 10137:     :param image: pygame.Surface 24 bit format (RGB)  without per-pixel information
 10138:     :param threshold: integer; Threshold to consider for filtering pixels luminance values,
 10139:     default is 128 range [0..255] unsigned char (python integer)
 10140:     :return: Return a Pygame Surface and a 3d numpy.ndarray format (w, h, 3)
 10141:     (only bright area of the image remains).
 10142:     """
 10143: 
 10144:     # Fallback to default threshold value if argument
 10145:     # threshold value is incorrect
+10146:     if 0 > threshold > 255:
  __pyx_t_1 = (0 > __pyx_v_threshold);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_threshold > 0xFF);
  }
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+10147:         printf("\nArgument threshold must be in range [0...255], fallback to default value 128.")
    (void)(printf(((char const *)"\nArgument threshold must be in range [0...255], fallback to default value 128.")));
+10148:         threshold = 128
    __pyx_v_threshold = 0x80;
 10149: 
+10150:     assert isinstance(image, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Surface); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_image, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 10150, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!(__pyx_t_2 != 0))) {
+10151:            "\nExpecting pygame surface for argument image, got %s " % type(image)
      __pyx_t_4 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Expecting_pygame_surface_for_ar, ((PyObject *)Py_TYPE(__pyx_v_image))); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10151, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 10150, __pyx_L1_error)
    }
  }
  #endif
 10152: 
+10153:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }
+10154:         rgb_array = pixels3d(image)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10154, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_8, __pyx_v_image) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_image);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10154, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_rgb_array = __pyx_t_4;
      __pyx_t_4 = 0;
+10155:     except (pygame.error, ValueError):
    __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_3, &__pyx_t_8);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pygame); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10155, __pyx_L6_except_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10155, __pyx_L6_except_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_10) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_builtin_ValueError);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_ErrRestore(__pyx_t_4, __pyx_t_3, __pyx_t_8);
    __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_8 = 0;
    if (__pyx_t_11) {
      __Pyx_AddTraceback("PygameShader.shader.bpf24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(1, 10155, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_4);
+10156:         raise ValueError('\nInvalid surface.')
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10156, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(1, 10156, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;
    __pyx_L6_except_error:;
/* … */
  __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_Invalid_surface); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(1, 10156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__39);
  __Pyx_GIVEREF(__pyx_tuple__39);
 10157: 
 10158:     cdef:
 10159:         int w, h
+10160:     w, h = rgb_array.shape[:2]
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_rgb_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_4, 0, 2, NULL, NULL, &__pyx_slice__16, 0, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    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(1, 10160, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_8);
    #else
    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_10 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_12 = Py_TYPE(__pyx_t_10)->tp_iternext;
    index = 0; __pyx_t_4 = __pyx_t_12(__pyx_t_10); if (unlikely(!__pyx_t_4)) goto __pyx_L12_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 1; __pyx_t_8 = __pyx_t_12(__pyx_t_10); if (unlikely(!__pyx_t_8)) goto __pyx_L12_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_8);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_10), 2) < 0) __PYX_ERR(1, 10160, __pyx_L1_error)
    __pyx_t_12 = NULL;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L13_unpacking_done;
    __pyx_L12_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_12 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 10160, __pyx_L1_error)
    __pyx_L13_unpacking_done:;
  }
  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10160, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10160, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_w = __pyx_t_11;
  __pyx_v_h = __pyx_t_13;
 10161: 
 10162:     # check sizes
+10163:     assert w>0 and h>0,\
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = ((__pyx_v_w > 0) != 0);
    if (__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L14_bool_binop_done;
    }
    __pyx_t_1 = ((__pyx_v_h > 0) != 0);
    __pyx_t_2 = __pyx_t_1;
    __pyx_L14_bool_binop_done:;
    if (unlikely(!__pyx_t_2)) {
+10164:         'Incorrect surface dimensions should be (w>0, h>0) got (w:%s, h:%s)' % (w, h)
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10164, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10164, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10164, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8);
      __pyx_t_3 = 0;
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_Incorrect_surface_dimensions_sho, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10164, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(1, 10163, __pyx_L1_error)
    }
  }
  #endif
 10165: 
 10166: 
 10167:     cdef:
+10168:         unsigned char [:, :, :] rgb = rgb_array
  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_rgb_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(1, 10168, __pyx_L1_error)
  __pyx_v_rgb = __pyx_t_14;
  __pyx_t_14.memview = NULL;
  __pyx_t_14.data = NULL;
+10169:         unsigned char [:, :, ::1] out_rgb= numpy.empty((w, h, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_10);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_int_3);
  __pyx_t_4 = 0;
  __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_numpy); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_10);
      __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[3] = {__pyx_t_10, __pyx_t_9, __pyx_t_4};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10169, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_9, __pyx_t_4};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10169, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 10169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_13, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_13, __pyx_t_4);
    __pyx_t_9 = 0;
    __pyx_t_4 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_15, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10169, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_out_rgb = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
+10170:         unsigned char [:, :, ::1] out_rgb_transposed = numpy.empty((h, w, 3), numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 10170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_4);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_int_3);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_15);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_15, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_15)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_9, __pyx_t_3};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10170, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_9, __pyx_t_3};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10170, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_13, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_13, __pyx_t_3);
    __pyx_t_9 = 0;
    __pyx_t_3 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_10, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10170, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_out_rgb_transposed = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
+10171:         int i = 0, j = 0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 10172:         float lum, c
 10173:         unsigned char *r
 10174:         unsigned char *g
 10175:         unsigned char *b
 10176: 
+10177:     if transpose is not None and transpose==True:
  __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_v_transpose); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = (__pyx_t_8 != Py_None);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_17 = (__pyx_t_1 != 0);
  if (__pyx_t_17) {
  } else {
    __pyx_t_2 = __pyx_t_17;
    goto __pyx_L17_bool_binop_done;
  }
  __pyx_t_17 = ((__pyx_v_transpose == 1) != 0);
  __pyx_t_2 = __pyx_t_17;
  __pyx_L17_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+10178:         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_L21;
          }
          __pyx_L21:;
        }
    }
+10179:             for j in prange(0, h, schedule='static', num_threads=THREADS):
          __pyx_t_13 = __pyx_v_h;
          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_19 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
              if (__pyx_t_19 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_c) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_lum) lastprivate(__pyx_v_r) schedule(static)
/* … */
          __pyx_t_13 = __pyx_v_h;
          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_19 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
              if (__pyx_t_19 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_c) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_lum) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                      #endif /* _OPENMP */
                      for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_19; __pyx_t_18++){
                          {
                              __pyx_v_j = (int)(0 + 1 * __pyx_t_18);
                              /* Initialize private variables to invalid values */
                              __pyx_v_b = ((unsigned char *)1);
                              __pyx_v_c = ((float)__PYX_NAN());
                              __pyx_v_g = ((unsigned char *)1);
                              __pyx_v_i = ((int)0xbad0bad0);
                              __pyx_v_lum = ((float)__PYX_NAN());
                              __pyx_v_r = ((unsigned char *)1);
+10180:                 for i in range(0, w):
                              __pyx_t_11 = __pyx_v_w;
                              __pyx_t_20 = __pyx_t_11;
                              for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
                                __pyx_v_i = __pyx_t_21;
 10181:                     # ITU-R BT.601 luma coefficients
+10182:                     r = &rgb[i, j, 0]
                                __pyx_t_22 = __pyx_v_i;
                                __pyx_t_23 = __pyx_v_j;
                                __pyx_t_24 = 0;
                                __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_22 * __pyx_v_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb.strides[1]) ) + __pyx_t_24 * __pyx_v_rgb.strides[2]) ))));
+10183:                     g = &rgb[i, j, 1]
                                __pyx_t_24 = __pyx_v_i;
                                __pyx_t_23 = __pyx_v_j;
                                __pyx_t_22 = 1;
                                __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_24 * __pyx_v_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb.strides[2]) ))));
+10184:                     b = &rgb[i, j, 2]
                                __pyx_t_22 = __pyx_v_i;
                                __pyx_t_23 = __pyx_v_j;
                                __pyx_t_24 = 2;
                                __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_22 * __pyx_v_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb.strides[1]) ) + __pyx_t_24 * __pyx_v_rgb.strides[2]) ))));
 10185: 
+10186:                     lum = r[0] * <float>0.299 + g[0] * <float>0.587 + b[0] * <float>0.114
                                __pyx_v_lum = ((((__pyx_v_r[0]) * ((float)0.299)) + ((__pyx_v_g[0]) * ((float)0.587))) + ((__pyx_v_b[0]) * ((float)0.114)));
 10187: 
+10188:                     if lum > threshold:
                                __pyx_t_2 = ((__pyx_v_lum > __pyx_v_threshold) != 0);
                                if (__pyx_t_2) {
/* … */
                                  goto __pyx_L28;
                                }
+10189:                         c = (lum - threshold) / lum
                                  __pyx_v_c = ((__pyx_v_lum - __pyx_v_threshold) / __pyx_v_lum);
+10190:                         out_rgb_transposed[j, i, 0] = <unsigned char>(r[0] * c)
                                  __pyx_t_24 = __pyx_v_j;
                                  __pyx_t_23 = __pyx_v_i;
                                  __pyx_t_22 = 0;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb_transposed.data + __pyx_t_24 * __pyx_v_out_rgb_transposed.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb_transposed.strides[1]) )) + __pyx_t_22)) )) = ((unsigned char)((__pyx_v_r[0]) * __pyx_v_c));
+10191:                         out_rgb_transposed[j, i, 1] = <unsigned char>(g[0] * c)
                                  __pyx_t_22 = __pyx_v_j;
                                  __pyx_t_23 = __pyx_v_i;
                                  __pyx_t_24 = 1;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb_transposed.data + __pyx_t_22 * __pyx_v_out_rgb_transposed.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb_transposed.strides[1]) )) + __pyx_t_24)) )) = ((unsigned char)((__pyx_v_g[0]) * __pyx_v_c));
+10192:                         out_rgb_transposed[j, i, 2] = <unsigned char>(b[0] * c)
                                  __pyx_t_24 = __pyx_v_j;
                                  __pyx_t_23 = __pyx_v_i;
                                  __pyx_t_22 = 2;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb_transposed.data + __pyx_t_24 * __pyx_v_out_rgb_transposed.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb_transposed.strides[1]) )) + __pyx_t_22)) )) = ((unsigned char)((__pyx_v_b[0]) * __pyx_v_c));
 10193:                     else:
+10194:                         out_rgb_transposed[j, i, 0] = 0
                                /*else*/ {
                                  __pyx_t_22 = __pyx_v_j;
                                  __pyx_t_23 = __pyx_v_i;
                                  __pyx_t_24 = 0;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb_transposed.data + __pyx_t_22 * __pyx_v_out_rgb_transposed.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb_transposed.strides[1]) )) + __pyx_t_24)) )) = 0;
+10195:                         out_rgb_transposed[j, i, 1] = 0
                                  __pyx_t_24 = __pyx_v_j;
                                  __pyx_t_23 = __pyx_v_i;
                                  __pyx_t_22 = 1;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb_transposed.data + __pyx_t_24 * __pyx_v_out_rgb_transposed.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb_transposed.strides[1]) )) + __pyx_t_22)) )) = 0;
+10196:                         out_rgb_transposed[j, i, 2] = 0
                                  __pyx_t_22 = __pyx_v_j;
                                  __pyx_t_23 = __pyx_v_i;
                                  __pyx_t_24 = 2;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb_transposed.data + __pyx_t_22 * __pyx_v_out_rgb_transposed.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb_transposed.strides[1]) )) + __pyx_t_24)) )) = 0;
                                }
                                __pyx_L28:;
                              }
                          }
                      }
                  }
              }
          }
          #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
        }
 10197: 
+10198:         return frombuffer(out_rgb_transposed, (w, h), 'RGB'), out_rgb_transposed
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 10198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_10 = __pyx_memoryview_fromslice(__pyx_v_out_rgb_transposed, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_9);
    __pyx_t_3 = 0;
    __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_15);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_15, function);
        __pyx_t_13 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_15)) {
      PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_10, __pyx_t_4, __pyx_n_s_RGB};
      __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10198, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
      PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_10, __pyx_t_4, __pyx_n_s_RGB};
      __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10198, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10198, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_13, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_13, __pyx_t_4);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_13, __pyx_n_s_RGB);
      __pyx_t_10 = 0;
      __pyx_t_4 = 0;
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10198, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = __pyx_memoryview_fromslice(__pyx_v_out_rgb_transposed, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 10198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_15);
    __pyx_t_8 = 0;
    __pyx_t_15 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 10199:     else:
+10200:         with nogil:
  /*else*/ {
    {
        #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_L33;
          }
          __pyx_L33:;
        }
    }
+10201:             for j in prange(0, h, schedule='static', num_threads=THREADS):
          __pyx_t_13 = __pyx_v_h;
          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_18 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
              if (__pyx_t_18 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_c) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_lum) lastprivate(__pyx_v_r) schedule(static)
/* … */
          __pyx_t_13 = __pyx_v_h;
          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_18 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
              if (__pyx_t_18 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_c) lastprivate(__pyx_v_g) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_lum) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                      #endif /* _OPENMP */
                      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19++){
                          {
                              __pyx_v_j = (int)(0 + 1 * __pyx_t_19);
                              /* Initialize private variables to invalid values */
                              __pyx_v_b = ((unsigned char *)1);
                              __pyx_v_c = ((float)__PYX_NAN());
                              __pyx_v_g = ((unsigned char *)1);
                              __pyx_v_i = ((int)0xbad0bad0);
                              __pyx_v_lum = ((float)__PYX_NAN());
                              __pyx_v_r = ((unsigned char *)1);
+10202:                 for i in range(0, w):
                              __pyx_t_11 = __pyx_v_w;
                              __pyx_t_20 = __pyx_t_11;
                              for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
                                __pyx_v_i = __pyx_t_21;
+10203:                     r = &rgb[i, j, 0]
                                __pyx_t_24 = __pyx_v_i;
                                __pyx_t_23 = __pyx_v_j;
                                __pyx_t_22 = 0;
                                __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_24 * __pyx_v_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb.strides[2]) ))));
+10204:                     g = &rgb[i, j, 1]
                                __pyx_t_22 = __pyx_v_i;
                                __pyx_t_23 = __pyx_v_j;
                                __pyx_t_24 = 1;
                                __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_22 * __pyx_v_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb.strides[1]) ) + __pyx_t_24 * __pyx_v_rgb.strides[2]) ))));
+10205:                     b = &rgb[i, j, 2]
                                __pyx_t_24 = __pyx_v_i;
                                __pyx_t_23 = __pyx_v_j;
                                __pyx_t_22 = 2;
                                __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_24 * __pyx_v_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb.strides[2]) ))));
 10206:                     # ITU-R BT.601 luma coefficients
+10207:                     lum = r[0] * <float>0.299 + g[0] * <float>0.587 + b[0] * <float>0.114
                                __pyx_v_lum = ((((__pyx_v_r[0]) * ((float)0.299)) + ((__pyx_v_g[0]) * ((float)0.587))) + ((__pyx_v_b[0]) * ((float)0.114)));
+10208:                     if lum > threshold:
                                __pyx_t_2 = ((__pyx_v_lum > __pyx_v_threshold) != 0);
                                if (__pyx_t_2) {
/* … */
                                  goto __pyx_L40;
                                }
+10209:                         c = (lum - threshold) / lum
                                  __pyx_v_c = ((__pyx_v_lum - __pyx_v_threshold) / __pyx_v_lum);
+10210:                         out_rgb[i, j, 0] = <unsigned char>(r[0] * c)
                                  __pyx_t_22 = __pyx_v_i;
                                  __pyx_t_23 = __pyx_v_j;
                                  __pyx_t_24 = 0;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb.data + __pyx_t_22 * __pyx_v_out_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb.strides[1]) )) + __pyx_t_24)) )) = ((unsigned char)((__pyx_v_r[0]) * __pyx_v_c));
+10211:                         out_rgb[i, j, 1] = <unsigned char>(g[0] * c)
                                  __pyx_t_24 = __pyx_v_i;
                                  __pyx_t_23 = __pyx_v_j;
                                  __pyx_t_22 = 1;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb.data + __pyx_t_24 * __pyx_v_out_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb.strides[1]) )) + __pyx_t_22)) )) = ((unsigned char)((__pyx_v_g[0]) * __pyx_v_c));
+10212:                         out_rgb[i, j, 2] = <unsigned char>(b[0] * c)
                                  __pyx_t_22 = __pyx_v_i;
                                  __pyx_t_23 = __pyx_v_j;
                                  __pyx_t_24 = 2;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb.data + __pyx_t_22 * __pyx_v_out_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb.strides[1]) )) + __pyx_t_24)) )) = ((unsigned char)((__pyx_v_b[0]) * __pyx_v_c));
 10213:                     else:
+10214:                         out_rgb[i, j, 0], out_rgb[i, j, 1], out_rgb[i, j, 2] = 0, 0, 0
                                /*else*/ {
                                  __pyx_t_25 = 0;
                                  __pyx_t_26 = 0;
                                  __pyx_t_27 = 0;
                                  __pyx_t_24 = __pyx_v_i;
                                  __pyx_t_23 = __pyx_v_j;
                                  __pyx_t_22 = 0;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb.data + __pyx_t_24 * __pyx_v_out_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb.strides[1]) )) + __pyx_t_22)) )) = __pyx_t_25;
                                  __pyx_t_22 = __pyx_v_i;
                                  __pyx_t_23 = __pyx_v_j;
                                  __pyx_t_24 = 1;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb.data + __pyx_t_22 * __pyx_v_out_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb.strides[1]) )) + __pyx_t_24)) )) = __pyx_t_26;
                                  __pyx_t_24 = __pyx_v_i;
                                  __pyx_t_23 = __pyx_v_j;
                                  __pyx_t_22 = 2;
                                  *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_out_rgb.data + __pyx_t_24 * __pyx_v_out_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_out_rgb.strides[1]) )) + __pyx_t_22)) )) = __pyx_t_27;
                                }
                                __pyx_L40:;
                              }
                          }
                      }
                  }
              }
          }
          #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
        }
 10215: 
+10216:         return frombuffer(out_rgb, (w, h), 'RGB'), out_rgb
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 10216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_out_rgb, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_10);
    __pyx_t_4 = 0;
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_15);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_15, function);
        __pyx_t_13 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_15)) {
      PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_t_8, __pyx_t_9, __pyx_n_s_RGB};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10216, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
      PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_t_8, __pyx_t_9, __pyx_n_s_RGB};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10216, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10216, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_13, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_13, __pyx_t_9);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_13, __pyx_n_s_RGB);
      __pyx_t_8 = 0;
      __pyx_t_9 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10216, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = __pyx_memoryview_fromslice(__pyx_v_out_rgb, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 10216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_15);
    __pyx_t_3 = 0;
    __pyx_t_15 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }
 10217: 
 10218: 
 10219: @cython.binding(False)
 10220: @cython.binding(False)
 10221: @cython.boundscheck(False)
 10222: @cython.wraparound(False)
 10223: @cython.nonecheck(False)
 10224: @cython.cdivision(True)
 10225: @cython.profile(False)
+10226: cpdef inline bloom_effect_array24_c2(
static PyObject *__pyx_pw_12PygameShader_6shader_193bloom_effect_array24_c2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_12PygameShader_6shader_bloom_effect_array24_c2(PyObject *__pyx_v_surface_, unsigned char __pyx_v_threshold_, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_bloom_effect_array24_c2 *__pyx_optional_args) {
  int __pyx_v_smooth_ = ((int)1);
/* … */
  /* 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_5);
  __Pyx_XDECREF(__pyx_t_13);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
  __Pyx_AddTraceback("PygameShader.shader.bloom_effect_array24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_surface_cp);
  __Pyx_XDECREF(__pyx_v_s4);
  __Pyx_XDECREF(__pyx_v_bpf_surface);
  __Pyx_XDECREF(__pyx_v_bpf_array);
  __Pyx_XDECREF(__pyx_v_s2);
  __Pyx_XDECREF(__pyx_v_s2_array);
  __Pyx_XDECREF(__pyx_v_b2_blurred);
  __Pyx_XDECREF(__pyx_v_s4_array);
  __Pyx_XDECREF(__pyx_v_b4_blurred);
  __Pyx_XDECREF(__pyx_v_s8);
  __Pyx_XDECREF(__pyx_v_s8_array);
  __Pyx_XDECREF(__pyx_v_b8_blurred);
  __Pyx_XDECREF(__pyx_v_s16);
  __Pyx_XDECREF(__pyx_v_s16_array);
  __Pyx_XDECREF(__pyx_v_b16_blurred);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_193bloom_effect_array24_c2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_192bloom_effect_array24_c2[] = "\n    Create a bloom effect on a pygame.Surface (compatible 24 bit surface)\n    This method is using array structure.\n\n    definition:\n        Bloom is a computer graphics effect used in video games, demos,\n        and high dynamic range rendering to reproduce an imaging artifact of real-world cameras.\n\n    1)First apply a bright pass filter to the pygame surface(SDL surface) using methods\n      bpf24_b_c  (adjust the threshold value to get the best filter effect).\n    2)Downside the newly created bpf image by factor x2, x4, x8, x16 using the pygame scale method (no need to\n      use smoothscale (bilinear filtering method).\n    3)Apply a Gaussian blur 5x5 effect on each of the downsized bpf images (if smooth_ is > 1, then the Gaussian\n      filter 5x5 will by applied more than once. Note, this have little effect on the final image quality.\n    4)Re-scale all the bpf images using a bilinear filter (width and height of original image).\n      Using an un-filtered rescaling method will pixelate the final output image.\n      For best performances sets smoothscale acceleration.\n      A value of 'GENERIC' turns off acceleration. 'MMX' uses MMX instructions only.\n      'SSE' allows SSE extensions as well. \n    5)Blit all the bpf images on the original surface, use pygame additive blend mode for\n      a smooth and brighter effect.\n\n    Notes:\n    The downscaling process of all sub-images could be done in a single process to increase performance.\n\n    :param fast_: bool; True | False. Speed up the bloom process using only the x16 surface and using \n    an optimized bright pass filter (texture size downscale x4 prior processing)\n\n    :param mask_: \n    :param surface_: pygame.Surface 24-bit format surface\n    :param threshold_: integer; Threshold value used by the bright pass algorithm (default 128)\n    :param smooth_: Number of Gaussian blur 5x5 to apply to downside images.\n    :return : Returns a pygame.Surface with a bloom effect (24 bit surfa""ce)\n\n\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_193bloom_effect_array24_c2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  unsigned char __pyx_v_threshold_;
  int __pyx_v_smooth_;
  PyObject *__pyx_v_mask_ = 0;
  int __pyx_v_fast_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bloom_effect_array24_c2 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_threshold,&__pyx_n_s_smooth,&__pyx_n_s_mask_2,&__pyx_n_s_fast,0};
    PyObject* values[5] = {0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_192bloom_effect_array24_c2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, unsigned char __pyx_v_threshold_, int __pyx_v_smooth_, PyObject *__pyx_v_mask_, int __pyx_v_fast_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bloom_effect_array24_c2", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.smooth_ = __pyx_v_smooth_;
  __pyx_t_2.mask_ = __pyx_v_mask_;
  __pyx_t_2.fast_ = __pyx_v_fast_;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_bloom_effect_array24_c2(__pyx_v_surface_, __pyx_v_threshold_, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10226, __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.shader.bloom_effect_array24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+10227:         object surface_, unsigned char threshold_, int smooth_=1, mask_=None, bint fast_ = False):
  PyObject *__pyx_v_mask_ = ((PyObject *)Py_None);
  int __pyx_v_fast_ = ((int)0);
  PyObject *__pyx_v_surface_cp = NULL;
  int __pyx_v_w;
  int __pyx_v_h;
  CYTHON_UNUSED int __pyx_v_bit_size;
  int __pyx_v_w2;
  int __pyx_v_h2;
  int __pyx_v_w4;
  int __pyx_v_h4;
  int __pyx_v_w8;
  int __pyx_v_h8;
  int __pyx_v_w16;
  int __pyx_v_h16;
  int __pyx_v_x2;
  int __pyx_v_x4;
  int __pyx_v_x8;
  int __pyx_v_x16;
  PyObject *__pyx_v_s4 = NULL;
  PyObject *__pyx_v_bpf_surface = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_bpf_array = NULL;
  PyObject *__pyx_v_s2 = NULL;
  PyObject *__pyx_v_s2_array = NULL;
  CYTHON_UNUSED int __pyx_v_r;
  PyObject *__pyx_v_b2_blurred = NULL;
  PyObject *__pyx_v_s4_array = NULL;
  PyObject *__pyx_v_b4_blurred = NULL;
  PyObject *__pyx_v_s8 = NULL;
  PyObject *__pyx_v_s8_array = NULL;
  PyObject *__pyx_v_b8_blurred = NULL;
  PyObject *__pyx_v_s16 = NULL;
  PyObject *__pyx_v_s16_array = NULL;
  PyObject *__pyx_v_b16_blurred = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bloom_effect_array24_c2", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_smooth_ = __pyx_optional_args->smooth_;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_mask_ = __pyx_optional_args->mask_;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_fast_ = __pyx_optional_args->fast_;
        }
      }
    }
  }
/* … */
    values[3] = ((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  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_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_threshold)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bloom_effect_array24_c2", 0, 2, 5, 1); __PYX_ERR(1, 10226, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_smooth);
          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_mask_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_fast);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bloom_effect_array24_c2") < 0)) __PYX_ERR(1, 10226, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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_surface_ = values[0];
    __pyx_v_threshold_ = __Pyx_PyInt_As_unsigned_char(values[1]); if (unlikely((__pyx_v_threshold_ == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 10227, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_smooth_ = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_smooth_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10227, __pyx_L3_error)
    } else {
      __pyx_v_smooth_ = ((int)1);
    }
    __pyx_v_mask_ = values[3];
    if (values[4]) {
      __pyx_v_fast_ = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_fast_ == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10227, __pyx_L3_error)
    } else {
      __pyx_v_fast_ = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bloom_effect_array24_c2", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 10226, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.bloom_effect_array24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_192bloom_effect_array24_c2(__pyx_self, __pyx_v_surface_, __pyx_v_threshold_, __pyx_v_smooth_, __pyx_v_mask_, __pyx_v_fast_);
/* … */
struct __pyx_opt_args_12PygameShader_6shader_bloom_effect_array24_c2 {
  int __pyx_n;
  int smooth_;
  PyObject *mask_;
  int fast_;
};
 10228:     """
 10229:     Create a bloom effect on a pygame.Surface (compatible 24 bit surface)
 10230:     This method is using array structure.
 10231: 
 10232:     definition:
 10233:         Bloom is a computer graphics effect used in video games, demos,
 10234:         and high dynamic range rendering to reproduce an imaging artifact of real-world cameras.
 10235: 
 10236:     1)First apply a bright pass filter to the pygame surface(SDL surface) using methods
 10237:       bpf24_b_c  (adjust the threshold value to get the best filter effect).
 10238:     2)Downside the newly created bpf image by factor x2, x4, x8, x16 using the pygame scale method (no need to
 10239:       use smoothscale (bilinear filtering method).
 10240:     3)Apply a Gaussian blur 5x5 effect on each of the downsized bpf images (if smooth_ is > 1, then the Gaussian
 10241:       filter 5x5 will by applied more than once. Note, this have little effect on the final image quality.
 10242:     4)Re-scale all the bpf images using a bilinear filter (width and height of original image).
 10243:       Using an un-filtered rescaling method will pixelate the final output image.
 10244:       For best performances sets smoothscale acceleration.
 10245:       A value of 'GENERIC' turns off acceleration. 'MMX' uses MMX instructions only.
 10246:       'SSE' allows SSE extensions as well.
 10247:     5)Blit all the bpf images on the original surface, use pygame additive blend mode for
 10248:       a smooth and brighter effect.
 10249: 
 10250:     Notes:
 10251:     The downscaling process of all sub-images could be done in a single process to increase performance.
 10252: 
 10253:     :param fast_: bool; True | False. Speed up the bloom process using only the x16 surface and using
 10254:     an optimized bright pass filter (texture size downscale x4 prior processing)
 10255: 
 10256:     :param mask_:
 10257:     :param surface_: pygame.Surface 24-bit format surface
 10258:     :param threshold_: integer; Threshold value used by the bright pass algorithm (default 128)
 10259:     :param smooth_: Number of Gaussian blur 5x5 to apply to downside images.
 10260:     :return : Returns a pygame.Surface with a bloom effect (24 bit surface)
 10261: 
 10262: 
 10263:     """
 10264:     # todo mask_ doc
 10265: 
+10266:     surface_cp = surface_.copy()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 10266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_surface_cp = __pyx_t_1;
  __pyx_t_1 = 0;
 10267: 
+10268:     assert smooth_ > 0, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_smooth_ > 0) != 0))) {
+10269:         "Argument smooth_ must be > 0, got %s " % smooth_
      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_smooth_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Argument_smooth__must_be_0_got_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 10268, __pyx_L1_error)
    }
  }
  #endif
+10270:     assert -1 < threshold_ < 256, \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_4 = (-1L < __pyx_v_threshold_);
    if (__pyx_t_4) {
      __pyx_t_4 = (__pyx_v_threshold_ < 0x100);
    }
    if (unlikely(!(__pyx_t_4 != 0))) {
+10271:         "Argument threshold_ must be in range [0...255] got %s " % threshold_
      __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_threshold_); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Argument_threshold__must_be_in_r, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 10270, __pyx_L1_error)
    }
  }
  #endif
 10272: 
 10273:     cdef:
 10274:         int w, h, bit_size
 10275:         int w2, h2, w4, h4, w8, h8, w16, h16
+10276:         bint x2, x4, x8, x16 = False
  __pyx_v_x16 = 0;
 10277: 
+10278:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 10278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 10278, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 10278, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 10278, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_7;
  __pyx_v_h = __pyx_t_8;
+10279:     bit_size = surface_.get_bitsize()
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_bitsize); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10279, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_bit_size = __pyx_t_8;
 10280: 
+10281:     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:;
      }
  }
+10282:         w2, h2 = w >> 1, h >> 1
        __pyx_t_9 = (__pyx_v_w >> 1);
        __pyx_t_10 = (__pyx_v_h >> 1);
        __pyx_v_w2 = __pyx_t_9;
        __pyx_v_h2 = __pyx_t_10;
+10283:         w4, h4 = w2 >> 1, h2 >> 1
        __pyx_t_10 = (__pyx_v_w2 >> 1);
        __pyx_t_9 = (__pyx_v_h2 >> 1);
        __pyx_v_w4 = __pyx_t_10;
        __pyx_v_h4 = __pyx_t_9;
+10284:         w8, h8 = w4 >> 1, h4 >> 1
        __pyx_t_9 = (__pyx_v_w4 >> 1);
        __pyx_t_10 = (__pyx_v_h4 >> 1);
        __pyx_v_w8 = __pyx_t_9;
        __pyx_v_h8 = __pyx_t_10;
+10285:         w16, h16 = w8 >> 1, h8 >> 1
        __pyx_t_10 = (__pyx_v_w8 >> 1);
        __pyx_t_9 = (__pyx_v_h8 >> 1);
        __pyx_v_w16 = __pyx_t_10;
        __pyx_v_h16 = __pyx_t_9;
      }
 10286: 
+10287:     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_L10;
        }
        __pyx_L10:;
      }
  }
+10288:         if w2 > 0 and h2 > 0:
        __pyx_t_11 = ((__pyx_v_w2 > 0) != 0);
        if (__pyx_t_11) {
        } else {
          __pyx_t_4 = __pyx_t_11;
          goto __pyx_L12_bool_binop_done;
        }
        __pyx_t_11 = ((__pyx_v_h2 > 0) != 0);
        __pyx_t_4 = __pyx_t_11;
        __pyx_L12_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
          goto __pyx_L11;
        }
+10289:             x2 = True
          __pyx_v_x2 = 1;
 10290:         else:
+10291:             x2 = False
        /*else*/ {
          __pyx_v_x2 = 0;
        }
        __pyx_L11:;
 10292: 
+10293:         if w4 > 0 and h4 > 0:
        __pyx_t_11 = ((__pyx_v_w4 > 0) != 0);
        if (__pyx_t_11) {
        } else {
          __pyx_t_4 = __pyx_t_11;
          goto __pyx_L15_bool_binop_done;
        }
        __pyx_t_11 = ((__pyx_v_h4 > 0) != 0);
        __pyx_t_4 = __pyx_t_11;
        __pyx_L15_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
          goto __pyx_L14;
        }
+10294:             x4 = True
          __pyx_v_x4 = 1;
 10295:         else:
+10296:             x4 = False
        /*else*/ {
          __pyx_v_x4 = 0;
        }
        __pyx_L14:;
 10297: 
+10298:         if w8 > 0 and h8 > 0:
        __pyx_t_11 = ((__pyx_v_w8 > 0) != 0);
        if (__pyx_t_11) {
        } else {
          __pyx_t_4 = __pyx_t_11;
          goto __pyx_L18_bool_binop_done;
        }
        __pyx_t_11 = ((__pyx_v_h8 > 0) != 0);
        __pyx_t_4 = __pyx_t_11;
        __pyx_L18_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
          goto __pyx_L17;
        }
+10299:             x8 = True
          __pyx_v_x8 = 1;
 10300:         else:
+10301:             x8 = False
        /*else*/ {
          __pyx_v_x8 = 0;
        }
        __pyx_L17:;
 10302: 
+10303:         if w16 > 0 and h16 > 0:
        __pyx_t_11 = ((__pyx_v_w16 > 0) != 0);
        if (__pyx_t_11) {
        } else {
          __pyx_t_4 = __pyx_t_11;
          goto __pyx_L21_bool_binop_done;
        }
        __pyx_t_11 = ((__pyx_v_h16 > 0) != 0);
        __pyx_t_4 = __pyx_t_11;
        __pyx_L21_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
          goto __pyx_L20;
        }
+10304:             x16 = True
          __pyx_v_x16 = 1;
 10305:         else:
+10306:             x16 = False
        /*else*/ {
          __pyx_v_x16 = 0;
        }
        __pyx_L20:;
      }
 10307: 
 10308:     # check if the first reduction is > 0
 10309:     # if not we cannot blur that surface (too small)
+10310:     if not x2:
  __pyx_t_4 = ((!(__pyx_v_x2 != 0)) != 0);
  if (__pyx_t_4) {
/* … */
  }
+10311:         return pygame.Surface((1, 1))
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10311, __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 && unlikely(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_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_tuple__40) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_tuple__40);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
/* … */
  __pyx_tuple__40 = PyTuple_Pack(2, __pyx_int_1, __pyx_int_1); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(1, 10311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__40);
  __Pyx_GIVEREF(__pyx_tuple__40);
 10312: 
+10313:     if fast_:
  __pyx_t_4 = (__pyx_v_fast_ != 0);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L24;
  }
 10314: 
+10315:         x2, x4, x8 = False, False, False
    __pyx_t_4 = 0;
    __pyx_t_11 = 0;
    __pyx_t_12 = 0;
    __pyx_v_x2 = __pyx_t_4;
    __pyx_v_x4 = __pyx_t_11;
    __pyx_v_x8 = __pyx_t_12;
 10316: 
+10317:         s4 = scale(surface_, (w >> 2, h >> 2))
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10317, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_w >> 2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10317, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyInt_From_long((__pyx_v_h >> 2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10317, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10317, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_surface_, __pyx_t_13};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10317, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_surface_, __pyx_t_13};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10317, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10317, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_v_surface_);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_v_surface_);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10317, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_s4 = __pyx_t_1;
    __pyx_t_1 = 0;
+10318:         bpf_surface, bpf_array = bpf24_c2(s4, threshold=threshold_, transpose=True)
    __pyx_t_14.__pyx_n = 2;
    __pyx_t_14.threshold = __pyx_v_threshold_;
    __pyx_t_14.transpose = 1;
    __pyx_t_1 = __pyx_f_12PygameShader_6shader_bpf24_c2(__pyx_v_s4, 0, &__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10318, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    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(1, 10318, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      #else
      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10318, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10318, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_13 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10318, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_13)->tp_iternext;
      index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_13); if (unlikely(!__pyx_t_2)) goto __pyx_L25_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_13); if (unlikely(!__pyx_t_3)) goto __pyx_L25_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_13), 2) < 0) __PYX_ERR(1, 10318, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L26_unpacking_done;
      __pyx_L25_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(1, 10318, __pyx_L1_error)
      __pyx_L26_unpacking_done:;
    }
    __pyx_v_bpf_surface = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_bpf_array = __pyx_t_3;
    __pyx_t_3 = 0;
+10319:         bpf_surface = scale(bpf_surface, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_scale); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10319, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10319, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10319, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10319, __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_13);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_13);
    __pyx_t_2 = 0;
    __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_bpf_surface, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10319, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_bpf_surface, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10319, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10319, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_INCREF(__pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_v_bpf_surface);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_8, __pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_8, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10319, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_bpf_surface, __pyx_t_1);
    __pyx_t_1 = 0;
 10320: 
 10321:     else:
 10322:         # BRIGHT PASS FILTER
+10323:         bpf_surface, bpf_array = bpf24_c2(surface_, threshold=threshold_, transpose=True)
  /*else*/ {
    __pyx_t_14.__pyx_n = 2;
    __pyx_t_14.threshold = __pyx_v_threshold_;
    __pyx_t_14.transpose = 1;
    __pyx_t_1 = __pyx_f_12PygameShader_6shader_bpf24_c2(__pyx_v_surface_, 0, &__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    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(1, 10323, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10323, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10323, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10323, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L27_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L27_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 10323, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L28_unpacking_done;
      __pyx_L27_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(1, 10323, __pyx_L1_error)
      __pyx_L28_unpacking_done:;
    }
    __pyx_v_bpf_surface = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_bpf_array = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L24:;
 10324: 
+10325:     if x2:
  __pyx_t_12 = (__pyx_v_x2 != 0);
  if (__pyx_t_12) {
/* … */
  }
+10326:         s2 = scale(bpf_surface, (w2, h2))
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_h2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_bpf_surface, __pyx_t_13};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10326, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_bpf_surface, __pyx_t_13};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10326, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10326, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_v_bpf_surface);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10326, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_s2 = __pyx_t_1;
    __pyx_t_1 = 0;
+10327:         s2_array = numpy.array(s2.get_view('3'), dtype=numpy.uint8).transpose(1, 0, 2)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_s2, __pyx_n_s_get_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_13, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10327, __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(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_numpy); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_uint8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10327, __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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_s2_array = __pyx_t_5;
    __pyx_t_5 = 0;
+10328:         if smooth_ > 1:
    __pyx_t_12 = ((__pyx_v_smooth_ > 1) != 0);
    if (__pyx_t_12) {
/* … */
      goto __pyx_L30;
    }
+10329:             for r in range(smooth_):
      __pyx_t_8 = __pyx_v_smooth_;
      __pyx_t_7 = __pyx_t_8;
      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_7; __pyx_t_15+=1) {
        __pyx_v_r = __pyx_t_15;
+10330:                 s2_array = blur5x5_array24_c2(s2_array)
        __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s2_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10330, __pyx_L1_error)
        __pyx_t_17 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_t_16, NULL); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10330, __pyx_L1_error)
        __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
        __pyx_t_16.memview = NULL;
        __pyx_t_16.data = NULL;
        __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_17, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10330, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
        __pyx_t_17.memview = NULL;
        __pyx_t_17.data = NULL;
        __Pyx_DECREF_SET(__pyx_v_s2_array, __pyx_t_5);
        __pyx_t_5 = 0;
      }
 10331:         else:
+10332:             s2_array = blur5x5_array24_c2(s2_array)
    /*else*/ {
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s2_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10332, __pyx_L1_error)
      __pyx_t_17 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_t_16, NULL); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10332, __pyx_L1_error)
      __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
      __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_17, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10332, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
      __pyx_t_17.memview = NULL;
      __pyx_t_17.data = NULL;
      __Pyx_DECREF_SET(__pyx_v_s2_array, __pyx_t_5);
      __pyx_t_5 = 0;
    }
    __pyx_L30:;
+10333:         b2_blurred = frombuffer(s2_array, (w2, h2), 'RGB')
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_s2_array, __pyx_t_13, __pyx_n_s_RGB};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10333, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_s2_array, __pyx_t_13, __pyx_n_s_RGB};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10333, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10333, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_s2_array);
      __Pyx_GIVEREF(__pyx_v_s2_array);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_v_s2_array);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_t_13);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_8, __pyx_n_s_RGB);
      __pyx_t_13 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10333, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_b2_blurred = __pyx_t_5;
    __pyx_t_5 = 0;
+10334:         s2 = smoothscale(b2_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_13);
    __pyx_t_3 = 0;
    __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_b2_blurred, __pyx_t_2};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10334, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_b2_blurred, __pyx_t_2};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10334, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10334, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b2_blurred);
      __Pyx_GIVEREF(__pyx_v_b2_blurred);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_v_b2_blurred);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10334, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_s2, __pyx_t_5);
    __pyx_t_5 = 0;
+10335:         surface_cp.blit(s2, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_cp, __pyx_n_s_blit); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_s2);
    __Pyx_GIVEREF(__pyx_v_s2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s2);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_tuple__12);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_special_flags, __pyx_t_2) < 0) __PYX_ERR(1, 10335, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __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;
 10336: 
+10337:     if x4:
  __pyx_t_12 = (__pyx_v_x4 != 0);
  if (__pyx_t_12) {
/* … */
  }
+10338:         s4 = scale(bpf_surface, (w4, h4))
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_scale); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_5);
    __pyx_t_1 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_bpf_surface, __pyx_t_13};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10338, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_bpf_surface, __pyx_t_13};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10338, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_v_bpf_surface);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_8, __pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_8, __pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10338, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_s4, __pyx_t_2);
    __pyx_t_2 = 0;
+10339:         s4_array = numpy.array(s4.get_view('3'), dtype=numpy.uint8).transpose(1, 0, 2)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_s4, __pyx_n_s_get_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_2 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_13, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10339, __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(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_numpy); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_uint8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __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_5, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_s4_array = __pyx_t_5;
    __pyx_t_5 = 0;
+10340:         if smooth_ > 1:
    __pyx_t_12 = ((__pyx_v_smooth_ > 1) != 0);
    if (__pyx_t_12) {
/* … */
      goto __pyx_L34;
    }
+10341:             for r in range(smooth_):
      __pyx_t_8 = __pyx_v_smooth_;
      __pyx_t_7 = __pyx_t_8;
      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_7; __pyx_t_15+=1) {
        __pyx_v_r = __pyx_t_15;
+10342:                 s4_array = blur5x5_array24_c2(s4_array)
        __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s4_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10342, __pyx_L1_error)
        __pyx_t_17 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_t_16, NULL); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10342, __pyx_L1_error)
        __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
        __pyx_t_16.memview = NULL;
        __pyx_t_16.data = NULL;
        __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_17, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10342, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
        __pyx_t_17.memview = NULL;
        __pyx_t_17.data = NULL;
        __Pyx_DECREF_SET(__pyx_v_s4_array, __pyx_t_5);
        __pyx_t_5 = 0;
      }
 10343:         else:
+10344:             s4_array = blur5x5_array24_c2(s4_array)
    /*else*/ {
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s4_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10344, __pyx_L1_error)
      __pyx_t_17 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_t_16, NULL); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10344, __pyx_L1_error)
      __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
      __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_17, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10344, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
      __pyx_t_17.memview = NULL;
      __pyx_t_17.data = NULL;
      __Pyx_DECREF_SET(__pyx_v_s4_array, __pyx_t_5);
      __pyx_t_5 = 0;
    }
    __pyx_L34:;
+10345:         b4_blurred = frombuffer(s4_array, (w4, h4), 'RGB')
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(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_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_s4_array, __pyx_t_13, __pyx_n_s_RGB};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10345, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_s4_array, __pyx_t_13, __pyx_n_s_RGB};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10345, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10345, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_v_s4_array);
      __Pyx_GIVEREF(__pyx_v_s4_array);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_8, __pyx_v_s4_array);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_8, __pyx_t_13);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_8, __pyx_n_s_RGB);
      __pyx_t_13 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10345, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_b4_blurred = __pyx_t_5;
    __pyx_t_5 = 0;
+10346:         s4 = smoothscale(b4_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_13);
    __pyx_t_1 = 0;
    __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_b4_blurred, __pyx_t_3};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10346, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_b4_blurred, __pyx_t_3};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10346, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10346, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b4_blurred);
      __Pyx_GIVEREF(__pyx_v_b4_blurred);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_8, __pyx_v_b4_blurred);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_8, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10346, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_s4, __pyx_t_5);
    __pyx_t_5 = 0;
+10347:         surface_cp.blit(s4, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_cp, __pyx_n_s_blit); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_s4);
    __Pyx_GIVEREF(__pyx_v_s4);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_s4);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_tuple__12);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_special_flags, __pyx_t_3) < 0) __PYX_ERR(1, 10347, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __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;
 10348: 
+10349:     if x8:
  __pyx_t_12 = (__pyx_v_x8 != 0);
  if (__pyx_t_12) {
/* … */
  }
+10350:         s8 = scale(bpf_surface, (w8, h8))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_h8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_5);
    __pyx_t_2 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_bpf_surface, __pyx_t_13};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10350, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_bpf_surface, __pyx_t_13};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10350, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_v_bpf_surface);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_8, __pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_8, __pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_s8 = __pyx_t_3;
    __pyx_t_3 = 0;
+10351:         s8_array = numpy.array(s8.get_view('3'), dtype=numpy.uint8).transpose(1, 0, 2)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_s8, __pyx_n_s_get_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_13, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10351, __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(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_numpy); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_uint8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_s8_array = __pyx_t_5;
    __pyx_t_5 = 0;
+10352:         if smooth_ > 1:
    __pyx_t_12 = ((__pyx_v_smooth_ > 1) != 0);
    if (__pyx_t_12) {
/* … */
      goto __pyx_L38;
    }
+10353:             for r in range(smooth_):
      __pyx_t_8 = __pyx_v_smooth_;
      __pyx_t_7 = __pyx_t_8;
      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_7; __pyx_t_15+=1) {
        __pyx_v_r = __pyx_t_15;
+10354:                 s8_array = blur5x5_array24_c2(s8_array)
        __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s8_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10354, __pyx_L1_error)
        __pyx_t_17 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_t_16, NULL); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10354, __pyx_L1_error)
        __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
        __pyx_t_16.memview = NULL;
        __pyx_t_16.data = NULL;
        __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_17, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10354, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
        __pyx_t_17.memview = NULL;
        __pyx_t_17.data = NULL;
        __Pyx_DECREF_SET(__pyx_v_s8_array, __pyx_t_5);
        __pyx_t_5 = 0;
      }
 10355:         else:
+10356:             s8_array = blur5x5_array24_c2(s8_array)
    /*else*/ {
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s8_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10356, __pyx_L1_error)
      __pyx_t_17 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_t_16, NULL); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10356, __pyx_L1_error)
      __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
      __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_17, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10356, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
      __pyx_t_17.memview = NULL;
      __pyx_t_17.data = NULL;
      __Pyx_DECREF_SET(__pyx_v_s8_array, __pyx_t_5);
      __pyx_t_5 = 0;
    }
    __pyx_L38:;
+10357:         b8_blurred = frombuffer(s8_array, (w8, h8), 'RGB')
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_h8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_8 = 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_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_s8_array, __pyx_t_13, __pyx_n_s_RGB};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10357, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_s8_array, __pyx_t_13, __pyx_n_s_RGB};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10357, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_s8_array);
      __Pyx_GIVEREF(__pyx_v_s8_array);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_8, __pyx_v_s8_array);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_8, __pyx_t_13);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_8, __pyx_n_s_RGB);
      __pyx_t_13 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10357, __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_v_b8_blurred = __pyx_t_5;
    __pyx_t_5 = 0;
+10358:         s8 = smoothscale(b8_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10358, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10358, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10358, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10358, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_13);
    __pyx_t_2 = 0;
    __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_b8_blurred, __pyx_t_1};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10358, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_b8_blurred, __pyx_t_1};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10358, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10358, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b8_blurred);
      __Pyx_GIVEREF(__pyx_v_b8_blurred);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_8, __pyx_v_b8_blurred);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_8, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10358, __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_DECREF_SET(__pyx_v_s8, __pyx_t_5);
    __pyx_t_5 = 0;
+10359:         surface_cp.blit(s8, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_cp, __pyx_n_s_blit); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_s8);
    __Pyx_GIVEREF(__pyx_v_s8);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_s8);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_tuple__12);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_special_flags, __pyx_t_1) < 0) __PYX_ERR(1, 10359, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 10360: 
+10361:     if x16:
  __pyx_t_12 = (__pyx_v_x16 != 0);
  if (__pyx_t_12) {
/* … */
  }
+10362:         s16 = scale(bpf_surface, (w16, h16))
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10362, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w16); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10362, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_h16); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10362, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10362, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_bpf_surface, __pyx_t_13};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10362, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_bpf_surface, __pyx_t_13};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10362, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10362, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_v_bpf_surface);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_v_bpf_surface);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10362, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_s16 = __pyx_t_1;
    __pyx_t_1 = 0;
+10363:         s16_array = numpy.array(s16.get_view('3'), dtype=numpy.uint8).transpose(1, 0, 2)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_s16, __pyx_n_s_get_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_13, __pyx_kp_s_3) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_3);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10363, __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(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_numpy); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_uint8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10363, __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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_s16_array = __pyx_t_5;
    __pyx_t_5 = 0;
+10364:         if smooth_ > 1:
    __pyx_t_12 = ((__pyx_v_smooth_ > 1) != 0);
    if (__pyx_t_12) {
/* … */
      goto __pyx_L42;
    }
+10365:             for r in range(smooth_):
      __pyx_t_8 = __pyx_v_smooth_;
      __pyx_t_7 = __pyx_t_8;
      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_7; __pyx_t_15+=1) {
        __pyx_v_r = __pyx_t_15;
+10366:                 s16_array = blur5x5_array24_c2(s16_array)
        __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s16_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10366, __pyx_L1_error)
        __pyx_t_17 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_t_16, NULL); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10366, __pyx_L1_error)
        __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
        __pyx_t_16.memview = NULL;
        __pyx_t_16.data = NULL;
        __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_17, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10366, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
        __pyx_t_17.memview = NULL;
        __pyx_t_17.data = NULL;
        __Pyx_DECREF_SET(__pyx_v_s16_array, __pyx_t_5);
        __pyx_t_5 = 0;
      }
 10367:         else:
+10368:             s16_array = blur5x5_array24_c2(s16_array)
    /*else*/ {
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_v_s16_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 10368, __pyx_L1_error)
      __pyx_t_17 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_t_16, NULL); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10368, __pyx_L1_error)
      __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
      __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_17, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10368, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
      __pyx_t_17.memview = NULL;
      __pyx_t_17.data = NULL;
      __Pyx_DECREF_SET(__pyx_v_s16_array, __pyx_t_5);
      __pyx_t_5 = 0;
    }
    __pyx_L42:;
+10369:         b16_blurred = frombuffer(s16_array, (w16, h16), 'RGB')
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w16); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h16); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_s16_array, __pyx_t_13, __pyx_n_s_RGB};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10369, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_s16_array, __pyx_t_13, __pyx_n_s_RGB};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10369, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10369, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_s16_array);
      __Pyx_GIVEREF(__pyx_v_s16_array);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_v_s16_array);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_t_13);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_8, __pyx_n_s_RGB);
      __pyx_t_13 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10369, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_b16_blurred = __pyx_t_5;
    __pyx_t_5 = 0;
+10370:         s16 = smoothscale(b16_blurred, (w, h))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_smoothscale); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 10370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_13);
    __pyx_t_3 = 0;
    __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_b16_blurred, __pyx_t_2};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10370, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_b16_blurred, __pyx_t_2};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10370, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_INCREF(__pyx_v_b16_blurred);
      __Pyx_GIVEREF(__pyx_v_b16_blurred);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_8, __pyx_v_b16_blurred);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_8, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_s16, __pyx_t_5);
    __pyx_t_5 = 0;
+10371:         surface_cp.blit(s16, (0, 0), special_flags=BLEND_RGB_ADD)
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_cp, __pyx_n_s_blit); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_s16);
    __Pyx_GIVEREF(__pyx_v_s16);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s16);
    __Pyx_INCREF(__pyx_tuple__12);
    __Pyx_GIVEREF(__pyx_tuple__12);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_tuple__12);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_BLEND_RGB_ADD); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_special_flags, __pyx_t_2) < 0) __PYX_ERR(1, 10371, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __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;
 10372: 
+10373:     if mask_ is not None:
  __pyx_t_12 = (__pyx_v_mask_ != Py_None);
  __pyx_t_11 = (__pyx_t_12 != 0);
  if (__pyx_t_11) {
/* … */
  }
 10374:         # Multiply mask surface pixels with mask values.
 10375:         # RGB pixels = 0 when mask value = 0.0, otherwise
 10376:         # modify RGB amplitude
+10377:         surface_cp = filtering24_c(surface_cp, mask_)
    __pyx_t_2 = __pyx_f_12PygameShader_6shader_filtering24_c(__pyx_v_surface_cp, __pyx_v_mask_, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_surface_cp, __pyx_t_2);
    __pyx_t_2 = 0;
 10378: 
+10379:     return surface_cp
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_surface_cp);
  __pyx_r = __pyx_v_surface_cp;
  goto __pyx_L0;
 10380: 
 10381: 
 10382: @cython.binding(False)
 10383: @cython.binding(False)
 10384: @cython.boundscheck(False)
 10385: @cython.wraparound(False)
 10386: @cython.nonecheck(False)
 10387: @cython.cdivision(True)
 10388: @cython.profile(False)
+10389: cdef inline unsigned char [:, :, ::1] blur5x5_array24_c2(
static CYTHON_INLINE __Pyx_memviewslice __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__Pyx_memviewslice __pyx_v_rgb_array_, struct __pyx_opt_args_12PygameShader_6shader_blur5x5_array24_c2 *__pyx_optional_args) {
  int __pyx_v_w;
  int __pyx_v_h;
  CYTHON_UNUSED int __pyx_v_dim;
  CYTHON_UNUSED PyObject *__pyx_v_e = NULL;
  short __pyx_v_kernel_half;
  __Pyx_memviewslice __pyx_v_convolve = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_convolved = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED short __pyx_v_kernel_length;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_xx;
  int __pyx_v_yy;
  float __pyx_v_k;
  float __pyx_v_r;
  float __pyx_v_g;
  float __pyx_v_b;
  char __pyx_v_kernel_offset;
  unsigned char __pyx_v_red;
  unsigned char __pyx_v_green;
  unsigned char __pyx_v_blue;
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("blur5x5_array24_c2", 0);
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __pyx_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("PygameShader.shader.blur5x5_array24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_convolve, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_convolved, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_12PygameShader_6shader_blur5x5_array24_c2 {
  int __pyx_n;
  PyObject *mask;
};
 10390:         unsigned char [:, :, :] rgb_array_, mask=None):
 10391:     """
 10392:     # Gaussian kernel 5x5
 10393:         # |1   4   6   4  1|
 10394:         # |4  16  24  16  4|
 10395:         # |6  24  36  24  6|  x 1/256
 10396:         # |4  16  24  16  4|
 10397:         # |1  4    6   4  1|
 10398:     This method is using convolution property and process the image in two passes,
 10399:     first the horizontal convolution and last the vertical convolution
 10400:     pixels convoluted outside image edges will be set to adjacent edge value
 10401: 
 10402:     :param mask: default None
 10403:     :param rgb_array_: numpy.ndarray type (w, h, 3) uint8
 10404:     :return: Return 24-bit a numpy.ndarray type (w, h, 3) uint8
 10405:     """
 10406: 
 10407: 
 10408:     cdef int w, h, dim
+10409:     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_L8_try_end;
    __pyx_L3_error:;
    __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_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_L8_try_end:;
  }
+10410:         w, h, dim = (<object>rgb_array_).shape[: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(1, 10410, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10410, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_5, 0, 3, NULL, NULL, &__pyx_slice__41, 0, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10410, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
        PyObject* sequence = __pyx_t_4;
        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(1, 10410, __pyx_L3_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); 
        } else {
          __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_7 = PyList_GET_ITEM(sequence, 2); 
        }
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        #else
        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10410, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 10410, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10410, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_7);
        #endif
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10410, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
        index = 0; __pyx_t_5 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        index = 1; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L9_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_6);
        index = 2; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L9_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_7);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 3) < 0) __PYX_ERR(1, 10410, __pyx_L3_error)
        __pyx_t_9 = NULL;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L10_unpacking_done;
        __pyx_L9_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_9 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(1, 10410, __pyx_L3_error)
        __pyx_L10_unpacking_done:;
      }
      __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10410, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10410, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10410, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_v_w = __pyx_t_10;
      __pyx_v_h = __pyx_t_11;
      __pyx_v_dim = __pyx_t_12;
/* … */
  __pyx_slice__41 = PySlice_New(Py_None, __pyx_int_3, Py_None); if (unlikely(!__pyx_slice__41)) __PYX_ERR(1, 10410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__41);
  __Pyx_GIVEREF(__pyx_slice__41);
 10411: 
+10412:     except (ValueError, pygame.error) as e:
    __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_7, &__pyx_t_6);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pygame); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10412, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_error); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10412, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_12 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_builtin_ValueError) || __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_8);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_ErrRestore(__pyx_t_4, __pyx_t_7, __pyx_t_6);
    __pyx_t_4 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
    if (__pyx_t_12) {
      __Pyx_AddTraceback("PygameShader.shader.blur5x5_array24_c2", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_4) < 0) __PYX_ERR(1, 10412, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_e = __pyx_t_7;
+10413:         raise ValueError('\nArray shape not understood.')
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10413, __pyx_L5_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(1, 10413, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 10414: 
 10415:     cdef:
 10416:         # float [::1] kernel = kernel_
 10417:         # float[5] kernel = [1.0/16.0, 4.0/16.0, 6.0/16.0, 4.0/16.0, 1.0/16.0]
+10418:         short int kernel_half = 2
  __pyx_v_kernel_half = 2;
+10419:         unsigned char [:, :, ::1] convolve = numpy.empty((w, h, 3), dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_int_3);
  __pyx_t_4 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(1, 10419, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_convolve = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
+10420:         unsigned char [:, :, ::1] convolved = numpy.empty((w, h, 3), dtype=uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_int_3);
  __pyx_t_4 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(1, 10420, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_convolved = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
+10421:         short int kernel_length = <int>len(GAUSS_KERNEL)
  __pyx_t_4 = __Pyx_carray_to_py_float(__pyx_v_12PygameShader_6shader_GAUSS_KERNEL, 5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_14 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(1, 10421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_kernel_length = ((int)__pyx_t_14);
 10422:         int x, y, xx, yy
 10423:         float k, r, g, b, s
 10424:         char kernel_offset
 10425:         unsigned char red, green, blue
 10426: 
+10427:     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_L15;
        }
        __pyx_L15:;
      }
  }
 10428:         # horizontal convolution
+10429:         for y in prange(0, h, schedule='static', num_threads=THREADS):  # range [0..h-1)
        __pyx_t_12 = __pyx_v_h;
        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_16 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static)
/* … */
        __pyx_t_12 = __pyx_v_h;
        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_16 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_16 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) lastprivate(__pyx_v_x) lastprivate(__pyx_v_xx) firstprivate(__pyx_v_y) lastprivate(__pyx_v_y) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_16; __pyx_t_15++){
                        {
                            __pyx_v_y = (int)(0 + 1 * __pyx_t_15);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((float)__PYX_NAN());
                            __pyx_v_blue = ((unsigned char)'?');
                            __pyx_v_g = ((float)__PYX_NAN());
                            __pyx_v_green = ((unsigned char)'?');
                            __pyx_v_k = ((float)__PYX_NAN());
                            __pyx_v_kernel_offset = ((char)'?');
                            __pyx_v_r = ((float)__PYX_NAN());
                            __pyx_v_red = ((unsigned char)'?');
                            __pyx_v_x = ((int)0xbad0bad0);
                            __pyx_v_xx = ((int)0xbad0bad0);
 10430: 
+10431:             for x in range(0, w):  # range [0..w-1]
                            __pyx_t_11 = __pyx_v_w;
                            __pyx_t_10 = __pyx_t_11;
                            for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_10; __pyx_t_17+=1) {
                              __pyx_v_x = __pyx_t_17;
 10432: 
+10433:                 r, g, b = 0, 0, 0
                              __pyx_t_18 = 0.0;
                              __pyx_t_19 = 0.0;
                              __pyx_t_20 = 0.0;
                              __pyx_v_r = __pyx_t_18;
                              __pyx_v_g = __pyx_t_19;
                              __pyx_v_b = __pyx_t_20;
 10434: 
+10435:                 for kernel_offset in range(-kernel_half, kernel_half + 1):
                              __pyx_t_21 = (__pyx_v_kernel_half + 1);
                              __pyx_t_22 = __pyx_t_21;
                              for (__pyx_t_23 = (-__pyx_v_kernel_half); __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
                                __pyx_v_kernel_offset = __pyx_t_23;
 10436: 
+10437:                     k = GAUSS_KERNEL[kernel_offset + kernel_half]
                                __pyx_v_k = (__pyx_v_12PygameShader_6shader_GAUSS_KERNEL[(__pyx_v_kernel_offset + __pyx_v_kernel_half)]);
 10438: 
+10439:                     xx = x + kernel_offset
                                __pyx_v_xx = (__pyx_v_x + __pyx_v_kernel_offset);
 10440: 
 10441:                     # check boundaries.
 10442:                     # Fetch the edge pixel for the convolution
+10443:                     if xx < 0:
                                __pyx_t_24 = ((__pyx_v_xx < 0) != 0);
                                if (__pyx_t_24) {
/* … */
                                  goto __pyx_L24;
                                }
+10444:                         red, green, blue = rgb_array_[0, y, 0],\
                                  __pyx_t_25 = 0;
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_27 = 0;
                                  __pyx_t_28 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )));
+10445:                         rgb_array_[0, y, 1], rgb_array_[0, y, 2]
                                  __pyx_t_27 = 0;
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_25 = 1;
                                  __pyx_t_29 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[2]) )));
                                  __pyx_t_25 = 0;
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_27 = 2;
                                  __pyx_t_30 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )));
                                  __pyx_v_red = __pyx_t_28;
                                  __pyx_v_green = __pyx_t_29;
                                  __pyx_v_blue = __pyx_t_30;
+10446:                     elif xx > (w - 1):
                                __pyx_t_24 = ((__pyx_v_xx > (__pyx_v_w - 1)) != 0);
                                if (__pyx_t_24) {
/* … */
                                  goto __pyx_L24;
                                }
+10447:                         red, green, blue = rgb_array_[w-1, y, 0],\
                                  __pyx_t_27 = (__pyx_v_w - 1);
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_25 = 0;
                                  __pyx_t_30 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[2]) )));
+10448:                         rgb_array_[w-1, y, 1], rgb_array_[w-1, y, 2]
                                  __pyx_t_25 = (__pyx_v_w - 1);
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_27 = 1;
                                  __pyx_t_29 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )));
                                  __pyx_t_27 = (__pyx_v_w - 1);
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_25 = 2;
                                  __pyx_t_28 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[2]) )));
                                  __pyx_v_red = __pyx_t_30;
                                  __pyx_v_green = __pyx_t_29;
                                  __pyx_v_blue = __pyx_t_28;
 10449:                     else:
+10450:                         red, green, blue = rgb_array_[xx, y, 0],\
                                /*else*/ {
                                  __pyx_t_25 = __pyx_v_xx;
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_27 = 0;
                                  __pyx_t_28 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )));
+10451:                             rgb_array_[xx, y, 1], rgb_array_[xx, y, 2]
                                  __pyx_t_27 = __pyx_v_xx;
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_25 = 1;
                                  __pyx_t_29 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_27 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_25 * __pyx_v_rgb_array_.strides[2]) )));
                                  __pyx_t_25 = __pyx_v_xx;
                                  __pyx_t_26 = __pyx_v_y;
                                  __pyx_t_27 = 2;
                                  __pyx_t_30 = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array_.data + __pyx_t_25 * __pyx_v_rgb_array_.strides[0]) ) + __pyx_t_26 * __pyx_v_rgb_array_.strides[1]) ) + __pyx_t_27 * __pyx_v_rgb_array_.strides[2]) )));
                                  __pyx_v_red = __pyx_t_28;
                                  __pyx_v_green = __pyx_t_29;
                                  __pyx_v_blue = __pyx_t_30;
                                }
                                __pyx_L24:;
 10452: 
+10453:                     r = r + red * k
                                __pyx_v_r = (__pyx_v_r + (__pyx_v_red * __pyx_v_k));
+10454:                     g = g + green * k
                                __pyx_v_g = (__pyx_v_g + (__pyx_v_green * __pyx_v_k));
+10455:                     b = b + blue * k
                                __pyx_v_b = (__pyx_v_b + (__pyx_v_blue * __pyx_v_k));
                              }
 10456: 
+10457:                 convolve[x, y, 0], convolve[x, y, 1], convolve[x, y, 2] = <unsigned char>r,\
                              __pyx_t_30 = ((unsigned char)__pyx_v_r);
/* … */
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_26 = __pyx_v_y;
                              __pyx_t_25 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_25)) )) = __pyx_t_30;
                              __pyx_t_25 = __pyx_v_x;
                              __pyx_t_26 = __pyx_v_y;
                              __pyx_t_27 = 1;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_25 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_27)) )) = __pyx_t_29;
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_26 = __pyx_v_y;
                              __pyx_t_25 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_25)) )) = __pyx_t_28;
                            }
                        }
                    }
                }
            }
        }
        #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
+10458:                     <unsigned char>g, <unsigned char>b
                              __pyx_t_29 = ((unsigned char)__pyx_v_g);
                              __pyx_t_28 = ((unsigned char)__pyx_v_b);
 10459: 
 10460:         # Vertical convolution
+10461:         for x in prange(0,  w, schedule='static', num_threads=THREADS):
        __pyx_t_12 = __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_15 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_15 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static)
/* … */
        __pyx_t_12 = __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_15 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_15 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_blue) lastprivate(__pyx_v_g) lastprivate(__pyx_v_green) lastprivate(__pyx_v_k) lastprivate(__pyx_v_kernel_offset) lastprivate(__pyx_v_r) lastprivate(__pyx_v_red) firstprivate(__pyx_v_x) lastprivate(__pyx_v_x) lastprivate(__pyx_v_y) lastprivate(__pyx_v_yy) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16++){
                        {
                            __pyx_v_x = (int)(0 + 1 * __pyx_t_16);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((float)__PYX_NAN());
                            __pyx_v_blue = ((unsigned char)'?');
                            __pyx_v_g = ((float)__PYX_NAN());
                            __pyx_v_green = ((unsigned char)'?');
                            __pyx_v_k = ((float)__PYX_NAN());
                            __pyx_v_kernel_offset = ((char)'?');
                            __pyx_v_r = ((float)__PYX_NAN());
                            __pyx_v_red = ((unsigned char)'?');
                            __pyx_v_y = ((int)0xbad0bad0);
                            __pyx_v_yy = ((int)0xbad0bad0);
 10462: 
+10463:             for y in range(0, h):
                            __pyx_t_11 = __pyx_v_h;
                            __pyx_t_10 = __pyx_t_11;
                            for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_10; __pyx_t_17+=1) {
                              __pyx_v_y = __pyx_t_17;
+10464:                 r, g, b = 0, 0, 0
                              __pyx_t_20 = 0.0;
                              __pyx_t_19 = 0.0;
                              __pyx_t_18 = 0.0;
                              __pyx_v_r = __pyx_t_20;
                              __pyx_v_g = __pyx_t_19;
                              __pyx_v_b = __pyx_t_18;
 10465: 
+10466:                 for kernel_offset in range(-kernel_half, kernel_half + 1):
                              __pyx_t_21 = (__pyx_v_kernel_half + 1);
                              __pyx_t_22 = __pyx_t_21;
                              for (__pyx_t_23 = (-__pyx_v_kernel_half); __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
                                __pyx_v_kernel_offset = __pyx_t_23;
 10467: 
+10468:                     k = GAUSS_KERNEL[kernel_offset + kernel_half]
                                __pyx_v_k = (__pyx_v_12PygameShader_6shader_GAUSS_KERNEL[(__pyx_v_kernel_offset + __pyx_v_kernel_half)]);
+10469:                     yy = y + kernel_offset
                                __pyx_v_yy = (__pyx_v_y + __pyx_v_kernel_offset);
 10470: 
+10471:                     if yy < 0:
                                __pyx_t_24 = ((__pyx_v_yy < 0) != 0);
                                if (__pyx_t_24) {
/* … */
                                  goto __pyx_L35;
                                }
+10472:                         red, green, blue = convolve[x, 0, 0],\
                                  __pyx_t_25 = __pyx_v_x;
                                  __pyx_t_26 = 0;
                                  __pyx_t_27 = 0;
                                  __pyx_t_28 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_25 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_27)) )));
+10473:                         convolve[x, 0, 1], convolve[x, 0, 2]
                                  __pyx_t_27 = __pyx_v_x;
                                  __pyx_t_26 = 0;
                                  __pyx_t_25 = 1;
                                  __pyx_t_29 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_25)) )));
                                  __pyx_t_25 = __pyx_v_x;
                                  __pyx_t_26 = 0;
                                  __pyx_t_27 = 2;
                                  __pyx_t_30 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_25 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_27)) )));
                                  __pyx_v_red = __pyx_t_28;
                                  __pyx_v_green = __pyx_t_29;
                                  __pyx_v_blue = __pyx_t_30;
+10474:                     elif yy > (h -1):
                                __pyx_t_24 = ((__pyx_v_yy > (__pyx_v_h - 1)) != 0);
                                if (__pyx_t_24) {
/* … */
                                  goto __pyx_L35;
                                }
+10475:                         red, green, blue = convolve[x, h-1, 0],\
                                  __pyx_t_27 = __pyx_v_x;
                                  __pyx_t_26 = (__pyx_v_h - 1);
                                  __pyx_t_25 = 0;
                                  __pyx_t_30 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_25)) )));
+10476:                         convolve[x, h-1, 1], convolve[x, h-1, 2]
                                  __pyx_t_25 = __pyx_v_x;
                                  __pyx_t_26 = (__pyx_v_h - 1);
                                  __pyx_t_27 = 1;
                                  __pyx_t_29 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_25 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_27)) )));
                                  __pyx_t_27 = __pyx_v_x;
                                  __pyx_t_26 = (__pyx_v_h - 1);
                                  __pyx_t_25 = 2;
                                  __pyx_t_28 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_25)) )));
                                  __pyx_v_red = __pyx_t_30;
                                  __pyx_v_green = __pyx_t_29;
                                  __pyx_v_blue = __pyx_t_28;
 10477:                     else:
+10478:                         red, green, blue = convolve[x, yy, 0],\
                                /*else*/ {
                                  __pyx_t_25 = __pyx_v_x;
                                  __pyx_t_26 = __pyx_v_yy;
                                  __pyx_t_27 = 0;
                                  __pyx_t_28 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_25 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_27)) )));
+10479:                             convolve[x, yy, 1], convolve[x, yy, 2]
                                  __pyx_t_27 = __pyx_v_x;
                                  __pyx_t_26 = __pyx_v_yy;
                                  __pyx_t_25 = 1;
                                  __pyx_t_29 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_27 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_25)) )));
                                  __pyx_t_25 = __pyx_v_x;
                                  __pyx_t_26 = __pyx_v_yy;
                                  __pyx_t_27 = 2;
                                  __pyx_t_30 = (*((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolve.data + __pyx_t_25 * __pyx_v_convolve.strides[0]) ) + __pyx_t_26 * __pyx_v_convolve.strides[1]) )) + __pyx_t_27)) )));
                                  __pyx_v_red = __pyx_t_28;
                                  __pyx_v_green = __pyx_t_29;
                                  __pyx_v_blue = __pyx_t_30;
                                }
                                __pyx_L35:;
 10480: 
+10481:                     r = r + red * k
                                __pyx_v_r = (__pyx_v_r + (__pyx_v_red * __pyx_v_k));
+10482:                     g = g + green * k
                                __pyx_v_g = (__pyx_v_g + (__pyx_v_green * __pyx_v_k));
+10483:                     b = b + blue * k
                                __pyx_v_b = (__pyx_v_b + (__pyx_v_blue * __pyx_v_k));
                              }
 10484: 
+10485:                 convolved[x, y, 0], convolved[x, y, 1], convolved[x, y, 2] = \
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_26 = __pyx_v_y;
                              __pyx_t_25 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolved.data + __pyx_t_27 * __pyx_v_convolved.strides[0]) ) + __pyx_t_26 * __pyx_v_convolved.strides[1]) )) + __pyx_t_25)) )) = __pyx_t_30;
                              __pyx_t_25 = __pyx_v_x;
                              __pyx_t_26 = __pyx_v_y;
                              __pyx_t_27 = 1;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolved.data + __pyx_t_25 * __pyx_v_convolved.strides[0]) ) + __pyx_t_26 * __pyx_v_convolved.strides[1]) )) + __pyx_t_27)) )) = __pyx_t_29;
                              __pyx_t_27 = __pyx_v_x;
                              __pyx_t_26 = __pyx_v_y;
                              __pyx_t_25 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_convolved.data + __pyx_t_27 * __pyx_v_convolved.strides[0]) ) + __pyx_t_26 * __pyx_v_convolved.strides[1]) )) + __pyx_t_25)) )) = __pyx_t_28;
                            }
                        }
                    }
                }
            }
        }
        #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
      }
+10486:                     <unsigned char>r, <unsigned char>g, <unsigned char>b
                              __pyx_t_30 = ((unsigned char)__pyx_v_r);
                              __pyx_t_29 = ((unsigned char)__pyx_v_g);
                              __pyx_t_28 = ((unsigned char)__pyx_v_b);
 10487: 
+10488:     return convolved
  __PYX_INC_MEMVIEW(&__pyx_v_convolved, 0);
  __pyx_r = __pyx_v_convolved;
  goto __pyx_L0;
 10489: 
 10490: 
 10491: 
 10492: @cython.binding(False)
 10493: @cython.binding(False)
 10494: @cython.boundscheck(False)
 10495: @cython.wraparound(False)
 10496: @cython.nonecheck(False)
 10497: @cython.cdivision(True)
 10498: @cython.profile(False)
+10499: cpdef area24_cc(int x, int y, np.ndarray[np.uint8_t, ndim=3] background_rgb,
static PyObject *__pyx_pw_12PygameShader_6shader_195area24_cc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_area24_cc(int __pyx_v_x, int __pyx_v_y, PyArrayObject *__pyx_v_background_rgb, PyArrayObject *__pyx_v_mask_alpha, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_area24_cc *__pyx_optional_args) {
  float __pyx_v_intensity = ((float)1.0);
  __Pyx_memviewslice __pyx_v_color = __pyx_k__42;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_31, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_33, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("PygameShader.shader.area24_cc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
  __Pyx_XDECREF(__pyx_v_surface);
  __Pyx_XDECREF(__pyx_v_mask);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_195area24_cc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_194area24_cc[] = "\n    Create a realistic light effect on a pygame.Surface or texture.\n\n    You can blit the output surface with additive mode using pygame flag BLEND_RGBA_ADD.\n\n    Modes definition \n    ================\n    SMOOTH : Apply a Gaussian blur with kernel 5x5 over the output texture, the light effect will \n    be slightly blurred.\n    Timing : 5ms for a 400x400x3 texture against 0.4812155ms without it)\n\n    SATURATION : Create a saturation effect (increase of the texture lightness using HSL color conversion\n    algorithm. saturation threshold value should be included in range [-1.0, 1.0] default is 0.2 \n    Saturation above 0.5 will deteriorate the output coloration. Threshold value below zero will \n    greyscale output texture.\n    Timing :  37ms for a 400x400x3 texture against 0.4812155ms without it)\n\n    BLOOM: Create a bloom effect to the output texture.\n    see https://github.com/yoyoberenguer/BLOOM for more information about bloom algorithm. \n    Bloom effect is CPU demanding (25ms for a 400x400x3 texture against 0.4812155ms without it)\n\n    HEAT: Create a heat effect on the output itexture (using the alpha channel) \n\n    intensity: \n    Intensity is a float value defining how bright will be the light effect. \n    If intensity is zero, a new pygame.Surface is returned with RLEACCEL flag (empty surface)\n\n    EFFECTS ARE NON CUMULATIVE\n\n    Color allows you to change the light coloration, if omitted, the light color by default is \n    R = 128.0, G = 128.0 and B = 128.0 \n\n    :param x: integer, light x coordinates (must be in range [0..max screen.size x] \n    :param y: integer, light y coordinates (must be in range [0..max screen size y]\n    :param background_rgb: numpy.ndarray (w, h, 3) uint8. 3d array shape containing all RGB values\n    of the background surface (display background).\n    :param mask_alpha: numpy.ndarray (w, h) uint8, 2d array with light texture alpha values.\n    For better appearances, choose a texture with a radi""al mask shape (maximum light intensity in the center)  \n    :param color: numpy.array; Light color (RGB float), default \n    array([128.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0], float32, copy=False)\n    :param intensity: float; Light intensity range [0.0 ... 20.0]   \n    :param bloom: boolean; Bloom effect, default False\n    :param bloom_threshold:unsigned char;\n    :param sat_value: float; Set the saturation value \n    :param saturation: boolean; Saturation effect\n    :param smooth: boolean; Blur effect\n    :param frequency: float; frequency must be incremental\n    :param heat: boolean; Allow heat wave effect \n    :return: Return a pygame surface 24 bit without per-pixel information,\n    surface with same size as the light texture. Represent the lit surface.\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_195area24_cc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_x;
  int __pyx_v_y;
  PyArrayObject *__pyx_v_background_rgb = 0;
  PyArrayObject *__pyx_v_mask_alpha = 0;
  float __pyx_v_intensity;
  __Pyx_memviewslice __pyx_v_color = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_smooth;
  int __pyx_v_saturation;
  float __pyx_v_sat_value;
  int __pyx_v_bloom;
  unsigned char __pyx_v_bloom_threshold;
  int __pyx_v_heat;
  float __pyx_v_frequency;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("area24_cc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_background_rgb,&__pyx_n_s_mask_alpha,&__pyx_n_s_intensity,&__pyx_n_s_color_2,&__pyx_n_s_smooth_2,&__pyx_n_s_saturation_2,&__pyx_n_s_sat_value,&__pyx_n_s_bloom_2,&__pyx_n_s_bloom_threshold,&__pyx_n_s_heat,&__pyx_n_s_frequency_2,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,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 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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_x)) != 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_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("area24_cc", 0, 4, 13, 1); __PYX_ERR(1, 10499, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_background_rgb)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("area24_cc", 0, 4, 13, 2); __PYX_ERR(1, 10499, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mask_alpha)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("area24_cc", 0, 4, 13, 3); __PYX_ERR(1, 10499, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intensity);
          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_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_smooth_2);
          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_saturation_2);
          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_sat_value);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bloom_2);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bloom_threshold);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_heat);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frequency_2);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "area24_cc") < 0)) __PYX_ERR(1, 10499, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        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);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 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_x = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_x == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10499, __pyx_L3_error)
    __pyx_v_y = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_y == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10499, __pyx_L3_error)
    __pyx_v_background_rgb = ((PyArrayObject *)values[2]);
    __pyx_v_mask_alpha = ((PyArrayObject *)values[3]);
    if (values[4]) {
      __pyx_v_intensity = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_intensity == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 10500, __pyx_L3_error)
    } else {
      __pyx_v_intensity = ((float)1.0);
    }
    if (values[5]) {
      __pyx_v_color = __Pyx_PyObject_to_MemoryviewSlice_dc_float(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_color.memview)) __PYX_ERR(1, 10501, __pyx_L3_error)
    } else {
      __pyx_v_color = __pyx_k__42;
      __PYX_INC_MEMVIEW(&__pyx_v_color, 1);
    }
    if (values[6]) {
      __pyx_v_smooth = __Pyx_PyObject_IsTrue(values[6]); if (unlikely((__pyx_v_smooth == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10502, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_194area24_cc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_x, int __pyx_v_y, PyArrayObject *__pyx_v_background_rgb, PyArrayObject *__pyx_v_mask_alpha, float __pyx_v_intensity, __Pyx_memviewslice __pyx_v_color, int __pyx_v_smooth, int __pyx_v_saturation, float __pyx_v_sat_value, int __pyx_v_bloom, unsigned char __pyx_v_bloom_threshold, int __pyx_v_heat, float __pyx_v_frequency) {
  __Pyx_LocalBuf_ND __pyx_pybuffernd_background_rgb;
  __Pyx_Buffer __pyx_pybuffer_background_rgb;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_mask_alpha;
  __Pyx_Buffer __pyx_pybuffer_mask_alpha;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("area24_cc", 0);
  __pyx_pybuffer_background_rgb.pybuffer.buf = NULL;
  __pyx_pybuffer_background_rgb.refcount = 0;
  __pyx_pybuffernd_background_rgb.data = NULL;
  __pyx_pybuffernd_background_rgb.rcbuffer = &__pyx_pybuffer_background_rgb;
  __pyx_pybuffer_mask_alpha.pybuffer.buf = NULL;
  __pyx_pybuffer_mask_alpha.refcount = 0;
  __pyx_pybuffernd_mask_alpha.data = NULL;
  __pyx_pybuffernd_mask_alpha.rcbuffer = &__pyx_pybuffer_mask_alpha;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer, (PyObject*)__pyx_v_background_rgb, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(1, 10499, __pyx_L1_error)
  }
  __pyx_pybuffernd_background_rgb.diminfo[0].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_background_rgb.diminfo[0].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_background_rgb.diminfo[1].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_background_rgb.diminfo[1].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_background_rgb.diminfo[2].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_background_rgb.diminfo[2].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask_alpha, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(1, 10499, __pyx_L1_error)
  }
  __pyx_pybuffernd_mask_alpha.diminfo[0].strides = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask_alpha.diminfo[0].shape = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask_alpha.diminfo[1].strides = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask_alpha.diminfo[1].shape = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.shape[1];
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_color.memview)) { __Pyx_RaiseUnboundLocalError("color"); __PYX_ERR(1, 10499, __pyx_L1_error) }
  __pyx_t_2.__pyx_n = 9;
  __pyx_t_2.intensity = __pyx_v_intensity;
  __pyx_t_2.color = __pyx_v_color;
  __pyx_t_2.smooth = __pyx_v_smooth;
  __pyx_t_2.saturation = __pyx_v_saturation;
  __pyx_t_2.sat_value = __pyx_v_sat_value;
  __pyx_t_2.bloom = __pyx_v_bloom;
  __pyx_t_2.bloom_threshold = __pyx_v_bloom_threshold;
  __pyx_t_2.heat = __pyx_v_heat;
  __pyx_t_2.frequency = __pyx_v_frequency;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_area24_cc(__pyx_v_x, __pyx_v_y, ((PyArrayObject *)__pyx_v_background_rgb), ((PyArrayObject *)__pyx_v_mask_alpha), 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10499, __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);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("PygameShader.shader.area24_cc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_color, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10500:               np.ndarray[np.uint8_t, ndim=2] mask_alpha, float intensity=1.0,
+10501:               float [::1] color=numpy.array([128.0, 128.0, 128.0], dtype=numpy.float32, copy=False),
  __Pyx_GetModuleGlobalName(__pyx_t_31, __pyx_n_s_numpy); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_31, __pyx_n_s_array_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  __pyx_t_31 = PyList_New(3); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_31, 0, __pyx_float_128_0);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_31, 1, __pyx_float_128_0);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_31, 2, __pyx_float_128_0);
  __pyx_t_28 = PyTuple_New(1); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_GIVEREF(__pyx_t_31);
  PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_31);
  __pyx_t_31 = 0;
  __pyx_t_31 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_n_s_numpy); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __pyx_t_29 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_n_s_float32); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  if (PyDict_SetItem(__pyx_t_31, __pyx_n_s_dtype, __pyx_t_29) < 0) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  if (PyDict_SetItem(__pyx_t_31, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 10501, __pyx_L1_error)
  __pyx_t_29 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_28, __pyx_t_31); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  __pyx_t_49 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_29, PyBUF_WRITABLE); if (unlikely(!__pyx_t_49.memview)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  __pyx_k__42 = __pyx_t_49;
  __pyx_t_49.memview = NULL;
  __pyx_t_49.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_29, __pyx_n_s_numpy); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
/* … */
  __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_29, __pyx_n_s_array_2); if (unlikely(!__pyx_t_31)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  __pyx_t_29 = PyList_New(3); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_29, 0, __pyx_float_128_0);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_29, 1, __pyx_float_128_0);
  __Pyx_INCREF(__pyx_float_128_0);
  __Pyx_GIVEREF(__pyx_float_128_0);
  PyList_SET_ITEM(__pyx_t_29, 2, __pyx_float_128_0);
  __pyx_t_28 = PyTuple_New(1); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_GIVEREF(__pyx_t_29);
  PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_29);
  __pyx_t_29 = 0;
  __pyx_t_29 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_29, __pyx_n_s_dtype, __pyx_t_30) < 0) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  if (PyDict_SetItem(__pyx_t_29, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(1, 10501, __pyx_L1_error)
  __pyx_t_30 = __Pyx_PyObject_Call(__pyx_t_31, __pyx_t_28, __pyx_t_29); if (unlikely(!__pyx_t_30)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
  __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  __pyx_t_49 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_30, PyBUF_WRITABLE); if (unlikely(!__pyx_t_49.memview)) __PYX_ERR(1, 10501, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  __pyx_k__42 = __pyx_t_49;
  __pyx_t_49.memview = NULL;
  __pyx_t_49.data = NULL;
+10502:               bint smooth=False, bint saturation=False, float sat_value=0.2, bint bloom=False,
  int __pyx_v_smooth = ((int)0);
  int __pyx_v_saturation = ((int)0);
  float __pyx_v_sat_value = ((float)0.2);
  int __pyx_v_bloom = ((int)0);
  unsigned char __pyx_v_bloom_threshold = ((unsigned char)0x80);
/* … */
      __pyx_v_smooth = ((int)0);
    }
    if (values[7]) {
      __pyx_v_saturation = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_saturation == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10502, __pyx_L3_error)
    } else {
      __pyx_v_saturation = ((int)0);
    }
    if (values[8]) {
      __pyx_v_sat_value = __pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_sat_value == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 10502, __pyx_L3_error)
    } else {
      __pyx_v_sat_value = ((float)0.2);
    }
    if (values[9]) {
      __pyx_v_bloom = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_bloom == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10502, __pyx_L3_error)
    } else {
      __pyx_v_bloom = ((int)0);
    }
    if (values[10]) {
      __pyx_v_bloom_threshold = __Pyx_PyInt_As_unsigned_char(values[10]); if (unlikely((__pyx_v_bloom_threshold == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 10503, __pyx_L3_error)
    } else {
      __pyx_v_bloom_threshold = ((unsigned char)0x80);
    }
    if (values[11]) {
      __pyx_v_heat = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_heat == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10503, __pyx_L3_error)
    } else {
+10503:               unsigned char bloom_threshold=128, bint heat=False, float frequency=1):
  int __pyx_v_heat = ((int)0);
  float __pyx_v_frequency = ((float)1.0);
  int __pyx_v_w;
  int __pyx_v_h;
  int __pyx_v_lx;
  int __pyx_v_ly;
  int __pyx_v_ax;
  int __pyx_v_ay;
  CYTHON_UNUSED PyObject *__pyx_v_e = NULL;
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_f;
  int __pyx_v_w_low;
  int __pyx_v_w_high;
  int __pyx_v_h_low;
  int __pyx_v_h_high;
  int __pyx_v_x1;
  int __pyx_v_x2;
  int __pyx_v_y1;
  int __pyx_v_y2;
  __Pyx_memviewslice __pyx_v_rgb = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  float __pyx_v_c1;
  float __pyx_v_red;
  float __pyx_v_green;
  float __pyx_v_blue;
  float __pyx_v_r;
  float __pyx_v_g;
  float __pyx_v_b;
  PyObject *__pyx_v_surface = NULL;
  PyObject *__pyx_v_mask = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_background_rgb;
  __Pyx_Buffer __pyx_pybuffer_background_rgb;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_mask_alpha;
  __Pyx_Buffer __pyx_pybuffer_mask_alpha;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("area24_cc", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_intensity = __pyx_optional_args->intensity;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_color = __pyx_optional_args->color;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_smooth = __pyx_optional_args->smooth;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_saturation = __pyx_optional_args->saturation;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_sat_value = __pyx_optional_args->sat_value;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_bloom = __pyx_optional_args->bloom;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_bloom_threshold = __pyx_optional_args->bloom_threshold;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_heat = __pyx_optional_args->heat;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_frequency = __pyx_optional_args->frequency;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  __pyx_pybuffer_background_rgb.pybuffer.buf = NULL;
  __pyx_pybuffer_background_rgb.refcount = 0;
  __pyx_pybuffernd_background_rgb.data = NULL;
  __pyx_pybuffernd_background_rgb.rcbuffer = &__pyx_pybuffer_background_rgb;
  __pyx_pybuffer_mask_alpha.pybuffer.buf = NULL;
  __pyx_pybuffer_mask_alpha.refcount = 0;
  __pyx_pybuffernd_mask_alpha.data = NULL;
  __pyx_pybuffernd_mask_alpha.rcbuffer = &__pyx_pybuffer_mask_alpha;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_background_rgb.rcbuffer->pybuffer, (PyObject*)__pyx_v_background_rgb, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(1, 10499, __pyx_L1_error)
  }
  __pyx_pybuffernd_background_rgb.diminfo[0].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_background_rgb.diminfo[0].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_background_rgb.diminfo[1].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_background_rgb.diminfo[1].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_background_rgb.diminfo[2].strides = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_background_rgb.diminfo[2].shape = __pyx_pybuffernd_background_rgb.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask_alpha, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(1, 10499, __pyx_L1_error)
  }
  __pyx_pybuffernd_mask_alpha.diminfo[0].strides = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask_alpha.diminfo[0].shape = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask_alpha.diminfo[1].strides = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask_alpha.diminfo[1].shape = __pyx_pybuffernd_mask_alpha.rcbuffer->pybuffer.shape[1];
/* … */
      __pyx_v_heat = ((int)0);
    }
    if (values[12]) {
      __pyx_v_frequency = __pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_frequency == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 10503, __pyx_L3_error)
    } else {
      __pyx_v_frequency = ((float)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("area24_cc", 0, 4, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 10499, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.area24_cc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_background_rgb), __pyx_ptype_5numpy_ndarray, 1, "background_rgb", 0))) __PYX_ERR(1, 10499, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mask_alpha), __pyx_ptype_5numpy_ndarray, 1, "mask_alpha", 0))) __PYX_ERR(1, 10500, __pyx_L1_error)
  __pyx_r = __pyx_pf_12PygameShader_6shader_194area24_cc(__pyx_self, __pyx_v_x, __pyx_v_y, __pyx_v_background_rgb, __pyx_v_mask_alpha, __pyx_v_intensity, __pyx_v_color, __pyx_v_smooth, __pyx_v_saturation, __pyx_v_sat_value, __pyx_v_bloom, __pyx_v_bloom_threshold, __pyx_v_heat, __pyx_v_frequency);
 10504:     """
 10505:     Create a realistic light effect on a pygame.Surface or texture.
 10506: 
 10507:     You can blit the output surface with additive mode using pygame flag BLEND_RGBA_ADD.
 10508: 
 10509:     Modes definition
 10510:     ================
 10511:     SMOOTH : Apply a Gaussian blur with kernel 5x5 over the output texture, the light effect will
 10512:     be slightly blurred.
 10513:     Timing : 5ms for a 400x400x3 texture against 0.4812155ms without it)
 10514: 
 10515:     SATURATION : Create a saturation effect (increase of the texture lightness using HSL color conversion
 10516:     algorithm. saturation threshold value should be included in range [-1.0, 1.0] default is 0.2
 10517:     Saturation above 0.5 will deteriorate the output coloration. Threshold value below zero will
 10518:     greyscale output texture.
 10519:     Timing :  37ms for a 400x400x3 texture against 0.4812155ms without it)
 10520: 
 10521:     BLOOM: Create a bloom effect to the output texture.
 10522:     see https://github.com/yoyoberenguer/BLOOM for more information about bloom algorithm.
 10523:     Bloom effect is CPU demanding (25ms for a 400x400x3 texture against 0.4812155ms without it)
 10524: 
 10525:     HEAT: Create a heat effect on the output itexture (using the alpha channel)
 10526: 
 10527:     intensity:
 10528:     Intensity is a float value defining how bright will be the light effect.
 10529:     If intensity is zero, a new pygame.Surface is returned with RLEACCEL flag (empty surface)
 10530: 
 10531:     EFFECTS ARE NON CUMULATIVE
 10532: 
 10533:     Color allows you to change the light coloration, if omitted, the light color by default is
 10534:     R = 128.0, G = 128.0 and B = 128.0
 10535: 
 10536:     :param x: integer, light x coordinates (must be in range [0..max screen.size x]
 10537:     :param y: integer, light y coordinates (must be in range [0..max screen size y]
 10538:     :param background_rgb: numpy.ndarray (w, h, 3) uint8. 3d array shape containing all RGB values
 10539:     of the background surface (display background).
 10540:     :param mask_alpha: numpy.ndarray (w, h) uint8, 2d array with light texture alpha values.
 10541:     For better appearances, choose a texture with a radial mask shape (maximum light intensity in the center)
 10542:     :param color: numpy.array; Light color (RGB float), default
 10543:     array([128.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0], float32, copy=False)
 10544:     :param intensity: float; Light intensity range [0.0 ... 20.0]
 10545:     :param bloom: boolean; Bloom effect, default False
 10546:     :param bloom_threshold:unsigned char;
 10547:     :param sat_value: float; Set the saturation value
 10548:     :param saturation: boolean; Saturation effect
 10549:     :param smooth: boolean; Blur effect
 10550:     :param frequency: float; frequency must be incremental
 10551:     :param heat: boolean; Allow heat wave effect
 10552:     :return: Return a pygame surface 24 bit without per-pixel information,
 10553:     surface with same size as the light texture. Represent the lit surface.
 10554:     """
 10555: 
+10556:     assert intensity > <float>0.0, '\nIntensity value cannot be < 0.0'
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_intensity > ((float)0.0)) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Intensity_value_cannot_be_0_0_2);
      __PYX_ERR(1, 10556, __pyx_L1_error)
    }
  }
  #endif
 10557: 
 10558: 
 10559:     cdef int w, h, lx, ly, ax, ay
+10560:     try:
  {
    /*try:*/ {
/* … */
    }
  }
+10561:         w, h = background_rgb.shape[:2]
      __pyx_t_4 = __pyx_v_background_rgb->dimensions;
      __pyx_t_5 = (__pyx_t_4[0]);
      __pyx_t_6 = (__pyx_t_4[1]);
      __pyx_v_w = __pyx_t_5;
      __pyx_v_h = __pyx_t_6;
 10562:     except (ValueError, pygame.error) as e:
 10563:         raise ValueError('\nArray shape not understood.')
 10564: 
+10565:     try:
  {
    /*try:*/ {
/* … */
    }
  }
+10566:         ax, ay = mask_alpha.shape[:2]
      __pyx_t_4 = __pyx_v_mask_alpha->dimensions;
      __pyx_t_6 = (__pyx_t_4[0]);
      __pyx_t_5 = (__pyx_t_4[1]);
      __pyx_v_ax = __pyx_t_6;
      __pyx_v_ay = __pyx_t_5;
 10567:     except (ValueError, pygame.error) as e:
 10568:         raise ValueError('\nArray shape not understood.')
 10569: 
 10570:     # return an empty Surface when intensity = 0.0
+10571:     if intensity == <float>0.0:
  __pyx_t_7 = ((__pyx_v_intensity == ((float)0.0)) != 0);
  if (__pyx_t_7) {
/* … */
  }
+10572:         return Surface((ax, ay), SRCALPHA), ax, ay
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Surface); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 10572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_11);
    __pyx_t_10 = 0;
    __pyx_t_11 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_13 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_12, __pyx_t_11};
      __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10572, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_12, __pyx_t_11};
      __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10572, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10572, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_13, __pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_13, __pyx_t_11);
      __pyx_t_12 = 0;
      __pyx_t_11 = 0;
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10572, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_14);
    __pyx_t_8 = 0;
    __pyx_t_9 = 0;
    __pyx_t_14 = 0;
    __pyx_r = __pyx_t_11;
    __pyx_t_11 = 0;
    goto __pyx_L0;
 10573: 
 10574: 
+10575:     lx = ax >> 1
  __pyx_v_lx = (__pyx_v_ax >> 1);
+10576:     ly = ay >> 1
  __pyx_v_ly = (__pyx_v_ay >> 1);
 10577: 
 10578:     cdef:
+10579:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 10580:         float f
+10581:         int w_low = lx
  __pyx_v_w_low = __pyx_v_lx;
+10582:         int w_high = lx
  __pyx_v_w_high = __pyx_v_lx;
+10583:         int h_low = ly
  __pyx_v_h_low = __pyx_v_ly;
+10584:         int h_high = ly
  __pyx_v_h_high = __pyx_v_ly;
 10585:         int x1, x2, y1, y2
 10586: 
+10587:     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_L18;
        }
        __pyx_L18:;
      }
  }
+10588:         if x < lx:
        __pyx_t_7 = ((__pyx_v_x < __pyx_v_lx) != 0);
        if (__pyx_t_7) {
/* … */
          goto __pyx_L19;
        }
+10589:             w_low = x
          __pyx_v_w_low = __pyx_v_x;
+10590:         elif x > w - lx:
        __pyx_t_7 = ((__pyx_v_x > (__pyx_v_w - __pyx_v_lx)) != 0);
        if (__pyx_t_7) {
/* … */
        }
        __pyx_L19:;
+10591:             w_high = w - x
          __pyx_v_w_high = (__pyx_v_w - __pyx_v_x);
 10592: 
+10593:         if y < ly:
        __pyx_t_7 = ((__pyx_v_y < __pyx_v_ly) != 0);
        if (__pyx_t_7) {
/* … */
          goto __pyx_L20;
        }
+10594:             h_low = y
          __pyx_v_h_low = __pyx_v_y;
+10595:         elif y >  h - ly:
        __pyx_t_7 = ((__pyx_v_y > (__pyx_v_h - __pyx_v_ly)) != 0);
        if (__pyx_t_7) {
/* … */
        }
        __pyx_L20:;
+10596:             h_high = h - y
          __pyx_v_h_high = (__pyx_v_h - __pyx_v_y);
 10597: 
+10598:         x1 = x - w_low
        __pyx_v_x1 = (__pyx_v_x - __pyx_v_w_low);
+10599:         x2 = x + w_high
        __pyx_v_x2 = (__pyx_v_x + __pyx_v_w_high);
+10600:         y1 = y - h_low
        __pyx_v_y1 = (__pyx_v_y - __pyx_v_h_low);
+10601:         y2 = y + h_high
        __pyx_v_y2 = (__pyx_v_y + __pyx_v_h_high);
+10602:         x1 = max(x1, <unsigned short int>0)
        __pyx_t_15 = ((unsigned short)0);
        __pyx_t_13 = __pyx_v_x1;
        if (((__pyx_t_15 > __pyx_t_13) != 0)) {
          __pyx_t_16 = __pyx_t_15;
        } else {
          __pyx_t_16 = __pyx_t_13;
        }
        __pyx_v_x1 = __pyx_t_16;
+10603:         x1 = min(x1, w)
        __pyx_t_16 = __pyx_v_w;
        __pyx_t_13 = __pyx_v_x1;
        if (((__pyx_t_16 < __pyx_t_13) != 0)) {
          __pyx_t_17 = __pyx_t_16;
        } else {
          __pyx_t_17 = __pyx_t_13;
        }
        __pyx_v_x1 = __pyx_t_17;
+10604:         x2 = max(x2, <unsigned short int>0)
        __pyx_t_15 = ((unsigned short)0);
        __pyx_t_17 = __pyx_v_x2;
        if (((__pyx_t_15 > __pyx_t_17) != 0)) {
          __pyx_t_16 = __pyx_t_15;
        } else {
          __pyx_t_16 = __pyx_t_17;
        }
        __pyx_v_x2 = __pyx_t_16;
+10605:         x2 = min(x2, w)
        __pyx_t_16 = __pyx_v_w;
        __pyx_t_17 = __pyx_v_x2;
        if (((__pyx_t_16 < __pyx_t_17) != 0)) {
          __pyx_t_13 = __pyx_t_16;
        } else {
          __pyx_t_13 = __pyx_t_17;
        }
        __pyx_v_x2 = __pyx_t_13;
+10606:         y1 = max(y1, <unsigned short int>0)
        __pyx_t_15 = ((unsigned short)0);
        __pyx_t_13 = __pyx_v_y1;
        if (((__pyx_t_15 > __pyx_t_13) != 0)) {
          __pyx_t_16 = __pyx_t_15;
        } else {
          __pyx_t_16 = __pyx_t_13;
        }
        __pyx_v_y1 = __pyx_t_16;
+10607:         y1 = min(y1, h)
        __pyx_t_16 = __pyx_v_h;
        __pyx_t_13 = __pyx_v_y1;
        if (((__pyx_t_16 < __pyx_t_13) != 0)) {
          __pyx_t_17 = __pyx_t_16;
        } else {
          __pyx_t_17 = __pyx_t_13;
        }
        __pyx_v_y1 = __pyx_t_17;
+10608:         y2 = max(y2, <unsigned short int>0)
        __pyx_t_15 = ((unsigned short)0);
        __pyx_t_17 = __pyx_v_y2;
        if (((__pyx_t_15 > __pyx_t_17) != 0)) {
          __pyx_t_16 = __pyx_t_15;
        } else {
          __pyx_t_16 = __pyx_t_17;
        }
        __pyx_v_y2 = __pyx_t_16;
+10609:         y2 = min(y2, h)
        __pyx_t_16 = __pyx_v_h;
        __pyx_t_17 = __pyx_v_y2;
        if (((__pyx_t_16 < __pyx_t_17) != 0)) {
          __pyx_t_13 = __pyx_t_16;
        } else {
          __pyx_t_13 = __pyx_t_17;
        }
        __pyx_v_y2 = __pyx_t_13;
      }
 10610: 
 10611:     # RGB block and ALPHA
 10612:     cdef:
+10613:         unsigned char [:, : , :] rgb = background_rgb[x1:x2, y1:y2, :]
  __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_x1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_x2); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_9 = PySlice_New(__pyx_t_11, __pyx_t_14, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_y1); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_y2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_8 = PySlice_New(__pyx_t_14, __pyx_t_11, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_8);
  __Pyx_INCREF(__pyx_slice__38);
  __Pyx_GIVEREF(__pyx_slice__38);
  PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_slice__38);
  __pyx_t_9 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_background_rgb), __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(1, 10613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_rgb = __pyx_t_18;
  __pyx_t_18.memview = NULL;
  __pyx_t_18.data = NULL;
+10614:         unsigned char [:, :] alpha = mask_alpha[lx - w_low:lx + w_high, ly - h_low:ly + h_high]
  __pyx_t_8 = __Pyx_PyInt_From_int((__pyx_v_lx - __pyx_v_w_low)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_11 = __Pyx_PyInt_From_int((__pyx_v_lx + __pyx_v_w_high)); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_9 = PySlice_New(__pyx_t_8, __pyx_t_11, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyInt_From_int((__pyx_v_ly - __pyx_v_h_low)); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_8 = __Pyx_PyInt_From_int((__pyx_v_ly + __pyx_v_h_high)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = PySlice_New(__pyx_t_11, __pyx_t_8, Py_None); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_14);
  __pyx_t_9 = 0;
  __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_mask_alpha), __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_char(__pyx_t_14, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(1, 10614, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_alpha = __pyx_t_19;
  __pyx_t_19.memview = NULL;
  __pyx_t_19.data = NULL;
 10615: 
 10616:     # RGB ARRAY IS TRANSPOSED IN THE LOOP
+10617:     ax, ay = rgb.shape[:2]
  __pyx_t_20 = __pyx_v_rgb.shape;
  __pyx_t_21 = (__pyx_t_20[0]);
  __pyx_t_22 = (__pyx_t_20[1]);
  __pyx_v_ax = __pyx_t_21;
  __pyx_v_ay = __pyx_t_22;
 10618:     cdef:
+10619:         unsigned char [:, :, :] new_array = empty((ay, ax, 3),  numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 10619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_11);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_int_3);
  __pyx_t_9 = 0;
  __pyx_t_11 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_numpy); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_uint8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_12, __pyx_t_9};
    __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10619, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_12, __pyx_t_9};
    __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10619, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10619, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_11) {
      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); __pyx_t_11 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_13, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_13, __pyx_t_9);
    __pyx_t_12 = 0;
    __pyx_t_9 = 0;
    __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10619, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_14, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(1, 10619, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_new_array = __pyx_t_18;
  __pyx_t_18.memview = NULL;
  __pyx_t_18.data = NULL;
+10620:         float c1 = <float>ONE_255 * intensity
  __pyx_v_c1 = (((float)0.00392156862745098) * __pyx_v_intensity);
+10621:         float red   = color[0]
  __pyx_t_23 = 0;
  __pyx_v_red = (*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_color.data) + __pyx_t_23)) )));
+10622:         float green = color[1]
  __pyx_t_23 = 1;
  __pyx_v_green = (*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_color.data) + __pyx_t_23)) )));
+10623:         float blue  = color[2]
  __pyx_t_23 = 2;
  __pyx_v_blue = (*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_color.data) + __pyx_t_23)) )));
 10624:         float r, g, b
 10625: 
 10626:     # NOTE the array is transpose
+10627:     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_L23;
        }
        __pyx_L23:;
      }
  }
+10628:         for i in prange(ax, schedule='static', num_threads=THREADS):
        __pyx_t_13 = __pyx_v_ax;
        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_17 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_f) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static)
/* … */
        __pyx_t_13 = __pyx_v_ax;
        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_17 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_b) lastprivate(__pyx_v_f) lastprivate(__pyx_v_g) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_r) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_17; __pyx_t_16++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_16);
                            /* Initialize private variables to invalid values */
                            __pyx_v_b = ((float)__PYX_NAN());
                            __pyx_v_f = ((float)__PYX_NAN());
                            __pyx_v_g = ((float)__PYX_NAN());
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_r = ((float)__PYX_NAN());
+10629:             for j in range(ay):
                            __pyx_t_24 = __pyx_v_ay;
                            __pyx_t_25 = __pyx_t_24;
                            for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                              __pyx_v_j = __pyx_t_26;
+10630:                 f = alpha[i, j] * c1
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_27 = __pyx_v_j;
                              __pyx_v_f = ((*((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_23 * __pyx_v_alpha.strides[0]) ) + __pyx_t_27 * __pyx_v_alpha.strides[1]) ))) * __pyx_v_c1);
+10631:                 r = rgb[i, j, <unsigned short int>0] * f * red
                              __pyx_t_27 = __pyx_v_i;
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_28 = ((unsigned short)0);
                              __pyx_v_r = (((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_27 * __pyx_v_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb.strides[1]) ) + __pyx_t_28 * __pyx_v_rgb.strides[2]) ))) * __pyx_v_f) * __pyx_v_red);
+10632:                 g = rgb[i, j, <unsigned short int>1] * f * green
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_27 = __pyx_v_j;
                              __pyx_t_28 = ((unsigned short)1);
                              __pyx_v_g = (((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_23 * __pyx_v_rgb.strides[0]) ) + __pyx_t_27 * __pyx_v_rgb.strides[1]) ) + __pyx_t_28 * __pyx_v_rgb.strides[2]) ))) * __pyx_v_f) * __pyx_v_green);
+10633:                 b = rgb[i, j, <unsigned short int>2] * f * blue
                              __pyx_t_27 = __pyx_v_i;
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_28 = ((unsigned short)2);
                              __pyx_v_b = (((*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb.data + __pyx_t_27 * __pyx_v_rgb.strides[0]) ) + __pyx_t_23 * __pyx_v_rgb.strides[1]) ) + __pyx_t_28 * __pyx_v_rgb.strides[2]) ))) * __pyx_v_f) * __pyx_v_blue);
+10634:                 new_array[j, i, <unsigned short int>0] = <unsigned char>(r if r <255 else <unsigned char>255)
                              if (((__pyx_v_r < 255.0) != 0)) {
                                __pyx_t_29 = __pyx_v_r;
                              } else {
                                __pyx_t_29 = ((unsigned char)0xFF);
                              }
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_27 = __pyx_v_i;
                              __pyx_t_28 = ((unsigned short)0);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_23 * __pyx_v_new_array.strides[0]) ) + __pyx_t_27 * __pyx_v_new_array.strides[1]) ) + __pyx_t_28 * __pyx_v_new_array.strides[2]) )) = ((unsigned char)__pyx_t_29);
+10635:                 new_array[j, i, <unsigned short int>1] = <unsigned char>(g if g <255 else <unsigned char>255)
                              if (((__pyx_v_g < 255.0) != 0)) {
                                __pyx_t_29 = __pyx_v_g;
                              } else {
                                __pyx_t_29 = ((unsigned char)0xFF);
                              }
                              __pyx_t_27 = __pyx_v_j;
                              __pyx_t_23 = __pyx_v_i;
                              __pyx_t_28 = ((unsigned short)1);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_27 * __pyx_v_new_array.strides[0]) ) + __pyx_t_23 * __pyx_v_new_array.strides[1]) ) + __pyx_t_28 * __pyx_v_new_array.strides[2]) )) = ((unsigned char)__pyx_t_29);
+10636:                 new_array[j, i, <unsigned short int>2] = <unsigned char>(b if b <255 else <unsigned char>255)
                              if (((__pyx_v_b < 255.0) != 0)) {
                                __pyx_t_29 = __pyx_v_b;
                              } else {
                                __pyx_t_29 = ((unsigned char)0xFF);
                              }
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_27 = __pyx_v_i;
                              __pyx_t_28 = ((unsigned short)2);
                              *((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_23 * __pyx_v_new_array.strides[0]) ) + __pyx_t_27 * __pyx_v_new_array.strides[1]) ) + __pyx_t_28 * __pyx_v_new_array.strides[2]) )) = ((unsigned char)__pyx_t_29);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 10637:     # As the array is transposed we
 10638:     # we need to adjust ax and ay (swapped).
+10639:     ay, ax = new_array.shape[:2]
  __pyx_t_20 = __pyx_v_new_array.shape;
  __pyx_t_22 = (__pyx_t_20[0]);
  __pyx_t_21 = (__pyx_t_20[1]);
  __pyx_v_ay = __pyx_t_22;
  __pyx_v_ax = __pyx_t_21;
 10640: 
 10641:     # Return an empty surface if the x or y are not within the normal range.
+10642:     if ax <1 or ay < 1:
  __pyx_t_30 = ((__pyx_v_ax < 1) != 0);
  if (!__pyx_t_30) {
  } else {
    __pyx_t_7 = __pyx_t_30;
    goto __pyx_L33_bool_binop_done;
  }
  __pyx_t_30 = ((__pyx_v_ay < 1) != 0);
  __pyx_t_7 = __pyx_t_30;
  __pyx_L33_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
  }
+10643:         return Surface((ax, ay), SRCALPHA), ax if ax > 0 else 0, ay if ay > 0 else 0
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Surface); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10643, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10643, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10643, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 10643, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_9);
    __pyx_t_10 = 0;
    __pyx_t_9 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10643, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_12, __pyx_t_9};
      __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10643, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_12, __pyx_t_9};
      __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10643, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    {
      __pyx_t_11 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10643, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_17, __pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_17, __pyx_t_9);
      __pyx_t_12 = 0;
      __pyx_t_9 = 0;
      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10643, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (((__pyx_v_ax > 0) != 0)) {
      __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10643, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_8 = __pyx_t_11;
      __pyx_t_11 = 0;
    } else {
      __Pyx_INCREF(__pyx_int_0);
      __pyx_t_8 = __pyx_int_0;
    }
    if (((__pyx_v_ay > 0) != 0)) {
      __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10643, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_11 = __pyx_t_9;
      __pyx_t_9 = 0;
    } else {
      __Pyx_INCREF(__pyx_int_0);
      __pyx_t_11 = __pyx_int_0;
    }
    __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10643, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_11);
    __pyx_t_14 = 0;
    __pyx_t_8 = 0;
    __pyx_t_11 = 0;
    __pyx_r = __pyx_t_9;
    __pyx_t_9 = 0;
    goto __pyx_L0;
 10644: 
 10645:     # SATURATION
 10646:     # mask array is equivalent to array alpha normalized (float values)
 10647:     # sat_value variable can be adjusted at the function call
 10648:     # new_array is a portion of the background, the array is flipped.
 10649:     # NOTE the mask is optional, it filters the output image pixels and
 10650:     # remove bright edges or image contours.
 10651:     # If you wish to remove the mask alpha to gain an extra processing time
 10652:     # use the method saturation_array24_c instead (no mask).
 10653:     # e.g surface = saturation_array24(new_array, sat_value)
+10654:     if saturation:
  __pyx_t_7 = (__pyx_v_saturation != 0);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L35;
  }
+10655:         surface = saturation_array24_mask_c2(new_array, sat_value, alpha, swap_row_column=True)
    __pyx_t_9 = __pyx_f_12PygameShader_6shader_saturation_array24_mask_c2(__pyx_v_new_array, __pyx_v_sat_value, __pyx_v_alpha, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10655, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_surface = __pyx_t_9;
    __pyx_t_9 = 0;
 10656: 
 10657:     # BLOOM
+10658:     elif bloom:
  __pyx_t_7 = (__pyx_v_bloom != 0);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L35;
  }
 10659: 
+10660:         surface = frombuffer(new_array, (ax, ay), 'RGB')
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_8 = __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_8)) __PYX_ERR(1, 10660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 10660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_12);
    __pyx_t_14 = 0;
    __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_11)) {
      PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_t_8, __pyx_t_10, __pyx_n_s_RGB};
      __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_17, 3+__pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10660, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
      PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_t_8, __pyx_t_10, __pyx_n_s_RGB};
      __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_17, 3+__pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10660, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(3+__pyx_t_17); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10660, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_12) {
        __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12); __pyx_t_12 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_17, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_17, __pyx_t_10);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_14, 2+__pyx_t_17, __pyx_n_s_RGB);
      __pyx_t_8 = 0;
      __pyx_t_10 = 0;
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_14, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10660, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_surface = __pyx_t_9;
    __pyx_t_9 = 0;
 10661:         # All alpha pixel values will be re-scaled between [0...1.0]
+10662:         mask = array2d_normalized_c(alpha)
    __pyx_t_31 = __pyx_f_12PygameShader_6shader_array2d_normalized_c(__pyx_v_alpha, 0); if (unlikely(!__pyx_t_31.memview)) __PYX_ERR(1, 10662, __pyx_L1_error)
    __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_t_31, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10662, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __PYX_XDEC_MEMVIEW(&__pyx_t_31, 1);
    __pyx_t_31.memview = NULL;
    __pyx_t_31.data = NULL;
    __pyx_v_mask = __pyx_t_9;
    __pyx_t_9 = 0;
 10663:         # surface = bloom_effect_buffer24_c(surface, threshold_=bloom_threshold, smooth_=1, mask_=mask, fast_=True)
+10664:         surface = bloom_effect_array24_c2(surface, threshold_=bloom_threshold,
    __pyx_t_32.__pyx_n = 3;
    __pyx_t_32.smooth_ = ((unsigned short)1);
    __pyx_t_32.mask_ = __pyx_v_mask;
    __pyx_t_32.fast_ = 1;
    __pyx_t_9 = __pyx_f_12PygameShader_6shader_bloom_effect_array24_c2(__pyx_v_surface, __pyx_v_bloom_threshold, 0, &__pyx_t_32); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10664, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v_surface, __pyx_t_9);
    __pyx_t_9 = 0;
 10665:                                          smooth_=<unsigned short int>1, mask_=mask, fast_=True)
 10666: 
 10667:     # SMOOTH
 10668:     # Apply a gaussian 5x5 to smooth the output image
 10669:     # Only the RGB array is needed as we are working with
 10670:     # 24 bit surface.
 10671:     # Transparency is already included into new_array (see f variable above)
+10672:     elif smooth:
  __pyx_t_7 = (__pyx_v_smooth != 0);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L35;
  }
+10673:         surface = frombuffer(blur5x5_array24_c2(new_array), (ax, ay), "RGB")
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_33 = __pyx_f_12PygameShader_6shader_blur5x5_array24_c2(__pyx_v_new_array, NULL); if (unlikely(!__pyx_t_33.memview)) __PYX_ERR(1, 10673, __pyx_L1_error)
    __pyx_t_14 = __pyx_memoryview_fromslice(__pyx_t_33, 3, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_char, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_char, 0);; if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __PYX_XDEC_MEMVIEW(&__pyx_t_33, 1);
    __pyx_t_33.memview = NULL;
    __pyx_t_33.data = NULL;
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 10673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_8);
    __pyx_t_10 = 0;
    __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_11)) {
      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_14, __pyx_t_12, __pyx_n_s_RGB};
      __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_17, 3+__pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10673, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_14, __pyx_t_12, __pyx_n_s_RGB};
      __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_17, 3+__pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10673, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else
    #endif
    {
      __pyx_t_10 = PyTuple_New(3+__pyx_t_17); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10673, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      if (__pyx_t_8) {
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_17, __pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_17, __pyx_t_12);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_17, __pyx_n_s_RGB);
      __pyx_t_14 = 0;
      __pyx_t_12 = 0;
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_10, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10673, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_surface = __pyx_t_9;
    __pyx_t_9 = 0;
 10674: 
+10675:     elif heat:
  __pyx_t_7 = (__pyx_v_heat != 0);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L35;
  }
 10676:         # alpha = numpy.full((ax, ay), 255, numpy.uint8)
+10677:         surface = pygame.image.frombuffer(
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_pygame); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_image); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+10678:             heatwave_array24_horiz_c(numpy.asarray(new_array).transpose(1, 0, 2), # --> array is transposed
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_numpy); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 10678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_asarray); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = __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_12)) __PYX_ERR(1, 10678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
      }
    }
    __pyx_t_10 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_8, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_12);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_transpose_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_10, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(1, 10678, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
    __pyx_t_34.__pyx_n = 2;
    __pyx_t_34.attenuation = ((float)0.20);
    __pyx_t_34.threshold = ((unsigned char)64);
    __pyx_t_10 = __pyx_f_12PygameShader_6shader_heatwave_array24_horiz_c(__pyx_t_18, __pyx_v_alpha, __pyx_v_frequency, (fmodf(__pyx_v_frequency, 2.0) / ((float)400.0)), &__pyx_t_34); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
    __pyx_t_18.memview = NULL;
    __pyx_t_18.data = NULL;
 10679:             alpha, frequency, (frequency % 2) / <float>400.0, attenuation=<float>0.20, threshold=<unsigned char>64),
+10680:             (ax, ay), 'RGB')
    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 10680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_12);
    __pyx_t_14 = 0;
    __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_11)) {
      PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_t_10, __pyx_t_8, __pyx_n_s_RGB};
      __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_17, 3+__pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10677, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
      PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_t_10, __pyx_t_8, __pyx_n_s_RGB};
      __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_17, 3+__pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10677, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(3+__pyx_t_17); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_12) {
        __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12); __pyx_t_12 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_17, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_17, __pyx_t_8);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_14, 2+__pyx_t_17, __pyx_n_s_RGB);
      __pyx_t_10 = 0;
      __pyx_t_8 = 0;
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_14, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_surface = __pyx_t_9;
    __pyx_t_9 = 0;
 10681: 
 10682:     else:
+10683:         surface = frombuffer(new_array, (ax, ay), 'RGB')
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_14 = __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_14)) __PYX_ERR(1, 10683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 10683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 10683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_10);
    __pyx_t_8 = 0;
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_11)) {
      PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_t_14, __pyx_t_12, __pyx_n_s_RGB};
      __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_17, 3+__pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10683, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
      PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_t_14, __pyx_t_12, __pyx_n_s_RGB};
      __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_17, 3+__pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10683, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(3+__pyx_t_17); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10683, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_17, __pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_17, __pyx_t_12);
      __Pyx_INCREF(__pyx_n_s_RGB);
      __Pyx_GIVEREF(__pyx_n_s_RGB);
      PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_17, __pyx_n_s_RGB);
      __pyx_t_14 = 0;
      __pyx_t_12 = 0;
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10683, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_surface = __pyx_t_9;
    __pyx_t_9 = 0;
  }
  __pyx_L35:;
 10684:         # surface.set_colorkey((0, 0, 0, 0), pygame.RLEACCEL)
 10685: 
+10686:     return surface, ax, ay
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ax); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 10686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_ay); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 10686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 10686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_surface);
  __Pyx_GIVEREF(__pyx_v_surface);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_surface);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_11);
  __pyx_t_9 = 0;
  __pyx_t_11 = 0;
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;
 10687: 
 10688: # --------------------------------------------------------------
 10689: 
 10690: @cython.binding(False)
 10691: @cython.binding(False)
 10692: @cython.boundscheck(False)
 10693: @cython.wraparound(False)
 10694: @cython.nonecheck(False)
 10695: @cython.cdivision(True)
 10696: @cython.profile(False)
+10697: cpdef object chromatic(
static PyObject *__pyx_pw_12PygameShader_6shader_197chromatic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_chromatic(PyObject *__pyx_v_surface_, unsigned int __pyx_v_delta_x, unsigned int __pyx_v_delta_y, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_chromatic *__pyx_optional_args) {
  float __pyx_v_zoom = ((float)0.9999);
  float __pyx_v_fx = ((float)0.02);
  Py_ssize_t __pyx_v_w;
  Py_ssize_t __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_dw;
  float __pyx_v_dh;
  float __pyx_v_nx;
  float __pyx_v_ny;
  float __pyx_v_theta_rad;
  float __pyx_v_nx2;
  float __pyx_v_ny2;
  float __pyx_v_dist;
  float __pyx_v_new_dist;
  float __pyx_v_new_ii;
  float __pyx_v_new_jj;
  int __pyx_v_new_j;
  int __pyx_v_new_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chromatic", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_zoom = __pyx_optional_args->zoom;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_fx = __pyx_optional_args->fx;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __Pyx_XDECREF(__pyx_t_16);
  __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_28);
  __Pyx_AddTraceback("PygameShader.shader.chromatic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_197chromatic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_196chromatic[] = "\n    CHROMATIC ABERRATION \n    \n    Create a chromatic aberration with an amplitude proportional to the \n    distance from the centre of the effect\n    \n    :param surface_ : pygame.Surface\n    :param delta_x  : int; chromatic centre effect coordinate X, must be in range [0 ... w]\n    :param delta_y  : int; chromatic centre effect coordinate Y, must be in range [0 ... h]\n    :param zoom     : float; zoom factor 0.9999 (no zoom, full image), < 1.0 zoom-in. Must \n        be in range [0.0 ... 0.9999] \n    :param fx       : channel rgb layer offset default 0.02. Must be in range [0.0 ... 0.2]\n    :return         : a chromatic aberration effect\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_197chromatic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  unsigned int __pyx_v_delta_x;
  unsigned int __pyx_v_delta_y;
  float __pyx_v_zoom;
  float __pyx_v_fx;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chromatic (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_delta_x,&__pyx_n_s_delta_y,&__pyx_n_s_zoom,&__pyx_n_s_fx,0};
    PyObject* values[5] = {0,0,0,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  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_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_delta_x)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("chromatic", 0, 3, 5, 1); __PYX_ERR(1, 10697, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_delta_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("chromatic", 0, 3, 5, 2); __PYX_ERR(1, 10697, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_zoom);
          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_fx);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "chromatic") < 0)) __PYX_ERR(1, 10697, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        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);
        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_surface_ = values[0];
    __pyx_v_delta_x = __Pyx_PyInt_As_unsigned_int(values[1]); if (unlikely((__pyx_v_delta_x == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10699, __pyx_L3_error)
    __pyx_v_delta_y = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_delta_y == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10700, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_zoom = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_zoom == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 10701, __pyx_L3_error)
    } else {
      __pyx_v_zoom = ((float)0.9999);
    }
    if (values[4]) {
      __pyx_v_fx = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_fx == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 10702, __pyx_L3_error)
    } else {
      __pyx_v_fx = ((float)0.02);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("chromatic", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 10697, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.chromatic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_196chromatic(__pyx_self, __pyx_v_surface_, __pyx_v_delta_x, __pyx_v_delta_y, __pyx_v_zoom, __pyx_v_fx);
  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_6shader_196chromatic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, unsigned int __pyx_v_delta_x, unsigned int __pyx_v_delta_y, float __pyx_v_zoom, float __pyx_v_fx) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chromatic", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.zoom = __pyx_v_zoom;
  __pyx_t_2.fx = __pyx_v_fx;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_chromatic(__pyx_v_surface_, __pyx_v_delta_x, __pyx_v_delta_y, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10697, __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.shader.chromatic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10698:         surface_,
 10699:         unsigned int delta_x,
 10700:         unsigned int delta_y,
 10701:         float zoom=0.9999,
 10702:         float fx=0.02
 10703: ):
 10704:     """
 10705:     CHROMATIC ABERRATION
 10706: 
 10707:     Create a chromatic aberration with an amplitude proportional to the
 10708:     distance from the centre of the effect
 10709: 
 10710:     :param surface_ : pygame.Surface
 10711:     :param delta_x  : int; chromatic centre effect coordinate X, must be in range [0 ... w]
 10712:     :param delta_y  : int; chromatic centre effect coordinate Y, must be in range [0 ... h]
 10713:     :param zoom     : float; zoom factor 0.9999 (no zoom, full image), < 1.0 zoom-in. Must
 10714:         be in range [0.0 ... 0.9999]
 10715:     :param fx       : channel rgb layer offset default 0.02. Must be in range [0.0 ... 0.2]
 10716:     :return         : a chromatic aberration effect
 10717:     """
+10718:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 10718, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!(__pyx_t_3 != 0))) {
+10719:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 10718, __pyx_L1_error)
    }
  }
  #endif
 10720: 
 10721:     cdef Py_ssize_t w, h
+10722:     w, h = surface_.get_size()
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    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(1, 10722, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 10722, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 10722, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 10722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 10722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_w = __pyx_t_7;
  __pyx_v_h = __pyx_t_8;
 10723: 
 10724: 
+10725:     if w == 0 or h == 0:
  __pyx_t_9 = ((__pyx_v_w == 0) != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_3 = __pyx_t_9;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_9 = ((__pyx_v_h == 0) != 0);
  __pyx_t_3 = __pyx_t_9;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+10726:         raise ValueError("Surface width or height cannot be null!")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10726, __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(1, 10726, __pyx_L1_error)
/* … */
  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_Surface_width_or_height_cannot_b); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(1, 10726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__43);
  __Pyx_GIVEREF(__pyx_tuple__43);
 10727: 
+10728:     if delta_x < 0 or delta_y < 0:
  __pyx_t_9 = ((__pyx_v_delta_x < 0) != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_3 = __pyx_t_9;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_9 = ((__pyx_v_delta_y < 0) != 0);
  __pyx_t_3 = __pyx_t_9;
  __pyx_L9_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+10729:         raise ValueError("Arguments delta_x and delta_y must be > 0")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10729, __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(1, 10729, __pyx_L1_error)
/* … */
  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_Arguments_delta_x_and_delta_y_mu); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(1, 10729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__44);
  __Pyx_GIVEREF(__pyx_tuple__44);
 10730: 
+10731:     delta_x %= w
  __pyx_v_delta_x = (__pyx_v_delta_x % __pyx_v_w);
+10732:     delta_y %= h
  __pyx_v_delta_y = (__pyx_v_delta_y % __pyx_v_h);
 10733: 
+10734:     if zoom < 0 or <float>floor(zoom) > <float>0.99999999:
  __pyx_t_9 = ((__pyx_v_zoom < 0.0) != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_3 = __pyx_t_9;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_9 = ((((float)floor(__pyx_v_zoom)) > ((float)0.99999999)) != 0);
  __pyx_t_3 = __pyx_t_9;
  __pyx_L12_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+10735:         raise ValueError("Argument zoom must be in range [0.0 ... 0.999]")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10735, __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(1, 10735, __pyx_L1_error)
/* … */
  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_Argument_zoom_must_be_in_range_0); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(1, 10735, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__45);
  __Pyx_GIVEREF(__pyx_tuple__45);
 10736: 
+10737:     if 0 > <float>floor(fx) > 0.2:
  __pyx_t_10 = ((float)floor(__pyx_v_fx));
  __pyx_t_3 = (0.0 > __pyx_t_10);
  if (__pyx_t_3) {
    __pyx_t_3 = (__pyx_t_10 > 0.2);
  }
  __pyx_t_9 = (__pyx_t_3 != 0);
  if (unlikely(__pyx_t_9)) {
/* … */
  }
+10738:         raise ValueError("Argument fx must be in range [0.0 ... 0.2]")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10738, __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(1, 10738, __pyx_L1_error)
/* … */
  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_Argument_fx_must_be_in_range_0_0); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(1, 10738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__46);
  __Pyx_GIVEREF(__pyx_tuple__46);
 10739: 
 10740:     cdef unsigned char [:, :, :] rgb_array
 10741: 
+10742:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    goto __pyx_L20_try_end;
    __pyx_L15_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
    goto __pyx_L1_error;
    __pyx_L20_try_end:;
  }
+10743:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10743, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10743, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(1, 10743, __pyx_L15_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rgb_array = __pyx_t_14;
      __pyx_t_14.memview = NULL;
      __pyx_t_14.data = NULL;
 10744: 
+10745:     except Exception as e:
    __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_15) {
      __Pyx_AddTraceback("PygameShader.shader.chromatic", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_1) < 0) __PYX_ERR(1, 10745, __pyx_L17_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_e = __pyx_t_4;
+10746:         raise ValueError("\nCannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_5 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels, __pyx_v_e); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10746, __pyx_L17_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_16 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 10746, __pyx_L17_except_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_16, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __PYX_ERR(1, 10746, __pyx_L17_except_error)
    }
    goto __pyx_L17_except_error;
    __pyx_L17_except_error:;
 10747: 
 10748:     cdef:
+10749:         unsigned char [:, :, ::1] new_array = empty((h, w, 3), dtype=numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_int_3);
  __pyx_t_4 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_16);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_16);
  __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_16, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(1, 10749, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_new_array = __pyx_t_17;
  __pyx_t_17.memview = NULL;
  __pyx_t_17.data = NULL;
+10750:         int i = 0, j = 0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+10751:         float dw = <float>delta_y / <float>w
  __pyx_v_dw = (((float)__pyx_v_delta_y) / ((float)__pyx_v_w));
+10752:         float dh = <float>delta_x / <float>h
  __pyx_v_dh = (((float)__pyx_v_delta_x) / ((float)__pyx_v_h));
 10753:         float nx, ny, theta_rad, nx2, ny2, dist, new_dist, new_ii, new_jj
 10754:         int new_j, new_i
 10755: 
+10756:     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_L25;
        }
        __pyx_L25:;
      }
  }
+10757:         for j in prange(0, h, schedule='static', num_threads=THREADS):
        __pyx_t_8 = __pyx_v_h;
        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_18 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_18 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_dist) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_new_dist) lastprivate(__pyx_v_new_i) lastprivate(__pyx_v_new_ii) lastprivate(__pyx_v_new_j) lastprivate(__pyx_v_new_jj) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_nx2) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_ny2) lastprivate(__pyx_v_theta_rad) schedule(static)
/* … */
        __pyx_t_8 = __pyx_v_h;
        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_18 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_18 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_dist) lastprivate(__pyx_v_i) firstprivate(__pyx_v_j) lastprivate(__pyx_v_j) lastprivate(__pyx_v_new_dist) lastprivate(__pyx_v_new_i) lastprivate(__pyx_v_new_ii) lastprivate(__pyx_v_new_j) lastprivate(__pyx_v_new_jj) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_nx2) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_ny2) lastprivate(__pyx_v_theta_rad) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_18; __pyx_t_7++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_7);
                            /* Initialize private variables to invalid values */
                            __pyx_v_dist = ((float)__PYX_NAN());
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_new_dist = ((float)__PYX_NAN());
                            __pyx_v_new_i = ((int)0xbad0bad0);
                            __pyx_v_new_ii = ((float)__PYX_NAN());
                            __pyx_v_new_j = ((int)0xbad0bad0);
                            __pyx_v_new_jj = ((float)__PYX_NAN());
                            __pyx_v_nx = ((float)__PYX_NAN());
                            __pyx_v_nx2 = ((float)__PYX_NAN());
                            __pyx_v_ny = ((float)__PYX_NAN());
                            __pyx_v_ny2 = ((float)__PYX_NAN());
                            __pyx_v_theta_rad = ((float)__PYX_NAN());
+10758:             for i in range(w):
                            __pyx_t_19 = __pyx_v_w;
                            __pyx_t_20 = __pyx_t_19;
                            for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_20; __pyx_t_15+=1) {
                              __pyx_v_i = __pyx_t_15;
+10759:                 nx = <float>(<float>i / <float>h) - dh
                              __pyx_v_nx = (((float)(((float)__pyx_v_i) / ((float)__pyx_v_h))) - __pyx_v_dh);
+10760:                 ny = <float>(<float>j / <float>w) - dw
                              __pyx_v_ny = (((float)(((float)__pyx_v_j) / ((float)__pyx_v_w))) - __pyx_v_dw);
+10761:                 theta_rad = <float>atan2 (ny,nx)
                              __pyx_v_theta_rad = ((float)atan2(__pyx_v_ny, __pyx_v_nx));
+10762:                 nx2 = nx * nx
                              __pyx_v_nx2 = (__pyx_v_nx * __pyx_v_nx);
+10763:                 ny2 = ny * ny
                              __pyx_v_ny2 = (__pyx_v_ny * __pyx_v_ny);
+10764:                 dist = <float>sqrt(nx2 + ny2)
                              __pyx_v_dist = ((float)sqrt((__pyx_v_nx2 + __pyx_v_ny2)));
+10765:                 new_dist = dist * (zoom - fx)
                              __pyx_v_new_dist = (__pyx_v_dist * (__pyx_v_zoom - __pyx_v_fx));
+10766:                 new_ii = <float>cos(<float>theta_rad) * new_dist
                              __pyx_v_new_ii = (((float)cos(((float)__pyx_v_theta_rad))) * __pyx_v_new_dist);
+10767:                 new_jj = <float>sin(<float>theta_rad) * new_dist
                              __pyx_v_new_jj = (((float)sin(((float)__pyx_v_theta_rad))) * __pyx_v_new_dist);
+10768:                 new_j = <int>((new_jj + dw) * <float>w)
                              __pyx_v_new_j = ((int)((__pyx_v_new_jj + __pyx_v_dw) * ((float)__pyx_v_w)));
+10769:                 new_i = <int>((new_ii + dh) * <float>h)
                              __pyx_v_new_i = ((int)((__pyx_v_new_ii + __pyx_v_dh) * ((float)__pyx_v_h)));
+10770:                 new_array[j, i, 0] = rgb_array[new_i, new_j, 0]
                              __pyx_t_21 = __pyx_v_new_i;
                              __pyx_t_22 = __pyx_v_new_j;
                              __pyx_t_23 = 0;
                              __pyx_t_24 = __pyx_v_j;
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_26 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_24 * __pyx_v_new_array.strides[0]) ) + __pyx_t_25 * __pyx_v_new_array.strides[1]) )) + __pyx_t_26)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_23 * __pyx_v_rgb_array.strides[2]) )));
 10771: 
+10772:                 new_dist = dist * (zoom  - fx * <float>2.0)
                              __pyx_v_new_dist = (__pyx_v_dist * (__pyx_v_zoom - (__pyx_v_fx * ((float)2.0))));
 10773: 
+10774:                 new_j = <int>((<float>sin(<float>theta_rad) * new_dist + dw) * <float>w)
                              __pyx_v_new_j = ((int)(((((float)sin(((float)__pyx_v_theta_rad))) * __pyx_v_new_dist) + __pyx_v_dw) * ((float)__pyx_v_w)));
+10775:                 new_i = <int>((<float>cos(<float>theta_rad) * new_dist + dh) * <float>h)
                              __pyx_v_new_i = ((int)(((((float)cos(((float)__pyx_v_theta_rad))) * __pyx_v_new_dist) + __pyx_v_dh) * ((float)__pyx_v_h)));
+10776:                 new_array[j, i, 1] = rgb_array[new_i, new_j, 1]
                              __pyx_t_23 = __pyx_v_new_i;
                              __pyx_t_22 = __pyx_v_new_j;
                              __pyx_t_21 = 1;
                              __pyx_t_26 = __pyx_v_j;
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_24 = 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_25 * __pyx_v_new_array.strides[1]) )) + __pyx_t_24)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_23 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[2]) )));
 10777: 
+10778:                 new_dist = dist * (zoom  - fx * <float>3.0)
                              __pyx_v_new_dist = (__pyx_v_dist * (__pyx_v_zoom - (__pyx_v_fx * ((float)3.0))));
 10779: 
+10780:                 new_ii = <float>cos(<float>theta_rad) * new_dist
                              __pyx_v_new_ii = (((float)cos(((float)__pyx_v_theta_rad))) * __pyx_v_new_dist);
+10781:                 new_jj = <float>sin(<float>theta_rad) * new_dist
                              __pyx_v_new_jj = (((float)sin(((float)__pyx_v_theta_rad))) * __pyx_v_new_dist);
 10782: 
+10783:                 new_j = <int>((new_jj + dw) * <float>w)
                              __pyx_v_new_j = ((int)((__pyx_v_new_jj + __pyx_v_dw) * ((float)__pyx_v_w)));
+10784:                 new_i = <int>((new_ii + dh) * <float>h)
                              __pyx_v_new_i = ((int)((__pyx_v_new_ii + __pyx_v_dh) * ((float)__pyx_v_h)));
 10785: 
+10786:                 new_array[j, i, 2] = rgb_array[new_i, new_j, 2]
                              __pyx_t_21 = __pyx_v_new_i;
                              __pyx_t_22 = __pyx_v_new_j;
                              __pyx_t_23 = 2;
                              __pyx_t_24 = __pyx_v_j;
                              __pyx_t_25 = __pyx_v_i;
                              __pyx_t_26 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_24 * __pyx_v_new_array.strides[0]) ) + __pyx_t_25 * __pyx_v_new_array.strides[1]) )) + __pyx_t_26)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_21 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_23 * __pyx_v_rgb_array.strides[2]) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 10787: 
+10788:     return frombuffer(new_array, (w, h), 'RGB').convert()
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __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_1)) __PYX_ERR(1, 10788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_27 = PyInt_FromSsize_t(__pyx_v_h); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 10788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __pyx_t_28 = PyTuple_New(2); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 10788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_28);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_27);
  PyTuple_SET_ITEM(__pyx_t_28, 1, __pyx_t_27);
  __pyx_t_4 = 0;
  __pyx_t_27 = 0;
  __pyx_t_27 = NULL;
  __pyx_t_15 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_27)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_27);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_15 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_27, __pyx_t_1, __pyx_t_28, __pyx_n_s_RGB};
    __pyx_t_16 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_15, 3+__pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 10788, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_27, __pyx_t_1, __pyx_t_28, __pyx_n_s_RGB};
    __pyx_t_16 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_15, 3+__pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 10788, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(3+__pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10788, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_27) {
      __Pyx_GIVEREF(__pyx_t_27); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_27); __pyx_t_27 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_15, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_28);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_15, __pyx_t_28);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_15, __pyx_n_s_RGB);
    __pyx_t_1 = 0;
    __pyx_t_28 = 0;
    __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 10788, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_convert); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_16)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_16);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_5 = (__pyx_t_16) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_16) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 10788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 10789: 
 10790: 
 10791: 
 10792: @cython.binding(False)
 10793: @cython.binding(False)
 10794: @cython.boundscheck(False)
 10795: @cython.wraparound(False)
 10796: @cython.nonecheck(False)
 10797: @cython.cdivision(True)
 10798: @cython.profile(False)
+10799: cpdef object zoom(surface_, unsigned int delta_x, unsigned int delta_y, float zx=0.9999):
static PyObject *__pyx_pw_12PygameShader_6shader_199zoom(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_12PygameShader_6shader_zoom(PyObject *__pyx_v_surface_, unsigned int __pyx_v_delta_x, unsigned int __pyx_v_delta_y, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_12PygameShader_6shader_zoom *__pyx_optional_args) {
  float __pyx_v_zx = ((float)0.9999);
  int __pyx_v_w;
  int __pyx_v_h;
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_e = NULL;
  __Pyx_memviewslice __pyx_v_new_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  float __pyx_v_dw;
  float __pyx_v_dh;
  float __pyx_v_nx;
  float __pyx_v_ny;
  float __pyx_v_theta;
  float __pyx_v_new_dist;
  int __pyx_v_new_j;
  int __pyx_v_new_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("zoom", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_zx = __pyx_optional_args->zx;
    }
  }
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_XDECREF(__pyx_t_14);
  __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_AddTraceback("PygameShader.shader.zoom", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XDECREF(__pyx_v_e);
  __PYX_XDEC_MEMVIEW(&__pyx_v_new_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_199zoom(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_12PygameShader_6shader_198zoom[] = "\n    ZOOM WITHIN AN IMAGE\n    \n    Zoom-in or zoom-out (factor zx) toward a given centre point (delta_x, delta_y) \n    \n    :param surface_ : pygame.Surface\n    :param delta_x  : int; Zoom centre x coordinate must be in range [0 ... w] \n    :param delta_y  : int; Zoom centre y coordinate must be in range [0 ... h]\n    :param zx       : float; Zoom factor (0.9999 no zoom) must be in range [0.0 ... 0.9999]\n    :return         : Returns an image with a zoom effect\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_199zoom(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surface_ = 0;
  unsigned int __pyx_v_delta_x;
  unsigned int __pyx_v_delta_y;
  float __pyx_v_zx;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("zoom (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surface,&__pyx_n_s_delta_x,&__pyx_n_s_delta_y,&__pyx_n_s_zx,0};
    PyObject* values[4] = {0,0,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  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_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_delta_x)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("zoom", 0, 3, 4, 1); __PYX_ERR(1, 10799, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_delta_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("zoom", 0, 3, 4, 2); __PYX_ERR(1, 10799, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_zx);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zoom") < 0)) __PYX_ERR(1, 10799, __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);
        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_surface_ = values[0];
    __pyx_v_delta_x = __Pyx_PyInt_As_unsigned_int(values[1]); if (unlikely((__pyx_v_delta_x == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10799, __pyx_L3_error)
    __pyx_v_delta_y = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_delta_y == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10799, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_zx = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_zx == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 10799, __pyx_L3_error)
    } else {
      __pyx_v_zx = ((float)0.9999);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("zoom", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 10799, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.zoom", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_198zoom(__pyx_self, __pyx_v_surface_, __pyx_v_delta_x, __pyx_v_delta_y, __pyx_v_zx);
  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_6shader_198zoom(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_, unsigned int __pyx_v_delta_x, unsigned int __pyx_v_delta_y, float __pyx_v_zx) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("zoom", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.zx = __pyx_v_zx;
  __pyx_t_1 = __pyx_f_12PygameShader_6shader_zoom(__pyx_v_surface_, __pyx_v_delta_x, __pyx_v_delta_y, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10799, __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.shader.zoom", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10800:     """
 10801:     ZOOM WITHIN AN IMAGE
 10802: 
 10803:     Zoom-in or zoom-out (factor zx) toward a given centre point (delta_x, delta_y)
 10804: 
 10805:     :param surface_ : pygame.Surface
 10806:     :param delta_x  : int; Zoom centre x coordinate must be in range [0 ... w]
 10807:     :param delta_y  : int; Zoom centre y coordinate must be in range [0 ... h]
 10808:     :param zx       : float; Zoom factor (0.9999 no zoom) must be in range [0.0 ... 0.9999]
 10809:     :return         : Returns an image with a zoom effect
 10810:     """
 10811: 
 10812:     cdef int w, h
+10813:     w, h = surface_.get_size()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface_, __pyx_n_s_get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __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_1 = (__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_1)) __PYX_ERR(1, 10813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(1, 10813, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #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(1, 10813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(1, 10813, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(1, 10813, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10813, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 10813, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 10814: 
+10815:     assert PyObject_IsInstance(surface_, pygame.Surface), \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10815, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10815, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = PyObject_IsInstance(__pyx_v_surface_, __pyx_t_3); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 10815, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!(__pyx_t_8 != 0))) {
+10816:         "\nArgument surface_ must be a pygame.Surface type, got %s " % type(surface_)
      __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_surface__must_be_a_pyg, ((PyObject *)Py_TYPE(__pyx_v_surface_))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10816, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 10815, __pyx_L1_error)
    }
  }
  #endif
 10817: 
+10818:     if w == 0 or h == 0:
  __pyx_t_9 = ((__pyx_v_w == 0) != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_8 = __pyx_t_9;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_9 = ((__pyx_v_h == 0) != 0);
  __pyx_t_8 = __pyx_t_9;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+10819:         raise ValueError("Surface width or height cannot be null!")
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 10819, __pyx_L1_error)
 10820: 
+10821:     if delta_x < 0 or delta_y < 0:
  __pyx_t_9 = ((__pyx_v_delta_x < 0) != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_8 = __pyx_t_9;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_9 = ((__pyx_v_delta_y < 0) != 0);
  __pyx_t_8 = __pyx_t_9;
  __pyx_L9_bool_binop_done:;
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+10822:         raise ValueError("Arguments delta_x and delta_y must be > 0")
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 10822, __pyx_L1_error)
 10823: 
+10824:     delta_x %= w
  __pyx_v_delta_x = (__pyx_v_delta_x % __pyx_v_w);
+10825:     delta_y %= h
  __pyx_v_delta_y = (__pyx_v_delta_y % __pyx_v_h);
 10826: 
+10827:     if zx < 0 or <float>floor(zx) > <float>0.99999999:
  __pyx_t_9 = ((__pyx_v_zx < 0.0) != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_8 = __pyx_t_9;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_9 = ((((float)floor(__pyx_v_zx)) > ((float)0.99999999)) != 0);
  __pyx_t_8 = __pyx_t_9;
  __pyx_L12_bool_binop_done:;
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+10828:         raise ValueError("Argument zx must be in range [0.0 ... 0.999]")
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 10828, __pyx_L1_error)
/* … */
  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_Argument_zx_must_be_in_range_0_0); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(1, 10828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__47);
  __Pyx_GIVEREF(__pyx_tuple__47);
 10829: 
 10830: 
 10831:     cdef unsigned char [:, :, :] rgb_array
 10832: 
+10833:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    goto __pyx_L19_try_end;
    __pyx_L14_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
    goto __pyx_L1_error;
    __pyx_L19_try_end:;
  }
+10834:         rgb_array = pixels3d(surface_)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10834, __pyx_L14_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_surface_);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10834, __pyx_L14_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(1, 10834, __pyx_L14_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_rgb_array = __pyx_t_13;
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
 10835: 
+10836:     except Exception as e:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("PygameShader.shader.zoom", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(1, 10836, __pyx_L16_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_e = __pyx_t_1;
+10837:         raise ValueError("\nCannot reference source pixels into a 3d array.\n %s " % e)
      __pyx_t_4 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_reference_source_pixels, __pyx_v_e); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10837, __pyx_L16_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_14 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10837, __pyx_L16_except_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_Raise(__pyx_t_14, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __PYX_ERR(1, 10837, __pyx_L16_except_error)
    }
    goto __pyx_L16_except_error;
    __pyx_L16_except_error:;
 10838: 
 10839:     cdef:
+10840:         unsigned char [:, :, ::1] new_array = empty((h, w, 3), dtype=numpy.uint8)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_int_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_14);
  __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_unsigned_char(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(1, 10840, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_new_array = __pyx_t_15;
  __pyx_t_15.memview = NULL;
  __pyx_t_15.data = NULL;
+10841:         int i = 0, j = 0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
+10842:         float dw = delta_y / <float>w
  __pyx_v_dw = (__pyx_v_delta_y / ((float)__pyx_v_w));
+10843:         float dh = delta_x / <float>h
  __pyx_v_dh = (__pyx_v_delta_x / ((float)__pyx_v_h));
 10844:         float nx, ny, theta, nx2, ny2, dist, new_dist
 10845:         int new_j, new_i, r, g, b
 10846: 
+10847:     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_L24;
        }
        __pyx_L24:;
      }
  }
+10848:         for j in prange(0, h, schedule='static', num_threads=THREADS):
        __pyx_t_7 = __pyx_v_h;
        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_17 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 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_new_dist) lastprivate(__pyx_v_new_i) lastprivate(__pyx_v_new_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_theta) schedule(static)
/* … */
        __pyx_t_7 = __pyx_v_h;
        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_17 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_17 > 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_new_dist) lastprivate(__pyx_v_new_i) lastprivate(__pyx_v_new_j) lastprivate(__pyx_v_nx) lastprivate(__pyx_v_ny) lastprivate(__pyx_v_theta) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_17; __pyx_t_16++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_16);
                            /* Initialize private variables to invalid values */
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_new_dist = ((float)__PYX_NAN());
                            __pyx_v_new_i = ((int)0xbad0bad0);
                            __pyx_v_new_j = ((int)0xbad0bad0);
                            __pyx_v_nx = ((float)__PYX_NAN());
                            __pyx_v_ny = ((float)__PYX_NAN());
                            __pyx_v_theta = ((float)__PYX_NAN());
+10849:             for i in range(w):
                            __pyx_t_6 = __pyx_v_w;
                            __pyx_t_18 = __pyx_t_6;
                            for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
                              __pyx_v_i = __pyx_t_19;
+10850:                 nx = <float>(<float>i / <float>h) - dh
                              __pyx_v_nx = (((float)(((float)__pyx_v_i) / ((float)__pyx_v_h))) - __pyx_v_dh);
+10851:                 ny = <float>(<float>j / <float>w) - dw
                              __pyx_v_ny = (((float)(((float)__pyx_v_j) / ((float)__pyx_v_w))) - __pyx_v_dw);
 10852: 
+10853:                 theta = <float>atan2 (ny,nx)
                              __pyx_v_theta = ((float)atan2(__pyx_v_ny, __pyx_v_nx));
 10854: 
+10855:                 new_dist = <float>sqrt(nx * nx + ny * ny) * zx
                              __pyx_v_new_dist = (((float)sqrt(((__pyx_v_nx * __pyx_v_nx) + (__pyx_v_ny * __pyx_v_ny)))) * __pyx_v_zx);
 10856: 
+10857:                 new_j = <int>((<float>sin(<float>theta) * new_dist + dw) * <float>w)
                              __pyx_v_new_j = ((int)(((((float)sin(((float)__pyx_v_theta))) * __pyx_v_new_dist) + __pyx_v_dw) * ((float)__pyx_v_w)));
+10858:                 new_i = <int>((<float>cos(<float>theta) * new_dist + dh) * <float>h)
                              __pyx_v_new_i = ((int)(((((float)cos(((float)__pyx_v_theta))) * __pyx_v_new_dist) + __pyx_v_dh) * ((float)__pyx_v_h)));
 10859: 
+10860:                 new_array[j, i, 0] = rgb_array[new_i, new_j, 0]
                              __pyx_t_20 = __pyx_v_new_i;
                              __pyx_t_21 = __pyx_v_new_j;
                              __pyx_t_22 = 0;
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_24 = __pyx_v_i;
                              __pyx_t_25 = 0;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_23 * __pyx_v_new_array.strides[0]) ) + __pyx_t_24 * __pyx_v_new_array.strides[1]) )) + __pyx_t_25)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[2]) )));
+10861:                 new_array[j, i, 1] = rgb_array[new_i, new_j, 1]
                              __pyx_t_22 = __pyx_v_new_i;
                              __pyx_t_21 = __pyx_v_new_j;
                              __pyx_t_20 = 1;
                              __pyx_t_25 = __pyx_v_j;
                              __pyx_t_24 = __pyx_v_i;
                              __pyx_t_23 = 1;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_25 * __pyx_v_new_array.strides[0]) ) + __pyx_t_24 * __pyx_v_new_array.strides[1]) )) + __pyx_t_23)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_22 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_20 * __pyx_v_rgb_array.strides[2]) )));
+10862:                 new_array[j, i, 2] = rgb_array[new_i, new_j, 2]
                              __pyx_t_20 = __pyx_v_new_i;
                              __pyx_t_21 = __pyx_v_new_j;
                              __pyx_t_22 = 2;
                              __pyx_t_23 = __pyx_v_j;
                              __pyx_t_24 = __pyx_v_i;
                              __pyx_t_25 = 2;
                              *((unsigned char *) ( /* dim=2 */ ((char *) (((unsigned char *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_new_array.data + __pyx_t_23 * __pyx_v_new_array.strides[0]) ) + __pyx_t_24 * __pyx_v_new_array.strides[1]) )) + __pyx_t_25)) )) = (*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_20 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_21 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_22 * __pyx_v_rgb_array.strides[2]) )));
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 10863: 
 10864: 
+10865:     return frombuffer(new_array, (w, h), 'RGB').convert()
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __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_2)) __PYX_ERR(1, 10865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_26 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 10865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __pyx_t_27 = PyTuple_New(2); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 10865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_27, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_26);
  PyTuple_SET_ITEM(__pyx_t_27, 1, __pyx_t_26);
  __pyx_t_1 = 0;
  __pyx_t_26 = 0;
  __pyx_t_26 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_26 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_26)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_26);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_26, __pyx_t_2, __pyx_t_27, __pyx_n_s_RGB};
    __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10865, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_26, __pyx_t_2, __pyx_t_27, __pyx_n_s_RGB};
    __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10865, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10865, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_26) {
      __Pyx_GIVEREF(__pyx_t_26); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_26); __pyx_t_26 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_7, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_27);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_7, __pyx_t_27);
    __Pyx_INCREF(__pyx_n_s_RGB);
    __Pyx_GIVEREF(__pyx_n_s_RGB);
    PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_7, __pyx_n_s_RGB);
    __pyx_t_2 = 0;
    __pyx_t_27 = 0;
    __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 10865, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_convert); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_4 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 10866: 
 10867: 
 10868: @cython.binding(False)
 10869: @cython.binding(False)
 10870: @cython.boundscheck(False)
 10871: @cython.wraparound(False)
 10872: @cython.nonecheck(False)
 10873: @cython.cdivision(True)
 10874: @cython.profile(False)
+10875: cpdef void Luma_GreyScale(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_201Luma_GreyScale(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static void __pyx_f_12PygameShader_6shader_Luma_GreyScale(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Luma_GreyScale", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.Luma_GreyScale", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_arr, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_201Luma_GreyScale(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_200Luma_GreyScale[] = "\n    CONVERT IMAGE INTO GREYSCALE USING YIQ (LUMA INFORMATION)\n    \n    :param surface_: pygame.Surface; \n    :return: void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_201Luma_GreyScale(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Luma_GreyScale (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_200Luma_GreyScale(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_200Luma_GreyScale(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Luma_GreyScale", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_Luma_GreyScale(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10875, __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.shader.Luma_GreyScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10876:     """
 10877:     CONVERT IMAGE INTO GREYSCALE USING YIQ (LUMA INFORMATION)
 10878: 
 10879:     :param surface_: pygame.Surface;
 10880:     :return: void
 10881:     """
+10882:     cdef unsigned char [:,:,:] arr = pixels3d(surface_)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_surface_);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 10882, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_arr = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+10883:     Luma_GreyScale_c(arr)
  __pyx_f_12PygameShader_6shader_Luma_GreyScale_c(__pyx_v_arr, 0);
 10884: 
 10885: @cython.binding(False)
 10886: @cython.binding(False)
 10887: @cython.boundscheck(False)
 10888: @cython.wraparound(False)
 10889: @cython.nonecheck(False)
 10890: @cython.cdivision(True)
 10891: @cython.profile(False)
+10892: cpdef inline void Luma_GreyScale_c(unsigned char [:, :, :] rgb_array):
static PyObject *__pyx_pw_12PygameShader_6shader_203Luma_GreyScale_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_Luma_GreyScale_c(__Pyx_memviewslice __pyx_v_rgb_array, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  struct yiq __pyx_v_yiq_;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Luma_GreyScale_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_203Luma_GreyScale_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array); /*proto*/
static PyObject *__pyx_pw_12PygameShader_6shader_203Luma_GreyScale_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Luma_GreyScale_c (wrapper)", 0);
  assert(__pyx_arg_rgb_array); {
    __pyx_v_rgb_array = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_arg_rgb_array, PyBUF_WRITABLE); if (unlikely(!__pyx_v_rgb_array.memview)) __PYX_ERR(1, 10892, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.Luma_GreyScale_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_202Luma_GreyScale_c(__pyx_self, __pyx_v_rgb_array);
  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_6shader_202Luma_GreyScale_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_rgb_array) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Luma_GreyScale_c", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_rgb_array.memview)) { __Pyx_RaiseUnboundLocalError("rgb_array"); __PYX_ERR(1, 10892, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_Luma_GreyScale_c(__pyx_v_rgb_array, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10892, __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.shader.Luma_GreyScale_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10893: 
 10894:     cdef Py_ssize_t w, h
+10895:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 10896: 
 10897:     cdef:
+10898:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 10899:         yiq yiq_
 10900:         rgb rgb_
 10901:         float h_
 10902:         unsigned char *r
 10903:         unsigned char *g
 10904:         unsigned char *b
 10905: 
+10906:     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:;
      }
  }
+10907:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) lastprivate(__pyx_v_yiq_) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) lastprivate(__pyx_v_yiq_) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* 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_r = ((unsigned char *)1);
+10908:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+10909:                 r = &rgb_array[i, j, 0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+10910:                 g = &rgb_array[i, j, 1]
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_10 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[2]) ))));
+10911:                 b = &rgb_array[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+10912:                 yiq_ = rgb_to_yiq(r[0] * <float>ONE_255, g[0] * <float>ONE_255, b[0] * <float>ONE_255)
                              __pyx_v_yiq_ = rgb_to_yiq(((__pyx_v_r[0]) * ((float)0.00392156862745098)), ((__pyx_v_g[0]) * ((float)0.00392156862745098)), ((__pyx_v_b[0]) * ((float)0.00392156862745098)));
 10913: 
+10914:                 r[0] = <unsigned char>min(<unsigned char>(yiq_.y * <float>255.0), <unsigned char>255)
                              __pyx_t_11 = ((unsigned char)0xFF);
                              __pyx_t_12 = ((unsigned char)(__pyx_v_yiq_.y * ((float)255.0)));
                              if (((__pyx_t_11 < __pyx_t_12) != 0)) {
                                __pyx_t_13 = __pyx_t_11;
                              } else {
                                __pyx_t_13 = __pyx_t_12;
                              }
                              (__pyx_v_r[0]) = ((unsigned char)__pyx_t_13);
+10915:                 g[0] = <unsigned char>min(<unsigned char>(yiq_.y * <float>255.0), <unsigned char>255)
                              __pyx_t_13 = ((unsigned char)0xFF);
                              __pyx_t_11 = ((unsigned char)(__pyx_v_yiq_.y * ((float)255.0)));
                              if (((__pyx_t_13 < __pyx_t_11) != 0)) {
                                __pyx_t_12 = __pyx_t_13;
                              } else {
                                __pyx_t_12 = __pyx_t_11;
                              }
                              (__pyx_v_g[0]) = ((unsigned char)__pyx_t_12);
+10916:                 b[0] = <unsigned char>min(<unsigned char>(yiq_.y * <float>255.0), <unsigned char>255)
                              __pyx_t_12 = ((unsigned char)0xFF);
                              __pyx_t_13 = ((unsigned char)(__pyx_v_yiq_.y * ((float)255.0)));
                              if (((__pyx_t_12 < __pyx_t_13) != 0)) {
                                __pyx_t_11 = __pyx_t_12;
                              } else {
                                __pyx_t_11 = __pyx_t_13;
                              }
                              (__pyx_v_b[0]) = ((unsigned char)__pyx_t_11);
                            }
                        }
                    }
                }
            }
        }
        #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
      }
 10917: 
 10918: 
 10919: 
 10920: @cython.binding(False)
 10921: @cython.binding(False)
 10922: @cython.boundscheck(False)
 10923: @cython.wraparound(False)
 10924: @cython.nonecheck(False)
 10925: @cython.cdivision(True)
 10926: @cython.profile(False)
+10927: cpdef void RGB_TO_YIQ_Q0_inplace(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_205RGB_TO_YIQ_Q0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static void __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Q0_inplace(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Q0_inplace", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.RGB_TO_YIQ_Q0_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_arr, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_205RGB_TO_YIQ_Q0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_204RGB_TO_YIQ_Q0_inplace[] = "\n    CONVERT IMAGE INTO YIQ MODEL (REPRESENT IN-PHASE VALUE)\n    Final YIQ model without the quadrature value Q = 0\n    \n    In YIQ the Y component represents the luma information, \n    I and Q represent the chrominance information. \n    I stands for in-phase, while Q stands for quadrature, referring to the components \n    used in quadrature amplitude modulation. \n\n    :param surface_: pygame.Surface; \n    :return: void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_205RGB_TO_YIQ_Q0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Q0_inplace (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_204RGB_TO_YIQ_Q0_inplace(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_204RGB_TO_YIQ_Q0_inplace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Q0_inplace", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Q0_inplace(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10927, __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.shader.RGB_TO_YIQ_Q0_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10928:     """
 10929:     CONVERT IMAGE INTO YIQ MODEL (REPRESENT IN-PHASE VALUE)
 10930:     Final YIQ model without the quadrature value Q = 0
 10931: 
 10932:     In YIQ the Y component represents the luma information,
 10933:     I and Q represent the chrominance information.
 10934:     I stands for in-phase, while Q stands for quadrature, referring to the components
 10935:     used in quadrature amplitude modulation.
 10936: 
 10937:     :param surface_: pygame.Surface;
 10938:     :return: void
 10939:     """
+10940:     cdef unsigned char [:,:,:] arr = pixels3d(surface_)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_surface_);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 10940, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_arr = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+10941:     RGB_TO_YIQ_Q0_inplace_c(arr)
  __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Q0_inplace_c(__pyx_v_arr, 0);
 10942: 
 10943: @cython.binding(False)
 10944: @cython.binding(False)
 10945: @cython.boundscheck(False)
 10946: @cython.wraparound(False)
 10947: @cython.nonecheck(False)
 10948: @cython.cdivision(True)
 10949: @cython.profile(False)
+10950: cpdef inline void RGB_TO_YIQ_Q0_inplace_c(unsigned char [:, :, :] rgb_array):
static PyObject *__pyx_pw_12PygameShader_6shader_207RGB_TO_YIQ_Q0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Q0_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  struct yiq __pyx_v_yiq_;
  struct rgb __pyx_v_rgb_;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Q0_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_207RGB_TO_YIQ_Q0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array); /*proto*/
static PyObject *__pyx_pw_12PygameShader_6shader_207RGB_TO_YIQ_Q0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Q0_inplace_c (wrapper)", 0);
  assert(__pyx_arg_rgb_array); {
    __pyx_v_rgb_array = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_arg_rgb_array, PyBUF_WRITABLE); if (unlikely(!__pyx_v_rgb_array.memview)) __PYX_ERR(1, 10950, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.RGB_TO_YIQ_Q0_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_206RGB_TO_YIQ_Q0_inplace_c(__pyx_self, __pyx_v_rgb_array);
  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_6shader_206RGB_TO_YIQ_Q0_inplace_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_rgb_array) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Q0_inplace_c", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_rgb_array.memview)) { __Pyx_RaiseUnboundLocalError("rgb_array"); __PYX_ERR(1, 10950, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Q0_inplace_c(__pyx_v_rgb_array, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10950, __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.shader.RGB_TO_YIQ_Q0_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10951: 
 10952:     cdef Py_ssize_t w, h
+10953:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 10954: 
 10955:     cdef:
+10956:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 10957:         yiq yiq_
 10958:         rgb rgb_
 10959:         float h_
 10960:         unsigned char *r
 10961:         unsigned char *g
 10962:         unsigned char *b
 10963: 
+10964:     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:;
      }
  }
+10965:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_yiq_) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_yiq_) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* 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_r = ((unsigned char *)1);
+10966:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+10967:                 r = &rgb_array[i, j, 0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+10968:                 g = &rgb_array[i, j, 1]
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_10 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[2]) ))));
+10969:                 b = &rgb_array[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+10970:                 yiq_ = rgb_to_yiq(r[0] * <float>ONE_255, g[0] * <float>ONE_255, b[0] * <float>ONE_255)
                              __pyx_v_yiq_ = rgb_to_yiq(((__pyx_v_r[0]) * ((float)0.00392156862745098)), ((__pyx_v_g[0]) * ((float)0.00392156862745098)), ((__pyx_v_b[0]) * ((float)0.00392156862745098)));
+10971:                 rgb_ = yiq_to_rgb(yiq_.y, yiq_.i, 0)
                              __pyx_v_rgb_ = yiq_to_rgb(__pyx_v_yiq_.y, __pyx_v_yiq_.i, 0.0);
+10972:                 r[0] = <unsigned char>(rgb_.r * <float>255.0)
                              (__pyx_v_r[0]) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+10973:                 g[0] = <unsigned char>(rgb_.g * <float>255.0)
                              (__pyx_v_g[0]) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+10974:                 b[0] = <unsigned char>(rgb_.b * <float>255.0)
                              (__pyx_v_b[0]) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.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
      }
 10975: 
 10976: 
 10977: 
 10978: @cython.binding(False)
 10979: @cython.binding(False)
 10980: @cython.boundscheck(False)
 10981: @cython.wraparound(False)
 10982: @cython.nonecheck(False)
 10983: @cython.cdivision(True)
 10984: @cython.profile(False)
+10985: cpdef void RGB_TO_YIQ_I0_inplace(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_209RGB_TO_YIQ_I0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static void __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_I0_inplace(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_I0_inplace", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.RGB_TO_YIQ_I0_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_arr, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_209RGB_TO_YIQ_I0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_208RGB_TO_YIQ_I0_inplace[] = "\n    CONVERT IMAGE INTO YIQ MODEL\n    Final YIQ model without the in phase value I = 0\n\n    :param surface_: pygame.Surface; \n    :return: void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_209RGB_TO_YIQ_I0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_I0_inplace (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_208RGB_TO_YIQ_I0_inplace(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_208RGB_TO_YIQ_I0_inplace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_I0_inplace", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_RGB_TO_YIQ_I0_inplace(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10985, __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.shader.RGB_TO_YIQ_I0_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10986:     """
 10987:     CONVERT IMAGE INTO YIQ MODEL
 10988:     Final YIQ model without the in phase value I = 0
 10989: 
 10990:     :param surface_: pygame.Surface;
 10991:     :return: void
 10992:     """
+10993:     cdef unsigned char [:,:,:] arr = pixels3d(surface_)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_surface_);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 10993, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_arr = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+10994:     RGB_TO_YIQ_I0_inplace_c(arr)
  __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_I0_inplace_c(__pyx_v_arr, 0);
 10995: 
 10996: @cython.binding(False)
 10997: @cython.binding(False)
 10998: @cython.boundscheck(False)
 10999: @cython.wraparound(False)
 11000: @cython.nonecheck(False)
 11001: @cython.cdivision(True)
 11002: @cython.profile(False)
+11003: cpdef inline void RGB_TO_YIQ_I0_inplace_c(unsigned char [:, :, :] rgb_array):
static PyObject *__pyx_pw_12PygameShader_6shader_211RGB_TO_YIQ_I0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_I0_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  struct yiq __pyx_v_yiq_;
  struct rgb __pyx_v_rgb_;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_I0_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_211RGB_TO_YIQ_I0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array); /*proto*/
static PyObject *__pyx_pw_12PygameShader_6shader_211RGB_TO_YIQ_I0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_I0_inplace_c (wrapper)", 0);
  assert(__pyx_arg_rgb_array); {
    __pyx_v_rgb_array = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_arg_rgb_array, PyBUF_WRITABLE); if (unlikely(!__pyx_v_rgb_array.memview)) __PYX_ERR(1, 11003, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.RGB_TO_YIQ_I0_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_210RGB_TO_YIQ_I0_inplace_c(__pyx_self, __pyx_v_rgb_array);
  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_6shader_210RGB_TO_YIQ_I0_inplace_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_rgb_array) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_I0_inplace_c", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_rgb_array.memview)) { __Pyx_RaiseUnboundLocalError("rgb_array"); __PYX_ERR(1, 11003, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_RGB_TO_YIQ_I0_inplace_c(__pyx_v_rgb_array, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 11003, __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.shader.RGB_TO_YIQ_I0_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 11004: 
 11005:     cdef Py_ssize_t w, h
+11006:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 11007: 
 11008:     cdef:
+11009:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 11010:         yiq yiq_
 11011:         rgb rgb_
 11012:         float h_
 11013:         unsigned char *r
 11014:         unsigned char *g
 11015:         unsigned char *b
 11016: 
 11017: 
+11018:     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:;
      }
  }
+11019:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_yiq_) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_yiq_) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* 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_r = ((unsigned char *)1);
+11020:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+11021:                 r = &rgb_array[i, j, 0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+11022:                 g = &rgb_array[i, j, 1]
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_10 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[2]) ))));
+11023:                 b = &rgb_array[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+11024:                 yiq_ = rgb_to_yiq(r[0] * <float>ONE_255, g[0] * <float>ONE_255, b[0] * <float>ONE_255)
                              __pyx_v_yiq_ = rgb_to_yiq(((__pyx_v_r[0]) * ((float)0.00392156862745098)), ((__pyx_v_g[0]) * ((float)0.00392156862745098)), ((__pyx_v_b[0]) * ((float)0.00392156862745098)));
+11025:                 rgb_ = yiq_to_rgb(yiq_.y, 0, yiq_.q)
                              __pyx_v_rgb_ = yiq_to_rgb(__pyx_v_yiq_.y, 0.0, __pyx_v_yiq_.q);
+11026:                 r[0] = <unsigned char>(rgb_.r * <float>255.0)
                              (__pyx_v_r[0]) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+11027:                 g[0] = <unsigned char>(rgb_.g * <float>255.0)
                              (__pyx_v_g[0]) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+11028:                 b[0] = <unsigned char>(rgb_.b * <float>255.0)
                              (__pyx_v_b[0]) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.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
      }
 11029: 
 11030: @cython.binding(False)
 11031: @cython.binding(False)
 11032: @cython.boundscheck(False)
 11033: @cython.wraparound(False)
 11034: @cython.nonecheck(False)
 11035: @cython.cdivision(True)
 11036: @cython.profile(False)
+11037: cpdef void RGB_TO_YIQ_Y0_inplace(object surface_):
static PyObject *__pyx_pw_12PygameShader_6shader_213RGB_TO_YIQ_Y0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static void __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Y0_inplace(PyObject *__pyx_v_surface_, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Y0_inplace", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_WriteUnraisable("PygameShader.shader.RGB_TO_YIQ_Y0_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_arr, 1);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_213RGB_TO_YIQ_Y0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_); /*proto*/
static char __pyx_doc_12PygameShader_6shader_212RGB_TO_YIQ_Y0_inplace[] = "\n    CONVERT IMAGE INTO YIQ MODEL\n    Final YIQ model without the luma value Y = 0\n\n    :param surface_: pygame.Surface; \n    :return: void\n    ";
static PyObject *__pyx_pw_12PygameShader_6shader_213RGB_TO_YIQ_Y0_inplace(PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Y0_inplace (wrapper)", 0);
  __pyx_r = __pyx_pf_12PygameShader_6shader_212RGB_TO_YIQ_Y0_inplace(__pyx_self, ((PyObject *)__pyx_v_surface_));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_12PygameShader_6shader_212RGB_TO_YIQ_Y0_inplace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Y0_inplace", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Y0_inplace(__pyx_v_surface_, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 11037, __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.shader.RGB_TO_YIQ_Y0_inplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 11038:     """
 11039:     CONVERT IMAGE INTO YIQ MODEL
 11040:     Final YIQ model without the luma value Y = 0
 11041: 
 11042:     :param surface_: pygame.Surface;
 11043:     :return: void
 11044:     """
+11045:     cdef unsigned char [:,:,:] arr = pixels3d(surface_)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pixels3d); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 11045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_surface_) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_surface_);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 11045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 11045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_arr = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+11046:     RGB_TO_YIQ_Y0_inplace_c(arr)
  __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Y0_inplace_c(__pyx_v_arr, 0);
 11047: 
 11048: @cython.binding(False)
 11049: @cython.binding(False)
 11050: @cython.boundscheck(False)
 11051: @cython.wraparound(False)
 11052: @cython.nonecheck(False)
 11053: @cython.cdivision(True)
 11054: @cython.profile(False)
+11055: cpdef inline void RGB_TO_YIQ_Y0_inplace_c(unsigned char [:, :, :] rgb_array):
static PyObject *__pyx_pw_12PygameShader_6shader_215RGB_TO_YIQ_Y0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array); /*proto*/
static CYTHON_INLINE void __pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Y0_inplace_c(__Pyx_memviewslice __pyx_v_rgb_array, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_w;
  CYTHON_UNUSED Py_ssize_t __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  struct yiq __pyx_v_yiq_;
  struct rgb __pyx_v_rgb_;
  unsigned char *__pyx_v_r;
  unsigned char *__pyx_v_g;
  unsigned char *__pyx_v_b;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Y0_inplace_c", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_12PygameShader_6shader_215RGB_TO_YIQ_Y0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array); /*proto*/
static PyObject *__pyx_pw_12PygameShader_6shader_215RGB_TO_YIQ_Y0_inplace_c(PyObject *__pyx_self, PyObject *__pyx_arg_rgb_array) {
  __Pyx_memviewslice __pyx_v_rgb_array = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Y0_inplace_c (wrapper)", 0);
  assert(__pyx_arg_rgb_array); {
    __pyx_v_rgb_array = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_char(__pyx_arg_rgb_array, PyBUF_WRITABLE); if (unlikely(!__pyx_v_rgb_array.memview)) __PYX_ERR(1, 11055, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("PygameShader.shader.RGB_TO_YIQ_Y0_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_12PygameShader_6shader_214RGB_TO_YIQ_Y0_inplace_c(__pyx_self, __pyx_v_rgb_array);
  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_6shader_214RGB_TO_YIQ_Y0_inplace_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_rgb_array) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("RGB_TO_YIQ_Y0_inplace_c", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_rgb_array.memview)) { __Pyx_RaiseUnboundLocalError("rgb_array"); __PYX_ERR(1, 11055, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_12PygameShader_6shader_RGB_TO_YIQ_Y0_inplace_c(__pyx_v_rgb_array, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 11055, __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.shader.RGB_TO_YIQ_Y0_inplace_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_rgb_array, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 11056: 
 11057:     cdef Py_ssize_t w, h
+11058:     w, h = rgb_array.shape[:2]
  __pyx_t_1 = __pyx_v_rgb_array.shape;
  __pyx_t_2 = (__pyx_t_1[0]);
  __pyx_t_3 = (__pyx_t_1[1]);
  __pyx_v_w = __pyx_t_2;
  __pyx_v_h = __pyx_t_3;
 11059: 
 11060:     cdef:
+11061:         int i=0, j=0
  __pyx_v_i = 0;
  __pyx_v_j = 0;
 11062:         yiq yiq_
 11063:         rgb rgb_
 11064:         float h_
 11065:         unsigned char *r
 11066:         unsigned char *g
 11067:         unsigned char *b
 11068: 
 11069: 
+11070:     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:;
      }
  }
+11071:         for j in prange(h, schedule='static', num_threads=THREADS):
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_yiq_) schedule(static)
/* … */
        __pyx_t_3 = __pyx_v_h;
        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_4 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_4 > 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_r) lastprivate(__pyx_v_rgb_) lastprivate(__pyx_v_yiq_) schedule(static) num_threads(__pyx_v_12PygameShader_6shader_THREADS)
                    #endif /* _OPENMP */
                    for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_4; __pyx_t_2++){
                        {
                            __pyx_v_j = (int)(0 + 1 * __pyx_t_2);
                            /* 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_r = ((unsigned char *)1);
+11072:             for i in range(w):
                            __pyx_t_5 = __pyx_v_w;
                            __pyx_t_6 = __pyx_t_5;
                            for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                              __pyx_v_i = __pyx_t_7;
+11073:                 r = &rgb_array[i, j, 0]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 0;
                              __pyx_v_r = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+11074:                 g = &rgb_array[i, j, 1]
                              __pyx_t_10 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_8 = 1;
                              __pyx_v_g = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_10 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_8 * __pyx_v_rgb_array.strides[2]) ))));
+11075:                 b = &rgb_array[i, j, 2]
                              __pyx_t_8 = __pyx_v_i;
                              __pyx_t_9 = __pyx_v_j;
                              __pyx_t_10 = 2;
                              __pyx_v_b = (&(*((unsigned char *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_rgb_array.data + __pyx_t_8 * __pyx_v_rgb_array.strides[0]) ) + __pyx_t_9 * __pyx_v_rgb_array.strides[1]) ) + __pyx_t_10 * __pyx_v_rgb_array.strides[2]) ))));
+11076:                 yiq_ = rgb_to_yiq(r[0] * <float>ONE_255, g[0] * <float>ONE_255, b[0] * <float>ONE_255)
                              __pyx_v_yiq_ = rgb_to_yiq(((__pyx_v_r[0]) * ((float)0.00392156862745098)), ((__pyx_v_g[0]) * ((float)0.00392156862745098)), ((__pyx_v_b[0]) * ((float)0.00392156862745098)));
+11077:                 rgb_ = yiq_to_rgb(0, yiq_.i, yiq_.q)
                              __pyx_v_rgb_ = yiq_to_rgb(0.0, __pyx_v_yiq_.i, __pyx_v_yiq_.q);
+11078:                 r[0] = <unsigned char>(rgb_.r * <float>255.0)
                              (__pyx_v_r[0]) = ((unsigned char)(__pyx_v_rgb_.r * ((float)255.0)));
+11079:                 g[0] = <unsigned char>(rgb_.g * <float>255.0)
                              (__pyx_v_g[0]) = ((unsigned char)(__pyx_v_rgb_.g * ((float)255.0)));
+11080:                 b[0] = <unsigned char>(rgb_.b * <float>255.0)
                              (__pyx_v_b[0]) = ((unsigned char)(__pyx_v_rgb_.b * ((float)255.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
      }
 11081: